AWS IoT Device GatewayにHTTPでPublishしてみた #reinvent

2015.10.09

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-iot-device-gateway

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