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ブローカー(サーバ)として振る舞うため、バイナリを直接送ることができます※
しかし、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月現在)