使用 Amazon 创建虚拟设备 EC2 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon 创建虚拟设备 EC2

在本教程中,您将创建一个 Amazon EC2 实例作为云中的虚拟设备。

要完成本教程,你需要一个 Amazon Web Services 账户。如果您没有账户,请完成 设置 Amazon Web Services 账户 中介绍的步骤然后继续操作。

设置一个 Amazon EC2 实例

以下步骤向您展示如何创建一个 Amazon EC2 实例,该实例将代替物理设备充当您的虚拟设备。

如果这是您首次创建 Amazon EC2 实例,您可能会发现 A mazon EC2Linux 实例入门中的说明会更有帮助。

启动实例
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在左侧的控制台菜单中,展开 Instances(实例)部分并选择 Instances(实例)。在 Instances(实例)控制面板中,选择右侧的 Launch instances(启动实例)以显示基本配置列表。

  3. Name and tags(名称和标签)部分中,输入实例的名称并可选添加标签。

  4. 应用程序和操作系统映像(亚马逊系统映像)部分,为您的实例选择一个AMI模板,例如 Amazon Linux 2 AMI (HVM)请注意,这被标记AMI为 “符合免费套餐资格”。

  5. Instance type(实例类型)部分中,您可以选择实例的硬件配置。选择 t2.micro 类型 (默认情况下的选择)。请注意,此实例类型适用免费套餐。

  6. Key pair (login) [密钥对(登录)] 部分中,从下拉列表中选择密钥对名称,或选择 Create a new key pair(创建新的密钥对)以创建新的密钥对。创建新的密钥对时,确保您下载私钥文件并将其保存在安全的地方,因为这是您下载和保存它的唯一机会。当您启动实例时,您将需要提供密钥对的名称;当您每次连接到实例时,您将需要提供相应的私有密钥。

    警告

    请勿选择 Proceed without a key pair(在没有密钥对的情况下继续)选项。如果您启动的实例没有密钥对,就不能连接到该实例。

  7. Network settings(网络设置)部分和 Configure storage(配置存储)部分中,您可以保留默认设置。准备就绪后,选择 Launch instances(启动实例)。

  8. 确认页面会让您知道自己的实例已启动。选择 View Instances 以关闭确认页面并返回控制台。

  9. 实例屏幕上,您可以查看启动状态。启动实例只需很短的时间。启动实例时,其初始状态为 pending。实例启动后,其状态更改为,running并获得一个公共DNS名称。(如果隐藏 “公开” DNS (IPv4) 列,请选择页面右上角的 “显示/隐藏列”(齿轮形图标),然后选择 “公开 DNS”()。)IPv4

  10. 需要几分钟准备好实例,以便您能连接到实例。检查您的实例是否通过了状态检查;您可以在 Status Checks 列中查看此信息。

    在您的新实例通过其状态检查后,继续执行下一个流程并连接到此实例。

连接到您的实例

您可以使用基于浏览器的客户端连接到实例,方法是从 Amazon EC2 控制台中选择该实例,然后选择使用 Amazon Instance Connect 进行EC2连接。Instance Connect 处理权限并提供成功的连接。

  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在左侧菜单上,选择 Instances(实例)。

  3. 选择实例,然后选择连接

  4. 选择亚马逊 Instance EC2 ConnectConnect

现在,您应该有一个登录到您的新亚马逊EC2EC2实例的 Amazon Instance Connect 窗口。

安装 Git、Node.js 并配置 Amazon CLI

在本部分中,您将在 Linux 实例上安装 Git 和 Node.js。

要安装 Git
  1. 在您的 Amazon EC2 Instance Connect 窗口中,使用以下命令更新您的实例。

    sudo yum update -y
  2. 在您的 Amaz EC2 on Instance Connec t 窗口中,使用以下命令安装 Git。

    sudo yum install git -y
  3. 要检查 Git 是否已安装以及 Git 的当前版本,请运行以下命令:

    git --version
要安装 Node.js
  1. 在您的 Amazon EC2 Instance Connect 窗口中,使用以下命令安装节点版本管理器 (nvm)。

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

    由于 nvm 可以安装多个版本的 Node.js 并允许您在各个版本之间切换,我们将使用 nvm 安装 Node.js。

  2. 在您的 Amazon EC2 Instance Connect 窗口中,使用此命令激活 nvm。

    . ~/.nvm/nvm.sh
  3. 在你的 Ama EC2 zon Instance Connect 窗口中,使用此命令使用 nvm 安装最新版本的 Node.js。

    nvm install 16
    注意

    这将安装最新LTS版本的 Node.js。

    安装 Node.js 还会安装节点程序包管理器 (npm),以便您根据需要安装其它模块。

  4. 在您的 Ama EC2 zon Instance Connect 窗口中,使用此命令测试 Node.js 是否已正确安装和运行。

    node -e "console.log('Running Node.js ' + process.version)"

    本教程需要 Node v10.0 或更高版本。有关更多信息,请参阅教程:在亚马逊EC2实例上设置 Node.js

要配置 Amazon CLI

您的 Amazon EC2 实例预装了。 Amazon CLI但是,您必须完成您的 Amazon CLI 个人资料。有关如何配置的更多信息CLI,请参阅配置 Amazon CLI

  1. 以下示例显示了示例值。将它们替换为您自己的值:您可以在 Amazon 控制台的 My Security Credentials(我的安全凭证)项下的账户信息中找到这些值。

    在您的 Amazon EC2 Instance Connect 窗口中,输入以下命令:

    aws configure

    然后在显示的提示处输入您账户中的值。

    Amazon Access Key ID [None]: AKIAIOSFODNN7EXAMPLE Amazon Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY Default region name [None]: us-west-2 Default output format [None]: json
  2. 你可以用这个命令测试你的 Amazon CLI 配置:

    aws iot describe-endpoint --endpoint-type iot:Data-ATS

    如果您的配置 Amazon CLI 正确,则该命令应从中返回终端节点地址 Amazon Web Services 账户。

为您的虚拟设备创建 Amazon IoT 资源

本节介绍如何使用直接在虚拟设备上创建事物对象及其证书文件。 Amazon CLI 这是直接在设备上执行的,以避免将它们从另一台电脑复制到设备时可能出现的潜在复杂问题。在本节中,您将为虚拟设备创建以下资源:

  • 用于代表您的虚拟设备的事物对象 Amazon IoT。

  • 用于验证虚拟设备身份的证书。

  • 授权虚拟设备连接到 Amazon IoT以及发布、接收和订阅消息的策略文档。

在您的 Linux 实例中创建 Amazon IoT 事物对象

连接的设备 Amazon IoT 由 Amazon IoT 注册表中的事物对象表示。事物对象表示特定设备或逻辑实体。在这种情况下,您的事物对象将代表您的虚拟设备,即此 Amazon EC2 实例。

  1. 在您的 Amaz EC2 on Instance Connect 窗口中,运行以下命令来创建您的事物对象。

    aws iot create-thing --thing-name "MyIotThing"
  2. JSON响应应如下所示:

    { "thingArn": "arn:aws:iot:your-region:your-aws-account:thing/MyIotThing", "thingName": "MyIotThing", "thingId": "6cf922a8-d8ea-4136-f3401EXAMPLE" }
在 Linux 实例中创建和附加 Amazon IoT 密钥和证书

create-keys-and-certificate 命令将创建由 Amazon Root 证书颁发机构签名的客户端证书。此证书用于验证虚拟设备的身份。

  1. 在您的 Amaz EC2 on Instance Connect 窗口中,创建一个目录来存储您的证书和密钥文件。

    mkdir ~/certs
  2. 在您的 Ama EC2 zon Instance Connect 窗口中,使用此命令下载亚马逊证书颁发机构 (CA) 证书的副本。

    curl -o ~/certs/Amazon-root-CA-1.pem \ https://www.amazontrust.com/repository/AmazonRootCA1.pem
  3. 在您的 Ama EC2 zon Instance Connec t 窗口中,运行以下命令来创建您的私钥、公钥和 X.509 证书文件。此命令还使用注册和激活证书。 Amazon IoT

    aws iot create-keys-and-certificate \ --set-as-active \ --certificate-pem-outfile "~/certs/device.pem.crt" \ --public-key-outfile "~/certs/public.pem.key" \ --private-key-outfile "~/certs/private.pem.key"

    响应看起来与以下内容类似。保存 certificateArn,以便您可以在后续命令中使用。您需要使用它来将证书附加到您的事物上,并在稍后的步骤中将策略附加到证书上。

    { "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/9894ba17925e663f1d29c23af4582b8e3b7619c31f3fbd93adcb51ae54b83dc2", "certificateId": "9894ba17925e663f1d29c23af4582b8e3b7619c31f3fbd93adcb51ae54b83dc2", "certificatePem": " -----BEGIN CERTIFICATE----- MIICiTCCEXAMPLE6m7oRw0uXOjANBgkqhkiG9w0BAQUFADCBiDELMAkGA1UEBhMC VVMxCzAJBgNVBAgEXAMPLEAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6 b24xFDASBgNVBAsTC0lBTSEXAMPLE2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAd BgkqhkiG9w0BCQEWEG5vb25lQGFtYEXAMPLEb20wHhcNMTEwNDI1MjA0NTIxWhcN MTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBhMCEXAMPLEJBgNVBAgTAldBMRAwDgYD VQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDAEXAMPLEsTC0lBTSBDb25z b2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEXAMPLE25lQGFt YXpvbi5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMaK0dn+aEXAMPLE EXAMPLEfEvySWtC2XADZ4nB+BLYgVIk60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9T rDHudUZEXAMPLELG5M43q7Wgc/MbQITxOUSQv7c7ugFFDzQGBzZswY6786m86gpE Ibb3OhjZnzcvQAEXAMPLEWIMm2nrAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4 nUhVVxYUntneD9+h8Mg9qEXAMPLEyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0Fkb FFBjvSfpJIlJ00zbhNYS5f6GuoEDEXAMPLEBHjJnyp378OD8uTs7fLvjx79LjSTb NYiytVbZPQUQ5Yaxu2jXnimvw3rrszlaEXAMPLE= -----END CERTIFICATE-----\n", "keyPair": { "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\nMMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\n59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\nhJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\nFQIDAQAB\n-----END PUBLIC KEY-----\n", "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nkey omitted for security reasons\n-----END RSA PRIVATE KEY-----\n" } }
  4. 在您的 Ama EC2 zon In stance Connect 窗口中,使用以下命令将您的事物对象附加到您刚刚创建的证书,然后 certificateArn 在上一个命令的响应中。

    aws iot attach-thing-principal \ --thing-name "MyIotThing" \ --principal "certificateArn"

    如果成功,此命令将不会显示任何输出。

要创建并附加策略
  1. 在您的 Amaz EC2 on Instance Connect 窗口中,通过将该策略文件复制并粘贴到名~/policy.json为的文件中来创建策略文件。

    如果您没有惯用的 Linux 编辑器,则可以使用此命令打开 nano

    nano ~/policy.json

    policy.json 的策略文档粘贴到其中。输入 ctrl-x 退出 nano 编辑器并保存文件。

    policy.json 策略文档的内容。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Publish", "iot:Subscribe", "iot:Receive", "iot:Connect" ], "Resource": [ "*" ] } ] }
  2. 在您的 Amaz EC2 on Instance Connect 窗口中,使用以下命令创建您的策略。

    aws iot create-policy \ --policy-name "MyIotThingPolicy" \ --policy-document "file://~/policy.json"

    输出:

    { "policyName": "MyIotThingPolicy", "policyArn": "arn:aws:iot:your-region:your-aws-account:policy/MyIotThingPolicy", "policyDocument": "{ \"Version\": \"2012-10-17\", \"Statement\": [ { \"Effect\": \"Allow\", \"Action\": [ \"iot:Publish\", \"iot:Receive\", \"iot:Subscribe\", \"iot:Connect\" ], \"Resource\": [ \"*\" ] } ] }", "policyVersionId": "1" }
  3. 在您的 Ama EC2 zon Instance Connect 窗口中,使用以下命令将策略附加到您的虚拟设备的证书。

    aws iot attach-policy \ --policy-name "MyIotThingPolicy" \ --target "certificateArn"

    如果成功,此命令将不会显示任何输出。

安装 Amazon IoT 设备SDK用于 JavaScript

在本节中,您将安装SDK的 Amazon IoT 设备 JavaScript,其中包含应用程序可以用来与之通信的代码 Amazon IoT 和示例程序。有关更多信息,SDK请参阅 JavaScript GitHub 存储库Amazon IoT 设备

在您的 Linux 实例 JavaScript 上安装的 Amazon IoT 设备 SDK
  1. 在您的 Ama EC2 zon Instance Connect 窗口中,aws-iot-device-sdk-js-v2使用此命令将 JavaScript 存储库 Amazon IoT 设备SDK克隆到您的主目录目录中。

    cd ~ git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git
  2. 导航到您在上一步中创建的 aws-iot-device-sdk-js-v2 目录。

    cd aws-iot-device-sdk-js-v2
  3. 使用 npm 来安装。SDK

    npm install

运行示例应用程序

下一部分中的命令假定您的密钥和证书文件均已存储在设备上,如下表中所示。

证书文件名

文件

文件路径

私有密钥

~/certs/private.pem.key

设备证书

~/certs/device.pem.crt

根 CA 证书

~/certs/Amazon-root-CA-1.pem

在本节中,您将安装并运行位于 Amazon IoT 设备aws-iot-device-sdk-js-v2/samples/nodeSDK目录中的pub-sub.js示例应用程序 JavaScript。此应用程序显示了设备(您的Amazon EC2 实例)如何使用MQTT库来发布和订阅MQTT消息。pub-sub.js 示例应用程序订阅主题 topic_1,将 10 条消息发布到该主题,并在从消息代理收到这些消息时予以显示。

要安装和运行示例应用程序
  1. 在您的 Amazon EC2 Instance Connect 窗口aws-iot-device-sdk-js-v2/samples/node/pub_sub中,导航到SDK创建的目录并使用这些命令安装示例应用程序。

    cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub npm install
  2. Amazon Instan EC2 ce Connect 窗口中,获取 your-iot-endpoint 使用 Amazon IoT 此命令从。

    aws iot describe-endpoint --endpoint-type iot:Data-ATS
  3. Amazon Instan EC2 ce Connect 窗口中,插入 your-iot-endpoint 如上所示,然后运行此命令。

    node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint

示例应用程序:

  1. Amazon IoT Core 为您的账户连接到。

  2. 订阅消息主题 topic_1,并显示它收到的有关该主题的消息。

  3. 向主题 topic_1 发布 10 条消息。

  4. 输出类似于以下内容:

    Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":1} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":2} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":3} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":4} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":5} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":6} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":7} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":8} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":9} Publish received. topic:"topic_1" dup:false qos:1 retain:false {"message":"Hello world!","sequence":10}

如果您在运行示例应用程序时遇到问题,请查看 对示例应用程序的问题进行故障排除

您还可以将 --verbosity debug 参数添加到命令行,以便示例应用程序显示有关其正在执行的操作的详细消息。该信息可能会为您提供帮助以便您解决问题。

在 Amazon IoT 控制台中查看来自示例应用程序的消息

使用Amazon IoT 控制台中的MQTT测试客户端,您可以在示例应用程序通过消息代理时查看这些消息。

查看示例应用程序发布的MQTT消息
  1. 审核通过 Amazon IoT MQTT客户端查看MQTT消息。这可以帮助你学习如何使用Amazon IoT 控制台中的MQTT测试客户端在MQTT消息通过消息代理时查看消息。

  2. Amazon IoT 控制台中打开MQTT测试客户端

  3. Subscribe to a topic(订阅主题)中,订阅主题 topic_1

  4. 在您的 Amazon EC2 Instance Connect 窗口中,再次运行示例应用程序,然后在Amazon IoT 控制台MQTT测试客户端中查看消息。

    cd ~/aws-iot-device-sdk-js-v2/samples/node/pub_sub node dist/index.js --topic topic_1 --ca_file ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint

有关该协议MQTT以及如何 Amazon IoT Core 支持该协议的更多信息,请参阅MQTT