12
10

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 5 years have passed since last update.

バイナリのデータをAWS IoT上でBase64エンコード&JSON化して、後方サービスへ流す(例えばAWS Lambdaとか)

Last updated at Posted at 2017-02-01

TL;DR

AWS IoTのRuleで2016-03-23-betaから入った Encode 関数と AS 句を組み合わせて使う

/* Using SQL version を beta にしたうえで */
SELECT encode(*, 'base64') AS b64_by_awsiot FROM 'testing_awsiot/#'

これで、例えば ABCD という文字を testing_awsiot/HOGE トピックへ送ると

{"b64_by_awsiot":"QUJDRA=="}

というJSONにすることができます
これはAWS Lambdaで読み取ることができますから、Base64デコードした上で色々と処理することも可能です

なにで困ってるの?

センサー(正確にはマイコンですけど)からの取得できるデータの形式は、概ねバイナリだったりします
AWS IoT自体はMQTTブローカー(サーバ)として振る舞うため、バイナリを直接送ることができます※

1回の送信で最大128KBの制約あり

しかし、AWS IoTから先のサービス(e.g. Amazon Elasticsearch Service)は、AWS IoTからの出力がJSONであることを期待しているものが多く、なんらかの方法でJSON化してあげる必要があります
JSON化にAWS Lambdaを使用するアイデアは、AWS Lambda自体がJSONによる入力を期待するため、鶏卵問題となり、ダメでした
そのため、回避策として送信前(エッジ側)でJSON化してAWS IoTに送るというのが一般的でした

この辺のアプローチの違いは別途書きます → 書きました(2/9) バイナリデータをクラウドとやり取りする際の設計アプローチ

あとがき

SQLシンタックス自体はβ何で、おきをつけて。 (2017年2月現在)

12
10
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
12
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?