先日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 SDKのBasicPubSubのサンプルで試した通り、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を使ってやってみましょう。
ここから先は少し長くなるので次回につづきます。