LoginSignup
1
0

More than 1 year has passed since last update.

AWS IoT Message BrokerのMQTTでpub/sub

Posted at

はじめに

AWS IoT Message BrokerのMQTTでpub/subをやってみようとしたら参照した記事の通りではうまくいかなかったので、メモを残します。

結論から言うと、ATSエンドポイントとAmazon Root証明書を使用するの2点

環境

  • RaspberryPi 3
  • Raspbian GNU/Linux 9 (stretch)
  • aws-cli/1.18.223 Python/3.5.3 Linux/4.19.66-v7+ botocore/1.19.63
  • jq-1.5-1-a5b5cbe

手順

  1. Mosquittoインストール
  2. Mosquittoローカル動作確認
  3. AWS IoT用のユーザー作成
  4. AWS IoT Message Brokerクレデンシャル等取得
  5. AWS IoT Root証明書入手
  6. AWS エンドポイントでのMosquitto動作確認

Mosquittoインストール

$ sudo apt install mosquitto mosquitto-clients

Mosquittoローカル動作確認

mosquitto -d
mosquitto_sub -d -t topic/one -u mqtt -P mqtt

これで待ち受け状態になるので、別端末を開いて以下を実行

mosquitto_pub -d -t topic/one -m "This is message" -u mqtt -P mqtt

これで先ほどの端末でメッセージが表示されます

オプションの意味は

-d デバッグ情報出力
-t トピック名
-u ユーザー名
-P ユーザーパスワード
-m 送信メッセージ

AWS IoT用のアカウント作成

専用のアカウントmqtt_userを用意した。
AWSのIAM、ユーザーからAWS CLI用のアカウントを作成。アクセスキー - プログラムによるアクセスだけチェックし、コンソールでは使わないのでパスワードはなし。
既存のポリシーを直接アタッチでAWSIoTFullAccessを選択
キーIDとシークレットを以下で設定

$ aws configure

AWS IoT Message Brokerクレデンシャル等取得

以下参照記事に沿って

$ aws iot create-keys-and-certificate --set-as-active > cert.json
$ cat cert.json | jq .keyPair.PublicKey -r > mqtt_user-public-key.pem
$ cat cert.json | jq .keyPair.PrivateKey -r > mqtt_user-private-key.pem
$ cat cert.json | jq .certificatePem -r > cert.pem

AWS IoT Root証明書入手

元の記事ではシマンテックサイトから取得していたが、シマンテックのRoot証明書は無効になっているようでした。
その代わり現在はAmazonが発行している証明書が使えるようでしたので、Amazon Root CA 1をAmazonRootCA1.pemとしてダウンロードしました。

$ wget https://www.amazontrust.com/repository/AmazonRootCA1.pem

IAM Role の設定

参照記事の通り

AWS エンドポイントでのMosquitto動作確認

MQTT エンドポイントの確認

ここでエンドポイントタイプを指定することで、ATS エンドポイントを取得しています。

$ aws iot describe-endpoint --endpoint-type iot:Data-ATS

Subscribe

取得できたエンドポイントを-h オプションで指定してsubscribe

mosquitto_sub --cafile AmazonRootCA1.pem --cert cert.pem --key mqtt_user-private-key.pem -h "DUMMY-ats.iot.ap-northeast-1.amazonaws.com" -p 8883 -q 1 -d -t topic/test -i clientid1

Publish

別端末でpublishしてみます。

mosquitto_pub --cafile AmazonRootCA1.pem --cert cert.pem --key mqtt_user-private-key.pem -h DUMMY-ats.iot.ap-northeast-1.amazonaws.com -p 8883 -q 1 -d -t topic/test -i clientid2 -m "Hello, World!"

subscribeした元の端末にメッセージが表示されれば動作OK

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0