多个 AWS 物联网设备

Multiple AWS IoT Devices

我正在创建一个需要将多个设备连接到 AWS IoT 的应用程序,但我注意到只有最后连接的设备保持连接状态。我看到我对所有设备都使用相同的证书,并且在为每个设备创建证书后问题就解决了,但事实证明这将是多个设备,并且逐个设备继续注册是没有效率的。我想知道是否有解决方案可以让多个设备同时保持连接到aws iot,而不必一个一个地注册证书。

本文主要来自:https://iot-device-management.workshop.aws/en/provisioning-options/bulk-provisioning.html.

上面的 link 还有其他选项(及时等...)。

创建批量事物注册任务 要创建批量注册任务,需要一个角色来授予访问输入文件的权限。此角色已由 CloudFormation 创建,并且角色名称已在研讨会设置期间复制到 shell 变量 $ARN_IOT_PROVISIONING_ROLE.

aws iot start-thing-registration-task \
  --template-body file://~/templateBody.json \
  --input-file-bucket $S3_BUCKET \
  --input-file-key bulk.json --role-arn $ARN_IOT_PROVISIONING_ROLE

当命令成功时returns一个taskId。输出类似于:

{
    "taskId": "aaaf0a94-b5a9-4bd6-a1f5-cf188322a111"}

配置模板 https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html

配置模板是一个 JSON 文档,它使用参数来描述您的设备与 AWS IoT 交互所必须使用的资源。模板包含两个部分:参数和资源。 AWS IoT 中有两种类型的预置模板。一个用于 just-in-time 配置 (JITP) 和批量注册,第二个用于队列配置。

创建供应模板的脚本

https://github.com/aws-samples/aws-iot-device-management-workshop/blob/master/bin/mk-bulk.sh

创建存储桶

aws s3api create-bucket\
    --bucket bulk-iot-test\
    --region ap-northeast-1

上传bulk.json(如果使用云shell)并复制到S3

通过UI

上传bulk.json
aws s3 cp bulk.json s3://bulk-iot-test
aws s3 ls s3://bulk-iot-test

创建角色注册东西

来自 CloudFormation 模板…这是不完整的,需要进一步完善。

"DMWSIoTServiceRole": {
   "Type": "AWS::IAM::Role",
   "Properties": {
      "AssumeRolePolicyDocument": {
         "Statement": [ {
            "Effect": "Allow",
            "Principal": {
               "Service": [ "iot.amazonaws.com" ]
            },
            "Action": [ "sts:AssumeRole" ]
         } ]
      },
      "ManagedPolicyArns": [
        "arn:aws:iam::aws:policy/service-role/AWSIoTThingsRegistration",
        "arn:aws:iam::aws:policy/service-role/AWSIoTLogging",
        "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"
      ],
      "Path": "/"
    }
},

开始事物注册任务

aws iot start-thing-registration-task \
    --template-body file://~/templateBody.json \
    --input-file-bucket bulk-iot-test \
    --input-file-key bulk.json --role-arn "arn:aws:sts::ACCOUNTID:assumed-role/ROLE/USER@DOMAIN.com"