AWS IoT Device GatewayにHTTPでPublishしてみた #reinvent
re:Invent 2015 キーノートで発表された AWS IoT のメッセージブローカー Device Gateway の面白い特徴の一つとして
- MQTT w/ X.509 auth
- HTTP w/ AWS auth
と複数のプロトコルでメッセージを Publish できることがあります。
MQTT を使った Pub/Sub については次の記事で紹介済みのため、本稿では HTTP で Publish し、MQTT で Subscribeしてみましょう。
AWS IoT Message BrokerのMQTTでpub/subをやってみた #reinvent | Developers.IO
AWS CLI のアップグレード
IoT Message Broker を操作するには AWS CLI 1.8.12 以上が必要です。 何はともあれ CLI を最新にしましょう。
$ sudo pip install awscli --upgrade ... $ aws --version aws-cli/1.8.12 Python/2.7.10 Linux/4.1.7-15.23.amzn1.x86_64
Subscriber 向け認証設定
HTTP で publish しますが、MQTT で subscribe します。
次の記事に従って、X.509 の証明書の取得などは事前に済ませてください。
AWS IoT Message BrokerのMQTTでpub/subをやってみた #reinvent | Developers.IO
X.509 証明書の準備ができたあとはエンドポイントに向けて Subscribe します。
$ mosquitto_sub --cafile rootCA.pem --cert cert.pem --key thing-private-key.pem -h DUMMY.iot.REGION.amazonaws.com -p 8883 -q 1 -d -t topic/test -i clientid1
- エンドポイント(
DUMMY.iot.REGION.amazonaws.com
) - トピック(
-t topic/test
) - ファイルのパス
などは適宜読み替えてください。
HTTP でメッセージを publish
AWS CLI を使って publish します。
AWS IoT 系のサービスはネームスペース iot にまとめられているのですが、shadow 系や今回する publish メソッドはネームスペース iot-data にまとめられています。
publish する
$ aws iot-data publish
に続けて
- トピック(
--topic
) - QoSレベル(
--qos
) - ペイロード(
--payload
)
を指定するだけです。
$ aws iot-data publish --topic topic/test --qos 1 --payload "publish from cli"
エンドポイントを修正する
上記コマンドで実行すると、エンドポイントがテスト目的の data.iot.[region].amazonaws.com
に向きます。
疎通・開発目的であればこのままでも構いませんが、本番運用ではアカウントに割り振られたエンドポイントを --endpoint-url
で指定します。
$ aws iot-data publish --topic topic/test --qos 1 --payload "publish from cli with production endpoint" --endpoint-url https://DUMMY.iot.REGION.amazonaws.com
なお、AWS アカウントごとに発行される Device Gateway エンドポイントは
$ aws iot describe-endpoint
で確認出来ます。
Subscriber から確認する
Subscriber から Publish されたメッセージを確認して見ましょう。
$ mosquitto_sub --cafile rootCA.pem --cert cert.pem --key thing-private-key.pem -h DUMMY.iot.REGION.amazonaws.com -p 8883 -q 1 -d -t topic/test -i clientid1 Client clientid1 sending CONNECT Client clientid1 received CONNACK Client clientid1 sending SUBSCRIBE (Mid: 1, Topic: topic/test, QoS: 1) ... publish from cli ... publish from cli with production endpoint
確かに Publish した2つのメッセージを受け取れていますね。
まとめ
AWS 認証にあたっては
- IAM ユーザー
- IAM Role
- cognito
などを利用出来ます。
Device Gateway は protocol specific ではないことを売りにしており、セッション 「MBL205:Everything You Want to Know About AWS IoT」の中で WebSocket など対応プロトコルを増やす予定であることが開発チームから発表されています。
IoT Device Gateway の今後の動向が楽しみです。
参考リンク
- http://docs.aws.amazon.com/iot/latest/developerguide/iot-message-broker.html
- http://docs.aws.amazon.com/cli/latest/reference/iot-data/publish.html