今回やること
前回までで、デバイスと AWS 間で通信ができるようにしました。
今回は、デバイスからのメッセージを受けて、 AWS IoT Core 側で何かしらのアクションを実行できるようにします。
やり方としては、 AWS IoT Core に「ルール」という機能があり、それを使用することで、ある特定のメッセージを受信すると、特定の処理を実行するといったことが実現できます。
つまりイベントドリブン的に処理が行えるようになるのですが、その「処理」の仕方もいろいろなものが用意されています。
例えば以下のようなことができそうです。
- 「log」というトピックでメッセージを受けると、CludWatch にログを保存する
- 「sensor」というトピックでメッセージを受けると、Dynamo DB や S3 にデータを保存する
- 「switch/on」というトピックでメッセージを受けると、Lambda を実行する
- 「Trump」というトピックでメッセージを受けると、SNS にメッセージをプッシュする
など、あらゆることができそうです。
そういったなかで、今回は
「あるメッセージを受け取ると、Lambda を実行し、CluudWatch にログを保存する」
ということをテストでやってみたいと思います。
正直、間に Lambda を挟む必要はないのですが、学習がてらやってみます。
ルールを作成する
ルールの名前は何でもいいです。
ルールクエリステートメント
ちょっと独特ですが、トピックおよびペイロードのフィルタリングを SQL で実行するらしいです。
とりあえず今回は SELECT * FROM 'initializing'
ということで、「initializing」というトピックが来たら実行するというシンプルなものにしました。
アクションの追加
今回は Lambda を選びます。
今回は以前作成したラムダ関数を使用しました。(コールすると CloudWatch 内にログが書かれるという超ショボい関数です)
lambda の作り方はここでは省略しますが、「新しい Lambda 関数の作成」をクリックすると、ここで新しくララムダ関数が作れるっぽいです。
最後に「アクションの追加」を押して、ルール作成完了です。
ルールの確認
ルールがちゃんと登録されているかを確認します。
Lambda の画面で確認
メニューの「サービス」から「Lambda」を選択し、Lambda の画面を出してみると、ちゃんと「AWS IoT」というトリガーが追加されていました。
実行して確認
ルール作成したけど、サブスクライブ開始処理はどこでやるのかな?とちょっと探したのですが、どうやらルールが有効=サブスクライブ中ということになるみたいです。ルール作成時は自動的にルールが有効になるので、即サブスクライブ開始という感じのようです。
さっそく、 mockmock を使用してトピック initializing
でメッセージをテスト publish してみました。
もちろんぱっと見は結果がよくわかりませんが、 IoT Core のモニタリング画面で見てみると、ルールが実行されたことがわかります。
また、CloudWatch のログ画面を見てみると、ちゃんとログが追加されていました。
結構すんなりうまくいきました。
今回はこれで終わりです。
次は Dynamo DB について掘り下げてみたいと思います。
コメント