出典1:AWS IoT CoreをRaspberry Piで使ってみた その1
出典2:AWS IoT CoreをRaspberry Piで使ってみた その2
出典3:AWS IoT CoreをRaspberry Piで使ってみた その3

AWS IoT Coreで物の作成

 出典1の手順でAWS IoT CoreにIAM接続し、「test-device」という名の「物(Thing)」をつくる。

1.AWS IoT CoreにIAM接続する。

 AWSのアカウント作成、IAMユーザーの作成は終わっていてIAMユーザーとしてサインインできる状態からはじめる。

2.サインインしてサービスから「AWS IoT Core」を選ぶ。
3.新しく「test-device」という名の物を1つ作る。

4.全ての証明書をダウンロード

 証明書は5つ、

用途 ファイル名
(1) デバイス証明書 ****-private.pem.crt
(2) パブリックキー ****-public.pem.key
(3) プライベートキー ****-private.pem.key
(4) ルートCA証明書1 AmazonRootCA1.pem
(5) ルートCA証明書3 AmazonRootCA3.pem

 このうちAWSへの接続に必要なのは
 EndpointのあるAWS Iot を証明するAmazonRootCA1.pem
 物である「test-device」が AWS IotにあるEndpointへ接続する際に確かに自分であることを証明するための「デバイス証明書」
 更に、その際に使われる公開鍵と秘密鍵の計4つになるようだ。
 ここらあたりはボケ老人にはとても理解できないことばかり、まあ何となくこんな感じかなで済ませることに。

5.ポリシーの作成

「安全性」>「ポリシー」から「test-policy」という名のポリシーを作成

6.グループ「test-group」の作成

 グループに物「test-device」を追加、ポリシー「test-policy」を追加。

Raspberry PiとAWS IoT Coreの「Pub/Sub」動作確認

 出典2の手順でラズパイをAWS IoT Coreへ接続し、「Publish/Subscribe」の動作確認を行う。

1.「ws-iot-device-sdk-python」をgit cloneする。
pi@raspberrypi:~ git clone https://github.com/aws/aws-iot-device-sdk-python.git
2.AWS IoT Coreからダウンロードした 証明書ファイルを入れる。

 ~/aws-iot-device-sdk-python/samples 配下に、Amazonルート証明書、デバイス証明書、秘密キーの3ファイルをコピー

pi@raspberrypi:~/aws-iot-device-sdk-python/samples/certs $ ls
AmazonRootCA1.pem
****-certificate.pem.crt
****-private.pem.key
3.サンプルプログラムのbasicPubSub.pyを実行する。
pi@raspberrypi:~/aws-iot-device-sdk-python/samples/basicPubSub $ python3 basicPubSub.py  --endpoint ****-ats.iot.ap-northeast-1.amazonaws.com --rootCA ../certs/AmazonRootCA1.pem --cert ../certs/****-certificate.pem.crt --key  ../certs/****-private.pem.key

 尚、endopoint名は「AWS IoT」>「設定」で確認すること。 東京であれば****-ats.iot.ap-northeast-1.amazonaws.comになるはず。

4.トピック sdk/test/Python にPublishされていることを確認する。
2022-03-27 14:51:23,436 - AWSIoTPythonSDK.core.protocol.internal.clients - DEBUG - Invoking custom event callback...
2022-03-27 14:51:24,405 - AWSIoTPythonSDK.core.protocol.mqtt_core - INFO - Performing sync publish...
2022-03-27 14:51:24,406 - AWSIoTPythonSDK.core.protocol.internal.clients - DEBUG - Filling in custom puback (QoS>0) event callback...
2022-03-27 14:51:24,479 - AWSIoTPythonSDK.core.protocol.internal.workers - DEBUG - Produced [puback] event
2022-03-27 14:51:24,479 - AWSIoTPythonSDK.core.protocol.internal.workers - DEBUG - Dispatching [puback] event
2022-03-27 14:51:24,480 - AWSIoTPythonSDK.core.protocol.internal.clients - DEBUG - Invoking custom event callback...
2022-03-27 14:51:24,480 - AWSIoTPythonSDK.core.protocol.internal.clients - DEBUG - This custom event callback is for pub/sub/unsub, removing it after invocation...
2022-03-27 14:51:24,486 - AWSIoTPythonSDK.core.protocol.internal.workers - DEBUG - Produced [message] event
2022-03-27 14:51:24,486 - AWSIoTPythonSDK.core.protocol.internal.workers - DEBUG - Dispatching [message] event
Received a new message: 
b'{"message": "Hello World!", "sequence": 1}'
from topic: 
sdk/test/Python
--------------
「テスト」>「MQTTクライアント」でJSON形式のデータが到着していることを確認する。

 以上、とても分かりやすい出典通りの手順なので、問題なく接続できて当たり前なのだが、ボケ老人には何をしているのかすら理解できず相変わらずの四苦八苦。
 まあ、AWSすら知らず、MQTT、AWS IoTなど一生関わりの無い世界、触っただけでも良しとすることに。
 せっかくなので、BME680を繋いだラズパイとAWS IoT間の通信も次にやってみることに。