【新機能】AWS IoT Analytics向けの新しいGreengrassコネクタがリリースされました!!
はじめに
サーバーレス開発部@大阪の岩田です。 昨日3月15日にAWS IoT Analytics向けの新しいGreengrassコネクタがリリースされました!! AWS IoT Greengrass Adds New Connector for AWS IoT Analytics, Support for AWS CloudFormation Templates, and Integration with Fleet Indexing
このコネクタを利用することでGreengrassグループが収集したデータを簡単にAWS IoT Analyticsまで送信できます。 さっそく試してみたいと思います。
AWS IoT Analyticsの環境を準備
市田のブログで紹介されている「Quick Create」の機能を使ってAWS IoT Analyticsの環境をサクっと準備します。
AWS IoT Analyticsのシングルステップ セットアップで簡単にIoTデータの分析環境を作成できるようになりました
Greengrassグループに紐付けたIAMロールに権限追加
このコネクタはAWS IoT AnalyticsのPutBatchMessage
APIを利用してデータを送信するため、Greengrassグループが利用するIAMロールにiotanalytics:BatchPutMessage
の権限が必要になります。
ここでは手っ取り早くAWSIoTAnalyticsFullAccess
のポリシーをアタッチしました。
データ収集用のLambdaを準備
Greengrassで実行するLambdaを準備します。 このLambdaをLong-Lived Lambdaとして実行することで、5秒に1回デバイスから温度の情報をPublishするような処理をシミュレーションします。 Python2.7で実装しました。
import greengrasssdk from datetime import datetime from threading import Timer import json import os import random import uuid client = greengrasssdk.client('iot-data') def greengrass_pub_run(): data= { 'id' : str(uuid.uuid4()), 'request':{ 'message': json.dumps({ 'thingname': os.getenv('AWS_IOT_THING_NAME'), 'datetime': str(datetime.now()), 'temperature': round(random.uniform(0,30),2) }) } } topic = 'iotanalytics/channels/myfirstproject_channel/messages/put' client.publish(topic=topic, payload=json.dumps(data)) Timer(5, greengrass_pub_run).start() greengrass_pub_run() def handler(event, context): return
ポイントをいくつか説明します。
Publish先のトピック名
GreengrassからデータをPublishする先のトピック名は
- iotanalytics/channels/+/messages/put
- iotanalytics/channels/+/messages/binary/put
のいずれかを設定します。
binary
が付かない方のトピックにはJSONもしくはBase64形式の文字列を送信できます。
対してbinary
がつく方はその名の通りバイナリデータを送信できます。
Publishするデータの構造
Publishするデータは以下のような形式で作成します。
{ "request": { "message" : ... }, "id" : "req123" }
まず最上位のキーとしてrequest
が必須となっており、任意でid
をセットできます。id
を追加しておくと、デバッグやログの突き合わせが容易になるので、id
もセットしておく方が良いでしょう。request
の中にはさらにmessage
というキーを用意します。message
にセットする値はJSONもしくはBase64形式で文字列をセットします。ここでセットされた値が実際にAWS IoT Analyticsまで送信されます。
Lambdaの追加
先ほどのLambdaのバージョンをPublishし、Greengrassグループに追加しておきます。
Lambdaのライフサイクルは「存続期間が長く無制限に稼働する関数にする」として下さい。
コネクタの追加
実際にコネクタを追加していきます。
まずコネクタの選択画面でIot Analytics
を選択します。
次にパラメータの設定を行います。メモリサイズだけ必須項目なので、適当に設定してコネクタの追加を完了させます。
完成です。
サブスクリプションの設定
コネクタ周りのサブスクリプションを設定します。
Lambda -> コネクタ
まずはLambdaからコネクタへのサブスクリプションを作成します。
今回LambdaからPublishするデータは文字列にしているので、「必要なトピック構文」にはiotanalytics/channels/+/messages/put
を選択します。トピックフィルターはとくに制限をかけないので+
を指定します。
そのまま「次へ」をクリックして完了させます。
コネクタ -> IoT Cloud
次にコネクタからクラウドへのサブスクリプションを作成します。 とくに設定項目はないので、「次へ」をクリックしてガンガン進めます。
これで準備ができたので、Greengrassグループのデプロイを行います。
動作確認
Greengrassグループのデプロイができたら、Lambdaとコネクタの動作を確認します。
AWS IoTのマネジメントコンソールから、iotanalytics/#
をサブスクライブしてみましょう。うまくLambdaとコネクタが動いていれば、コネクタがAWS IoT AnalyticsにPutしたレスポンスがiotanalytics/messages/put/status
のトピックに流れてきます。
うまくいってそうなのでAWS IoT Analyticsのデータセットを確認してみます。
ちゃんとデータが流れてきていますね!!成功です。
まとめ
このコネクタの登場により、GreengrassとAWS IoT Analyticsが連携させやすくなりました。 Greengrassを利用したIoTデータの活用がさらに加速しそうです!!