こんにちは、Michaelです。
今回は、「AWS IoTルールの基本」の第3回として、メッセージをS3に保存するルール設定を紹介します。
今回の構成
AWS IoTのトピック「test/pub」にPublishされたメッセージを、S3バケットに保存します。
メッセージ内容は加工せず、ClientIdをフォルダ名、受信時刻をファイル名とするテキストファイル(.txt)としてS3に保存します。
メッセージソースの設定
メッセージソースには以下のAWS IoT SQLクエリでメッセージをパススルーで出力するように設定します。
1 |
SELECT * FROM 'test/pub' |
ルールアクションの設定
アクションとして「Amazon S3 バケットにメッセージを格納する」を選択します。
設定内容は格納するS3バケットとそのキー (パス)となります。
キーには、AWS IoT SQLの関数を使用することができ、「${関数名}」の形式で指定することで、関数に対応する値を割り当てることができます。今回は、ClientIdと受信時刻をパスとするため、以下のように設定します
実行結果
MQTT.fxを送信デバイスとしてテストを実行してみます。
ClientIdに「device001」、Publish先トピックに「test/pub」を設定し、以下のようなセンサーデータのJSONをメッセージとしてPublishをします。
1 2 3 4 5 |
{ "temperature": 26.3, "humidity": 58, "pressure": 994.2 } |
指定したS3バケットを確認すると「device001」のフォルダが作成され、フォルダ内にUNIX時間「1506675276013」(2017/09/29 17:54:36.013)の名称が付加されたテキストファイルが作成されていました。
テキストファイルを開くと、テストで送信したメッセージ内容が確認できました。
まとめ
AWS IoTでメッセージをS3に格納するケースは、メッセージログを保存する方法としてよく使われます。同様にAWS IoTで直接データ保存できるDynamoDBと比べ、S3は安価に利用できるデータストアのため、メッセージログを安価に保存したい場合に有効です。
次回は、AWS IoTメッセージをDynamoDBに保存する設定を紹介します。
お楽しみに!