使用 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 实例,您可能会发现开始使用 Amazon EC2 Linux 实例中的说明更有用。

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

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

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

  4. Application and OS Images (Amazon Machine Image) [应用程序和操作系统映像(Amazon 机器映像)] 下,为您的实例选择一个 AMI 模板,例如 Amazon Linux 2 AMI (HVM)请注意,此 AMI 标记为“Free tier eligible”(符合条件的免费套餐)。

  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 名称。(如果 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(Amazon EC2 实例连接)和 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
  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. 在您的 Amazon EC2 Instance Connect 窗口中,使用以下命令借助 nvm 安装最新版本的 Node.js。

    nvm install 16
    注意

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

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

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

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

    本教程需要 Node v10.0 或更高版本。有关更多信息,请参阅 Tutorial: Setting Up Node.js on an Amazon EC2 Instance(教程:设置 Amazon 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. 在您的 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 设备 SDK JavaScript

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

在您的 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 安装 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/node目录中的pub-sub.js示例应用程序 JavaScript。此应用程序显示设备(即您的 Amazon EC2 实例)如何使用 MQTT 库发布和订阅 MQTT 消息。pub-sub.js 示例应用程序订阅主题 topic_1,将 10 条消息发布到该主题,并在从消息代理收到这些消息时予以显示。

要安装和运行示例应用程序
  1. 在您的 Amazon EC2 Instance Connect 窗口中,导航到 SDK 创建的 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 窗口中,使用此命令your-iot-endpoint从中 Amazon IoT 获取。

    aws iot describe-endpoint --endpoint-type iot:Data-ATS
  3. 在您的 Amazon EC2 Instance 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. 审核使用 MQTT 客户端查看 Amazon IoT MQTT 消息。它可以帮助您了解如何使用 Amazon IoT 控制台中的 MQTT 测试客户端来查看通过消息代理时的 MQTT 消息。

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

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

  4. Amazon EC2 实例连接窗口中,再次运行示例应用程序,然后在 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 支持该协议的更多信息,请参阅 MQ TT。