LambdaからIoT経由でArduino Yúnへ(前編)

投稿者:

先日AWS IoTがリリースされて、早速Yúnをつないでみたのですが、その時にやったことはArduino YunからAWS IoTにメッセージを送るとそれがS3に保存されるというものでした。つまり、Arduino Yun -> AWS IoT -> AWS S3という情報の流れです。

でも、その逆もやりたいと思っていました。Amazon Web Services -> AWS IoT -> Arduino Yunというメッセージの流れです。

これは例えば、CloudWatchでアラートが発生したらYunがモーターをぐるぐる回して僕に報告してくれるというようなものをイメージしています。デバイス同士が連携するのではなく、Amazon Web Servicesがメッセージの発生源となって、AWS IoTを経由してデバイスにそれを伝えるということです。

そこで今回はAWS S3 -> AWS IoT -> Arduino Yunをやってみました。

正直ちょっと無理した感じもあります。これがAWS IoTの使い方として適切か、これが適当なやり方なのか、といった疑問はあるのですがやってみました。

さて実際どういうサービスを使ったかという話を下に書きます。

前回AWS IoT Arduino Yún SDKBasicPubSubのサンプルで試した通り、AWS IoTに通知(MQTTのpublish)が届けば、Arduino Yunはそれを受信(MQTTのsubscribe)できました。つまりAWS IoT -> Arduino Yunはできるわけです。だから今回課題となるのは、AWS S3 -> AWS IoTの部分です。

問題点は、AWS IoTはAWS S3から直接イベント通知を受け取ることはできないということです。(2015年10月現在)

そこでAWS Lambdaを使ってみようと考えました。AWS S3 -> AWS Lambda -> AWS IoT -> Arduino Yunという連携を考えたわけです。

実際、AWS LambdaのイベントソースにはAWSのS3、SNS(Simple Notification Service)、API Gateway、CloudWatch Logなど様々な選択肢があります。今回LambdaでAWS IoTにメッセージを送ることができれば、他にもいろいろな展開が考えられます。随分沢山の連携が必要にはなりますが、AWS CloudWatch -> AWS SNS -> AWS Lambda -> AWS IoT -> Arduino Yunもできるはずです。

そんなわけで、まずはAWS Lambda -> AWS IoTを、ちょうどPython版が登場したAWS Lambdaを使ってやってみましょう。

ここから先は少し長くなるので次回につづきます。