[AWS IoT] 複数のモノを一括で登録してみた

# はじめに
AWS IoTを使用するためにはモノの登録を行う必要があります。モノの登録方法はいくつかあり、マネジメントコンソールで登録する方法や、初回接続時に作成する方法（Fleet Provisioning, JITR, JITP）があります。今回はこの中で、マネジメントコンソールから複数のモノを一括で登録する方法について試してみます

# モノの一括登録
複数のモノを一括で登録するにはマネジメントコンソールの管理＞モノから多数のモノの作成を選択します。
![スクリーンショット 2021-07-21 9.05.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80028/bce33d0e-9edb-dbf4-2a80-cc819d32af50.png)

すると、以下のような画面でテンプレートを入力せよと言われます。
![スクリーンショット 2021-07-21 9.07.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80028/c35ac1c7-00a9-8ad1-3b3c-8c1ae45cd2ef.png)
複数のモノを作成するには、まずプロビジョニングテンプレートと呼ばれるテンプレートでモノにどのような属性をもたせるか（例えば証明書はこれで、モノの名前はこれで、Policyはこれでというようなフォーマット）を定義して、そのテンプレートにパラメータ（１つ目のモノの名前はXXXですよというような感じ）を入力してあげる必要があります。プロビジョニングテンプレートについては[こちら](https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html) に解説があります。ParametersセクションとResourceセクションがあって、どのようなParameterを入力させたいかを定義します。[このページ](https://docs.aws.amazon.com/iot/latest/developerguide/provision-template.html)にプロビジョニングテンプレートの雛形があるので、今回はこの雛形一つのをモディファイした以下のプロビジョニングテンプレートを使用します。

```json
{
    "Parameters" : {
        "ThingName" : {
            "Type" : "String"
        },
        "SerialNumber" : {
            "Type" : "String"
        },
        "Location" : {
            "Type" : "String",
            "Default" : "WA"
        },
        "CertificateId" : {
            "Type" : "String"    
        }
    },
    "Resources" : {
        "thing" : {
            "Type" : "AWS::IoT::Thing",
            "Properties" : {
                "ThingName" : {"Ref" : "ThingName"},
                "AttributePayload" : { "version" : "v1", "serialNumber" :  {"Ref" : "SerialNumber"}}
            }
        },
        "certificate" : {
            "Type" : "AWS::IoT::Certificate",
            "Properties" : {
                "CertificateId": {"Ref" : "CertificateId"}
            }
        },
        "policy" : {
            "Type" : "AWS::IoT::Policy",
            "Properties" : {
                "PolicyName" : "My_IoT_Policy"
            }
        }
    }   
}

```
次へをクリックして先に進むと、パラメータファイルとロールの入力を求められます。
![スクリーンショット 2021-07-21 9.20.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80028/e37c3614-e05a-f652-ce47-65c4540400b5.png)

パラメータファイルは先程のプロビジョニングテンプレートで定義したParameterをモノごとに各行に定義したファイルで、今回は以下のようなファイルをパラメータファイルとし、適当なS3のバケット上に置きました。

```json
{ "ThingName" : "Hoge", "SerialNumber": "123", "Location":"Tokyo", "CertificateId":"2c0daf692c937080b3f90fd84e559e1a4f9c0ca653834c53ebad03346492170f"}
{ "ThingName" : "Fuga", "SerialNumber": "456", "Location":"Osaka", "CertificateId":"c71587c094819f9b8993e4da182736dcba2a3bdf9fe10b7b841a8174f8f74795"}
{ "ThingName" : "Boke", "SerialNumber": "789", "Location":"Nagoya", "CertificateId":"c71587c094819f9b8993e4da182736dcba2a3bdf9fe10b7b841a8174f8f74795"}
```
また、ロールについては、モノの登録ができる権限と、S3が読める権限を与えたロールを作成します。
![スクリーンショット 2021-07-21 9.25.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80028/37ddede3-8450-f810-29e7-f68ac5ad664c.png)

一括登録を開始のボタンをクリックすると一括登録が始まります。ブラウザをリロードすると以下のようにものが作成されています。
![スクリーンショット 2021-07-21 9.28.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80028/58012d3d-e3cd-6a7d-4887-0308cb33aafd.png)

中身を確認すると、Parameterとして指定した属性（SerialNumberやVersion）、証明書が反映されていることが確認できます。
![スクリーンショット 2021-07-21 9.29.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80028/60166173-024f-e4d0-2a74-3fb76ec02da2.png)

#まとめ
今回はAWS IoTにて複数のモノを一括で登録する方法について試してみました。次回は、Fleet ProvisioningやJITR, JITPについても試してみたいと思います