本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon 创建虚拟设备 EC2
在本教程中,您将创建一个 Amazon EC2 实例作为云中的虚拟设备。
要完成本教程,你需要一个 Amazon Web Services 账户。如果您没有账户,请完成 设置 Amazon Web Services 账户 中介绍的步骤然后继续操作。
在本教程中,您将:
设置一个 Amazon EC2 实例
以下步骤向您展示如何创建一个 Amazon EC2 实例,该实例将代替物理设备充当您的虚拟设备。
如果这是您首次创建 Amazon EC2 实例,您可能会发现 A mazon EC2Linux 实例入门中的说明会更有帮助。
启动实例
打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/
。 -
在左侧的控制台菜单中,展开 Instances(实例)部分并选择 Instances(实例)。在 Instances(实例)控制面板中,选择右侧的 Launch instances(启动实例)以显示基本配置列表。
-
在 Name and tags(名称和标签)部分中,输入实例的名称并可选添加标签。
-
在应用程序和操作系统映像(亚马逊系统映像)部分,为您的实例选择一个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。
现在,您应该有一个登录到您的新亚马逊EC2EC2实例的 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
然后在显示的提示处输入您账户中的值。
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
-
你可以用这个命令测试你的 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" } } -
在您的 Ama EC2 zon In stance Connect 窗口中,使用以下命令将您的事物对象附加到您刚刚创建的证书,然后
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
在本节中,您将安装SDK的 Amazon IoT 设备 JavaScript,其中包含应用程序可以用来与之通信的代码 Amazon IoT 和示例程序。有关更多信息,SDK请参阅 JavaScript GitHub 存储库Amazon IoT 设备
在您的 Linux 实例 JavaScript 上安装的 Amazon IoT 设备 SDK
-
在您的 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
-
导航到您在上一步中创建的
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
SDK目录中的pub-sub.js
示例应用程序 JavaScript。此应用程序显示了设备(您的Amazon EC2 实例)如何使用MQTT库来发布和订阅MQTT消息。pub-sub.js
示例应用程序订阅主题 topic_1
,将 10 条消息发布到该主题,并在从消息代理收到这些消息时予以显示。
要安装和运行示例应用程序
-
在您的 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
-
在 Amazon Instan EC2 ce Connect 窗口中,获取
your-iot-endpoint
使用 Amazon IoT 此命令从。aws iot describe-endpoint --endpoint-type iot:Data-ATS
-
在 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
示例应用程序:
-
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消息
-
审核通过 Amazon IoT MQTT客户端查看MQTT消息。这可以帮助你学习如何使用Amazon IoT 控制台中的MQTT测试客户端在MQTT消息通过消息代理时查看消息。
-
在Amazon IoT 控制台中打开MQTT测试客户端。
-
在 Subscribe to a topic(订阅主题)中,订阅主题 topic_1。
-
在您的 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。