2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS IoT Events への入力データを AWS CLI (v2)で作成&送信する方法

Last updated at Posted at 2020-08-07

AWS IoT Events を用いた開発の際、テストデータ送信が必要となります。
コンソールから [データを送信する] > [サンプルデータを送信] でも、データを送り込むことは可能です。
image.png

これを AWS CLI(v2) で実現する方法が本エントリーとなります。

論よりコード (TL;DR)

Input(入力) IoTData1 に対し {"id":"id1","v1":25.0,"v2":"foobar","v3":false} というデータを送りたい場合:

bash
$ aws iotevents-data batch-put-message \
--messages messageId=${RANDOM},inputName=IoTData1,payload=$(echo '{"id":"id1","v1":25.0,"v2":"foobar","v3":false}' | base64 -w0)

※ AWS CLI v2 を使用
※ 要 base64 コマンド (Ubuntu なら coreutils に入ってます)

解説

私の好きな AWS IoT Events は、デバイスのステートマシン(状態遷移)を簡潔に実装できます。
基本的な話は AWS IoT Events は IoT デバイスの「ステートマシン」 をご覧ください。

AWS IoT Events の実装は "Input(入力)" と "Detector Model(探知機モデル)" の2つで構成されています。
AWS ioT Events の構成

  • Input: スキーマのようなものです。どのような入力がされるのかを Input 内であらかじめ定義しておきます。
  • Detector Model: 状態遷移そのものです。 Input からの入力は $input.INPUT_NAME.json_path で参照できます。

Detector Model を動かすためには Input にデータを送信します。そして、その Input を参照している Detector Model が実行されるため、 Input がエントリーポイントであると言っても良いでしょう。

AWS CLI(v2) で AWS IoT Events にデータを送る

AWS IoT Events の Input へのデータ送信を AWS CLI で行う場合は iotevents-data サブコマンドを使います。
--messages には3つのパラメータを設定します。

  • messageId : 送信データの ID。ともかく一意になれば何でもよいです。CloudWatch Logs で探すときに使うくらい。例では Bash の ${RANDOM} で生成しています。uuidgen -r でもいいでしょう。
  • InputName : 送信先の Input 名。
  • payload : Detector Model に送信する実データ。
bash
$ aws iotevents-data batch-put-message \
--messages messageId=${RANDOM},inputName=IoTData1,payload=$(echo '{"id":"id1","v1":25.0,"v2":"foobar","v3":false}' | base64 -w0)

もしくは JSON で入力する場合は以下の通り

bash
$ aws iotevents-data batch-put-message \
--messages '{"messageId":"1","inputName":"IoTData1","payload":"'$(echo '{"tid":"id1","tmpr":25.0}' | base64 -w0)'"}'

payload の base64

payload は blob となっており、base64 encoded textで送ることになるため base64 でエンコードしています。

AWS CLI v2 では blob は Base64 encoded text がデフォルトとなりました。
※ payload は This can be a JSON string or a Base-64-encoded string representing binary data (in which case you must decode it). となっているのですが、 payload="{\"id\":\"id1\",\"v1\":25.0,\"v2\":\"foobar\",\"v3\":false}" は NG でした。なんかいい方法無いのでしょうか🤔

あとがき

もうすぐお盆休みですね!

EoT

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?