RaspberryPi や Arduino などのIoTデバイスを AWS IoT と通信させるには、AWS IoT コンソールから「モノ」を登録する必要があります。
フリートプロビジョニングに対応していないIoTデバイスが、そこそこ纏まった数で納品(出荷)されるようになってくると、これをGUIからチマチマ登録するのは面倒だと気付きました。
そこで、AWS CloudShell (CLI) から登録するよう手順を改めました。
証明書保存ディレクトリ作成
mkdir certs
cd certs
# モノの名前をシェル変数に定義
THING_NAME=[モノの名前]
# モノ単位でサブディレクトリを作成(ZIPで固め易くする)
mkdir $THING_NAME
cd $THING_NAME
モノの作成
aws iot create-thing --thing-name $THING_NAME --thing-type-name [モノのタイプ]
モノのタイプは、管理が容易になるよう予め作成してあります。
静的グループにモノを追加
aws iot add-thing-to-thing-group --thing-name $THING_NAME --thing-group-name [グループ名]
予め、グループに対して権限が設定されています。
証明書作成
# JSON形式ですべて出力
aws iot create-keys-and-certificate --set-as-active > cert.json
# X.509証明書ファイルを抽出
jq .certificatePem cert.json -r > certificate.pem.crt
# プライベートキーファイルを抽出
jq .keyPair.PrivateKey cert.json -r > private.pem.key
# パブリックキーファイルを抽出
jq .keyPair.PublicKey cert.json -r > public.pem.key
# 証明書のARN(AWSリソースを一意に識別できるID)をシェル変数に定義
CERT_ARN=`jq .certificateArn cert.json -r`
# 証明書にモノを紐付ける
aws iot attach-thing-principal --thing-name $THING_NAME --principal $CERT_ARN
証明書の作成を次のようにしても良いですが、証明書のARNは控えておいて下さい。
aws iot create-keys-and-certificate --set-as-active \
--certificate-pem-outfile certificate.pem.crt \
--private-key-outfile private.pem.key \
--public-key-outfile public.pem.key
デバイスごとの証明書一式をS3にアップロード
# ZIPで固める
cd ..
zip -r $THING_NAME $THING_NAME
# S3に保存
aws s3 cp $THING_NAME.zip s3://example
aws s3 ls s3://example