0
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?

AWS IoT EventsのカスタムペイロードでJSONオブジェクトやオブジェクト配列を設定する方法

Last updated at Posted at 2025-03-19

はじめに

AWS IoT Eventsのイベントに設定できるカスタムペイロードでJSONオブジェクトやJSONオブジェクト配列を設定する方法を紹介する。カスタムペイロードは制約が多く、癖があり結構はまったのでメモとして残す。カスタムペイロードの記載については、別記事を記載したので参照。

動作確認環境

  • AWS IoT Events
  • AWS IoT SQLルールエンジン
    • バージョン:2016-03-23

方法

JSONオブジェクトやJSONオブジェクト配列をカスタムペイロードを送るには、オブジェクト全体を文字列化して、配列内の全ての文字列をエスケープ処理を施す必要がある。

具体例として、以下のJSONオブジェクト配列をカスタムペイロードとして送る方法を示す。

例:JSONオブジェクト配列
"devices": [
  {
    "name": "device_name1",
    "value": 1
  },
  {
    "name": "device_name2",
    "value": 2
  }  
]

上記のカスタムペイロードは、以下のようになる。

例:JSONオブジェクト配列のカスタムペイロード
'
{
  "devices": "[
    {
      \"name\": \"device_name1\",
      \"value\": 1
    },
    {
      \"name\": \"device_name2\",
      \"value\": 2
    }  
  ]"
}
'
  • ポイント
    • JSONオブジェクト配列[]全体を文字列とする
    • 配列内の文字列に\を入れてエスケープ処理する

AWS IoTルールを使う場合

AWS IoTルールで、MQTTのJSONオブジェクトやJSONオブジェクト配列をAWS IoT Eventsに送りカスタムペイロードにしたい場合は、IoTルールでcast関数を使う。SQL バージョン 2015-10-08 以降でサポートされている。

cast(値 as 型)のように使う。

例:
cast(true as Int) = 1

JSONオブジェクトやJSONオブジェクト配列は、このcast関数を使うことで、エスケープ処理された文字列として変換することができる(以下を公式ドキュメントより抜粋した図を参照)。

image.png

以下に例を示す。

例:JSONオブジェクト配列のMQTTトピック (/topic/subtopic)
"devices": [
  {
    "name": "device_name1",
    "value": 1
  },
  {
    "name": "device_name2",
    "value": 2
  }  
]

以下のように、devicesをcast関数で文字列に変換する。

例:AWS IoTルール
SELECT cast(devices as String) AS devices FROM '/topic/subtopic' 

以下のように文字列として出力される(改行はなくなる)。

出力結果
{
  "devices": "[{\"name\":\"device_name1\",\"value\":1},{\"name\":\"device_name2\",\"value\":2}]"
}

このようにcast関数を使い、AWS IoT Eventsへ出力することで、以下のようにAWS IoT Eventsのカスタムペイロードへ文字列としてそのまま設定することができる。

例:カスタムペイロードの設定
'
{
  "devices": ${$input.<inputName>.devices}
}
'
  • <inputName>: AWS IoT Eventsの入力名
  • ポイント
    • 入力が既に文字列となっているので、ダブルクォーテーション(")をつけない

まとめ

AWS IoT Eventsのイベントに設定できるカスタムペイロードでJSONオブジェクトやJSONオブジェクト配列を設定する方法を紹介した。AWS IoTルールとAWS IoT Eventsを駆使してサーバーレスで簡単に処理を書きたいときに有用なので試してみて欲しい。

参考

0
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
0
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?