【AWS IoTルールの基本 その3】メッセージをS3に保存する

Pocket

こんにちは、Michaelです。
今回は、「AWS IoTルールの基本」の第3回として、メッセージをS3に保存するルール設定を紹介します。

今回の構成

AWS IoTのトピック「test/pub」にPublishされたメッセージを、S3バケットに保存します。
メッセージ内容は加工せず、ClientIdをフォルダ名、受信時刻をファイル名とするテキストファイル(.txt)としてS3に保存します。

メッセージソースの設定

メッセージソースには以下のAWS IoT SQLクエリでメッセージをパススルーで出力するように設定します。

ルールアクションの設定

アクションとして「Amazon S3 バケットにメッセージを格納する」を選択します。

設定内容は格納するS3バケットとそのキー (パス)となります。
キーには、AWS IoT SQLの関数を使用することができ、「${関数名}」の形式で指定することで、関数に対応する値を割り当てることができます。今回は、ClientIdと受信時刻をパスとするため、以下のように設定します

実行結果

MQTT.fxを送信デバイスとしてテストを実行してみます。
ClientIdに「device001」、Publish先トピックに「test/pub」を設定し、以下のようなセンサーデータのJSONをメッセージとしてPublishをします。

指定したS3バケットを確認すると「device001」のフォルダが作成され、フォルダ内にUNIX時間「1506675276013」(2017/09/29 17:54:36.013)の名称が付加されたテキストファイルが作成されていました。

テキストファイルを開くと、テストで送信したメッセージ内容が確認できました。

まとめ

AWS IoTでメッセージをS3に格納するケースは、メッセージログを保存する方法としてよく使われます。同様にAWS IoTで直接データ保存できるDynamoDBと比べ、S3は安価に利用できるデータストアのため、メッセージログを安価に保存したい場合に有効です。
次回は、AWS IoTメッセージをDynamoDBに保存する設定を紹介します。
お楽しみに!