IoTを利用した案件をやらないか、というお誘いをいただき、AWS IoT Coreを重い腰を上げて触ることにしました。
電子回路苦手だからとIoTを微妙に避けていたのですが、まあ一応手元にラズパイくらいはあるわけで。
とりあえず久しぶりに起動したら、ラズパイが起動しません。
さすがにそんなバカげたことで無駄に時間を使いたくもないので、さっさとSDをフォーマットしてOSから入れなおして起動しなおしです。
ひそかにその過程で使いものにならないHDMIケーブルが発見されたり、細いケーブルのHDMIは取り回しがしやすくていいなぁとくだらないことに感動したりしましたが、閑話休題。
さっさとラズパイを起動したらAWS IoT Coreと接続です。LTEなんかならグローバルアドレスなのでそのままでいいのでしょうが、自宅のラボはNAPTの後ろなので、ラズパイのIPを固定して、8883ポートを開放、あとは素直にLinux+Python SDKを組み込みます。
で、組み込んでから思ったのですが、Web屋さんのIoTだとNode.JSのほうがいいんじゃないかと…。
まあ、動作確認なので手慣れているPythonでいいです。
Pythonでフロントエンド書かなきゃいけないとか言われたら発狂しそうですけれど。
AWS IoT Coreとは何の問題もなく接続。Pub/Subメッセージングなわけですね。はあ、なるほど。あとはPub/Subのメッセージング処理をちろっと書けばいいわけですか。
これは楽じゃないだろうか。いや楽だ。
正直、めんどくさそうな予感があったのでこのエントリでやり方でも書いて、とか思っていたのですが、ぶっちゃければ、何も書くことがないレベルです。
まあ本番運用となればモニタリングと端末監視をCloudWatchと連携させて、とかやるべきことはあるのですが、今回はあくまでデモンストレーション用の制作です。
セキュリティとか運用性とか可用性とか窓から思い切り放り投げることができます。
で、放り投げたらやることも書くこともなくなった次第。
サンプルコード自分で書いてPub/Subの動作テストまでやるしかないですね、こんなの。だって書くことないんですもの。
ちなみにAWSさんのstart.shが実行するのは延々Hello,Worldをパブリッシュするという実に頭のおかしい普通のサンプルでした。実行しても何も面白くないです。せめてセットでLambdaをinvokeするくらいのとこまではやってしまえなかったものか。
IoT CoreとはTLSですね。てっきりVPNでも張るのかと思いましたが、httpsへのREST APIをクライアント証明書で認証している感じですね。まあ、十分なのではないでしょうか。
さて、IoT Core側がPubする場合、要はPush通知ですが、というのがあまり見つからなかったのですが、これってルールエンジンに突っ込ませてLambda起動してやらせる、のが正しいのかな。もしくはSNS経由でpub/sub二段階って感じなんでしょうか。皆さんはどんな風に実装しているんでしょうね。ひとまず楽そうというだけの理由でS3にファイル置いたらイベントでLambda起こしてデバイスにPubして結果をPubしてもらって、ルールエンジン通ってLambda起こしてイベント起こしたS3のファイルを消す。くらいの感じのゆるーいのでも作ろうかな、と思っているところです。