本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon 创建虚拟设备 EC2
在本教程中,您将创建一个 Amazon EC2 实例,用作云中的虚拟设备。
要完成本教程,你需要一个Amazon Web Services 账户。如果您没有账户,请完成 设置 Amazon Web Services 账户 中介绍的步骤然后继续操作。
在本教程中,您将:
设置一个 Amazon EC2 实例
以下步骤向您展示如何创建一个 Amazon EC2 实例,该实例将代替物理设备充当您的虚拟设备。
如果这是您首次创建 Amazon EC2 实例,您可能会发现 Amaz on EC2 Linux 实例入门中的说明会更有帮助。
启动实例
打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/
。 -
在左侧的控制台菜单中,展开 Instances(实例)部分并选择 Instances(实例)。在 Instances(实例)控制面板中,选择右侧的 Launch instances(启动实例)以显示基本配置列表。
-
在 Name and tags(名称和标签)部分中,输入实例的名称并可选添加标签。
-
在应用程序和操作系统映像(Amazon 机器映像)下,为您的实例选择一个 AMI 模板,例如 Amazon Linux 2 AMI(HVM)。请注意,此 AMI 标记为“符合条件的免费套餐”。
-
在 Instance type(实例类型)部分中,您可以选择实例的硬件配置。选择
t2.micro类型(默认情况下的选择)。请注意,此实例类型适用免费套餐。 -
在 Key pair (login) [密钥对(登录)] 部分中,从下拉列表中选择密钥对名称,或选择 Create a new key pair(创建新的密钥对)以创建新的密钥对。创建新的密钥对时,确保您下载私钥文件并将其保存在安全的地方,因为这是您下载和保存它的唯一机会。当您启动实例时,您将需要提供密钥对的名称;当您每次连接到实例时,您将需要提供相应的私有密钥。
警告
请勿选择 Proceed without a key pair(在没有密钥对的情况下继续)选项。如果您启动的实例没有密钥对,就不能连接到该实例。
-
在 Network settings(网络设置)部分和 Configure storage(配置存储)部分中,您可以保留默认设置。准备就绪后,选择 Launch instances(启动实例)。
-
确认页面会让您知道自己的实例已启动。选择 View Instances 以关闭确认页面并返回控制台。
-
在实例屏幕上,您可以查看启动状态。启动实例只需很短的时间。启动实例时,其初始状态为
pending。实例启动后,其状态变为running,并且会收到一个公有 DNS 名称。(如果公用 DNS (IPv4) 列处于隐藏状态,请选择页面右上角的 “显示/隐藏列”(齿轮形图标),然后选择 “公用 DNS ()”。)IPv4 -
需要几分钟准备好实例,以便您能连接到实例。检查您的实例是否通过了状态检查;您可以在 Status Checks 列中查看此信息。
在您的新实例通过其状态检查后,继续执行下一个流程并连接到此实例。
连接到您的实例
您可以使用基于浏览器的客户端连接到实例,方法是从 Amazon EC2 控制台中选择该实例,然后选择使用 Amazon Instance Connect 进行 EC2 连接。Instance Connect 处理权限并提供成功的连接。
打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/
。 -
在左侧菜单上,选择 Instances(实例)。
-
选择实例,然后选择连接。
-
选择亚马逊 Instance EC2 Connect,Connect。
现在,您应该有一个登录到您的新亚马逊 EC2 EC2 实例的 Amazon Instance Connect 窗口。
安装 Git、Node.js 并配置 Amazon CLI
在本部分中,您将在 Linux 实例上安装 Git 和 Node.js。
要安装 Git
-
在您的 Amazon EC2 Instance Connect 窗口中,使用以下命令更新您的实例。
sudo yum update -y -
在您的 Amaz EC2 on Instance Connec t 窗口中,使用以下命令安装 Git。
sudo yum install git -y -
要检查 Git 是否已安装以及 Git 的当前版本,请运行以下命令:
git --version
要安装 Node.js
-
在您的 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。
-
在您的 Amazon EC2 Instance Connect 窗口中,使用此命令激活 nvm。
. ~/.nvm/nvm.sh -
在您的 Ama EC2 zon Instance Connect 窗口中,使用此命令使用 nvm 安装最新版本的 Node.js。
nvm install 16注意
这将安装最新 LTS 版本的 Node.js。
安装 Node.js 还会安装节点程序包管理器(npm),以便您根据需要安装其它模块。
-
在您的 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。
-
以下示例显示了示例值。将它们替换为您自己的值:您可以在 Amazon 控制台的 My Security Credentials
(我的安全凭证)项下的账户信息中找到这些值。 在您的 Amazon EC2 Instance Connect 窗口中,输入以下命令:
aws configure然后在显示的提示处输入您账户中的值。
AmazonAccess Key ID [None]:AKIAIOSFODNN7EXAMPLEAmazonSecret Access Key [None]:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEYDefault region name [None]:us-west-2Default output format [None]:json -
你可以用这个命令测试你的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 实例。
-
在您的 Amaz EC2 on Instance Connect 窗口中,运行以下命令来创建您的事物对象。
aws iot create-thing --thing-name "MyIotThing" -
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
-
在您的 Amaz EC2 on Instance Connect 窗口中,创建一个目录来存储您的证书和密钥文件。
mkdir ~/certs -
在您的 Ama EC2 zon Instance Connect 窗口中,使用此命令下载亚马逊证书颁发机构 (CA) 证书的副本。
curl -o ~/certs/Amazon-root-CA-1.pem \ https://www.amazontrust.com/repository/AmazonRootCA1.pem -
在您的 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" } } -
在您的 Amazon EC2 Instance C onnect 窗口中,使用以下命令和上一个命令的响应
certificateArn中,将您的事物对象附加到您刚刚创建的证书。aws iot attach-thing-principal \ --thing-name "MyIotThing" \ --principal "certificateArn"如果成功,此命令将不会显示任何输出。
要创建并附加策略
-
在您的 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": [ "*" ] } ] }
-
在您的 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" }
-
在您的 Ama EC2 zon 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设备软件开发工具包
-
在您的 Amaz EC2 on Instance Connect 窗口中,使用此命令将 JavaScript 存储库的Amazon IoT设备软件开发工具包克隆到您的主目录目录中。
aws-iot-device-sdk-js-v2cd ~ git clone https://github.com/aws/aws-iot-device-sdk-js-v2.git -
导航到您在上一步中创建的
aws-iot-device-sdk-js-v2目录。cd aws-iot-device-sdk-js-v2 -
使用 npm 安装 SDK。
npm install
运行示例应用程序
下一部分中的命令假定您的密钥和证书文件均已存储在设备上,如下表中所示。
|
文件 |
文件路径 |
|---|---|
|
私有密钥 |
|
|
设备证书 |
|
|
根 CA 证书 |
|
在本节中,您将安装并运行位于Amazon IoT设备软件开发工具包aws-iot-device-sdk-js-v2/samples/node目录中的pub-sub.js示例应用程序 JavaScript。此应用程序显示了设备(您的亚马逊 EC2 实例)如何使用 MQTT 库来发布和订阅 MQTT 消息。pub-sub.js 示例应用程序订阅主题 topic_1,将 10 条消息发布到该主题,并在从消息代理收到这些消息时予以显示。
要安装和运行示例应用程序
-
在您的 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 -
在您的 Amazon EC2 Instance Connect 窗口中,使用此命令
your-iot-endpoint从中Amazon IoT获取。aws iot describe-endpoint --endpoint-type iot:Data-ATS -
在您的 Amaz EC2 on 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 --endpointyour-iot-endpoint
示例应用程序:
-
Amazon IoT Core为您的账户连接到。
-
订阅消息主题 topic_1,并显示它收到的有关该主题的消息。
-
向主题 topic_1 发布 10 条消息。
-
输出类似于以下内容:
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 消息
-
审核 使用 MQTT 客户端查看 Amazon IoT MQTT 消息。它可以帮助您了解如何使用 Amazon IoT控制台中的 MQTT 测试客户端来查看通过消息代理时的 MQTT 消息。
-
在 Amazon IoT 控制台中打开 MQTT 测试客户端。
-
在 Subscribe to a topic(订阅主题)中,订阅主题 topic_1。
-
在您的 Amazon EC2 Instance Connec t 窗口中,再次运行示例应用程序,然后在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 --endpointyour-iot-endpoint
有关 MQTT 以及如何Amazon IoT Core支持该协议的更多信息,请参阅 MQ TT。