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

使用 Amazon EC2 创建虚拟设备

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

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

设置 Amazon EC2 实例

以下步骤介绍了如何创建一个 Amazon EC2 实例,以作为您的虚拟设备代替物理设备。

启动实例

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 从控制台控制面板中,选择启动实例

  3. Step 1: Choose an Amazon Machine Image (AMI)(第一步:选择一个 Amazon Machine Images (AMI))的页面显示了名为 Amazon Machine Image (AMI) 的基本配置列表,其可作为您的实例模板。选择 Amazon Linux 2 的 HVM 版本,例如 Amazon Linux 2 AMI (HVM),SSD 卷类型请注意,此 AMI 标记为“Free tier eligible”(符合条件的免费套餐)。

  4. Choose an Instance Type (选择实例类型) 页面上,您可以选择实例的硬件配置。选择 t2.micro 类型 (预设情况下的选择)。请注意,此实例类型适用免费套餐。

  5. 选择 Review and Launch 让向导为您完成其他配置设置。

  6. Review Instance Launch 页面上,选择 Launch

  7. 当系统提示提供密钥对时,请选择 Create a new key pair(创建新密钥对),为密钥对输入名称,然后选择 Download Key Pair(下载密钥对)。这是您保存私有密钥文件的唯一机会,因此务必进行下载。 将私有密钥文件保存在安全位置。当您启动实例时,您将需要提供密钥对的名称;当您每次连接到实例时,您将需要提供相应的私有密钥。

    警告

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

    如果准备就绪,请选择 Launch Instances(启动实例)。

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

  9. 实例屏幕上,您可以查看启动状态。启动实例只需很短的时间。启动实例时,其初始状态为 pending。实例启动后,其状态变为 running,并且会收到一个公有 DNS 名称。(如果 Public DNS (IPv4) 列已隐藏,请选择页面右上角的 Show/Hide Columns (齿轮状图标),然后选择 Public DNS (IPv4)。)

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

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

连接到您的 实例

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

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

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

  4. 选择 Amazon EC2 Instance Connect (browser-based SSH connection)(Amazon EC2 Instance Connect(基于浏览器的 SSH 连接))、Connect(连接)。

您现在应该有一个 Amazon EC2 Instance Connect 窗口,该窗口将登录到您的新 Amazon EC2 实例。

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

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

要安装 Git

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

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

    sudo yum install git -y

要安装 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. 在您的 Amazon EC2 Instance Connect 窗口中,使用以下命令借助 nvm 安装最新版本的 Node.js。

    nvm install node

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

  4. 在您的 Amazon EC2 Instance Connect 窗口中,使用此命令测试 Node.js 已安装且运行正常。

    node -v

    本教程需要 Node v10.0 或更高版本。

配置 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 直接创建事物对象及其证书文件。这是直接在设备上执行的,以避免将它们从另一台电脑复制到设备时可能出现的潜在复杂问题。

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

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

  1. 在您的 Amazon EC2 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. 在您的 Amazon EC2 Instance Connect 窗口中,创建用于存储证书和密钥文件的目录。

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

    curl -o ~/certs/Amazon-root-CA-1.pem \ https://www.amazontrust.com/repository/AmazonRootCA1.pem
  3. 在您的 Amazon EC2 Instance Connect 窗口中,运行以下命令以创建您的私有密钥、公有密钥和 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. 在您的 Amazon EC2 Instance Connect 窗口中,使用以下命令和之前命令响应中的 certificateArn 将您的事物对象附加到您刚刚创建的证书上。

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

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

要创建并附加策略

  1. 在您的 Amazon EC2 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. 在您的 Amazon EC2 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. 在您的 Amazon EC2 Instance Connect 窗口中,使用以下命令将策略附加到虚拟设备的证书。

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

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

此时,您已为虚拟设备创建了以下内容:

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

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

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

安装适用于 JavaScript 的 Amazon IoT 设备软件开发工具包

在本部分中,您将安装适用于 JavaScript 的 Amazon IoT 设备软件开发工具包,其中包含可使应用程序用于与 Amazon IoT 通信的代码和示例程序.

要在您的 Linux 实例上安装适用于 JavaScript 的 Amazon IoT 设备软件开发工具包

  1. 在您的 Amazon EC2 Instance Connect 窗口中,使用此命令将适用于 JavaScript 的 Amazon IoT 设备软件开发工具包存储库克隆到您的主目录中的 aws-iot-device-sdk-js-v2 目录。

    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 安装软件开发工具包。

    npm install

运行示例应用程序

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

证书文件名

文件

文件路径

私有密钥

~/certs/private.pem.key

设备证书

~/certs/device.pem.crt

根 CA 证书

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

在本部分中,您将安装并运行在适用于 JavaScript 的 Amazon IoT 设备软件开发工具包的 aws-iot-device-sdk-js-v2/samples/node 目录中找到的 pub-sub.js 示例应用程序。此应用程序显示设备(即您的 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 目录,并使用这些命令安装示例应用程序。

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

    aws iot describe-endpoint --endpoint-type iot:Data-ATS
  3. 在您的 Amazon EC2 Instance Connect 窗口中,按照说明插入 your-iot-endpoint 并运行此命令。

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

示例应用程序:

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

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

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

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

    Publish received on topic topic_1 {"message":"Hello world!","sequence":1} Publish received on topic topic_1 {"message":"Hello world!","sequence":2} Publish received on topic topic_1 {"message":"Hello world!","sequence":3} Publish received on topic topic_1 {"message":"Hello world!","sequence":4} Publish received on topic topic_1 {"message":"Hello world!","sequence":5} Publish received on topic topic_1 {"message":"Hello world!","sequence":6} Publish received on topic topic_1 {"message":"Hello world!","sequence":7} Publish received on topic topic_1 {"message":"Hello world!","sequence":8} Publish received on topic topic_1 {"message":"Hello world!","sequence":9} Publish received on topic topic_1 {"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. 订阅主题 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 --root-ca ~/certs/Amazon-root-CA-1.pem --cert ~/certs/device.pem.crt --key ~/certs/private.pem.key --endpoint your-iot-endpoint