AWS
IoT

AWS Lambda~AWS IoT間をSubscribeする

前説

色々な記事を参照しましたが、あくまで自分の備忘録です。

前回の記事

ハードウェア~AWS IoT間をMQTT通信してみました。
次にやろうと思うのは、AWS Lambda~AWS IoT間の通信です。
サーバーレスアーキテクチャには初挑戦です。

AWS Lambda

結構玄人が好んでいるAWS Lambda。EC2のように仮想マシン内にサーバー構築しなくとも、 Lambda内にプログラムを記述するのみです。AWS初心者なのでロールやClientid,boto3などは初挑戦でした。

  • JavaScript
  • Python
  • C#

以上の言語をサポートしています。

目標

iOS -> AWS Lambda -> AWS IoT -> ESP32

ロール作成

まず最初にロール作成をします。

AWS IAMにおいて、ロールを設定して、Lambdaのインスタンスに割り当てます。
そこでポリシーを 

  • AWSIoTFullAccess

のようなAWSIoTにPushできるようなポリシーを追加して保存してやります。

スクリーンショット 2018-07-05 13.36.32.png

Lambdaインスタンス作成

Lambdaに戻ってインスタンスを作成します。

スクリーンショット 2018-07-05 13.36.49.png

「名前」は分かりやすいものならなんでも構いません。
「ランタイム」で言語やバージョンを選択できます。私はPython 3.6に設定しました。
「ロール」ではAWS IAMにて作成したロールを割り当てます。

これで作成!!

Lambdaの詳細設定

スクリーンショット 2018-07-05 13.43.34.png

上記で作成したロールを割り当てたため、アクセスできるリソースのところにAWS IoTが追加されているのが確認できますねえ。

スクリーンショット 2018-07-05 13.42.34.png

ではいよいよコードを書いていきます。
コードをインラインで編集してもいいのですが、zipファイルをアップロードした方が確実かと思われます。

コード参照先

参照先の方のコードを使わせていただきました。
気をつけていただきたい点は、ファイル名はlambda_function.pyとして保存するという点です。

メイン関数はlambda_handler(event, context)となっており、おそらく裏でこの関数を実行するよう担っているのだと思いますが、もう少し深く理解したいなあと思った。

Terminal
$ zip lambda_function.zip lambda_function.py

これでアップロードします。

AWS IoTで確認

AWS IoTのテストにて
先ほどのプログラムで記述したトピック名を指定します。

スクリーンショット 2018-07-05 13.53.14.png

きちんと AWS IoTで受け取ることができてますね。

次にやること

Lambdaデビューは果たしたので、次ももう少しいじる。
- 双方向通信を実装
- デバイスID-ESP32をきちんと指定できているのか
- 指定した覚えがない
- Arduino側のプログラムを変えて、LED制御。