はじまる

適当な事を適当に書く

AWS IoT CLI or SDK で device shadow を更新したい

はじめに

とあるデバイスのなかで稼働する特定のミドルウェアの起動状態を AWS IoT の Shadow で管理している。

  • middleware.poweron のときにサービス起動
  • middleware.poweroff のときにサービス停止

といった感じ。ちなみにデバイスのなかに、AWS IoT のエージェントが常駐している。 下記のようなイメージ。

f:id:satorusangakoronda:20170331180726p:plain

非商用のデモ用デバイスで、使う機会はそんなになく、あまり厳密な管理はしていないのだけど、諸用でちょこちょこ再起動が必要になってきた。で、再起動には device shadow の middleware.poweroff してから on するといいんだけど、AWS IoT の管理画面をちょこちょこいじるのは面倒になってきたので、手元のPCから操作ちょっとしたスクリプトを書こうと思った。

アプローチ

aws iot-data コマンド

$aws iot-data update-thing-shadow help

~
SYNOPSIS
            update-thing-shadow
          --thing-name <value>
          --payload <value>
          outfile <value>

OPTIONS
       --thing-name (string)
          The name of the thing.

       --payload (blob)
          The state information, in JSON format.

       outfile (string) Filename where the content will be saved

OUTPUT
       payload -> (blob)
          The state information, in JSON format.

partial update は出来ないようだ。なので、divice shadow の一部分を更新したい、というときは、一度 aws iot-data get-thing-shadow でshadow の全文を取得し、書き換えてから改めてupdate-thing-shadowで全文を書き換えるということになる。なんか嫌だけど、そのくらい割り切った方がスッキリしていていいかもしれない。

実装

あとで書く

エンドポイント

ちなみに、AWS IoT はリージョンサービスで、エンドポイントはリージョン毎に異なる。 ただし、リージョンの前にくるサブドメインは、1 ルートアカウントにつき1つになる。 f:id:satorusangakoronda:20170331174403p:plain