#前説
色々な記事を参照しましたが、あくまで自分の備忘録です。
#前回の記事
ハードウェア~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できるようなポリシーを追加して保存してやります。
#Lambdaインスタンス作成
Lambdaに戻ってインスタンスを作成します。
「名前」は分かりやすいものならなんでも構いません。
「ランタイム」で言語やバージョンを選択できます。私はPython 3.6に設定しました。
「ロール」ではAWS IAMにて作成したロールを割り当てます。
これで作成!!
#Lambdaの詳細設定
上記で作成したロールを割り当てたため、アクセスできるリソースのところにAWS IoTが追加されているのが確認できますねえ。
ではいよいよコードを書いていきます。
コードをインラインで編集してもいいのですが、zipファイルをアップロードした方が確実かと思われます。
参照先の方のコードを使わせていただきました。
気をつけていただきたい点は、ファイル名はlambda_function.pyとして保存するという点です。
メイン関数はlambda_handler(event, context)となっており、おそらく裏でこの関数を実行するよう担っているのだと思いますが、もう少し深く理解したいなあと思った。
$ zip lambda_function.zip lambda_function.py
これでアップロードします。
#AWS IoTで確認
AWS IoTのテストにて
先ほどのプログラムで記述したトピック名を指定します。
きちんと AWS IoTで受け取ることができてますね。
#次にやること
Lambdaデビューは果たしたので、次ももう少しいじる。
- 双方向通信を実装
- デバイスID-ESP32をきちんと指定できているのか
- 指定した覚えがない
- Arduino側のプログラムを変えて、LED制御。