はじめに
IoTデバイスがCSVフォーマットでしかデータ送信できない環境において、AWS IoT から Lambda へサクッとそのままデータを渡したい。
というニーズがあっての調査メモです。
AWS IoTに関する情報は様々あれど、デバイスからの入力はJSONを前提としたものが比較的多く、CSVを入力とする方法に辿り着くのに少々時間を要してしまいました。。。
このメモが同じような状況にある方の調査時間を少しでも短縮できれば幸いです。
対応方法
AWS IoT のルールで受信データをbase64エンコードし(そのようなSQLし)、Lambdaに渡す。
AWS IoT
Lambda
base64されたデータがSQLで指定した別名をキーとしてeventオブジェクトに格納される。
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
logger.info('event: %s', event)
return ''
といったLambdaをIoTルールのアクションに指定すると、
[INFO] 2018-04-23T07:30:41.199Z xxx event: {'data': 'YWEsYmIsY2MsZGQ='}
のような結果が得られます。
※この結果は入力値を "a,b,c" とした場合の例。
補足
入力が「CSV」であることにとらわれず、「生データをそのまま入力する」という観点で調べていれば、以下の情報をサクッと見つけられていたはずなのですが。色々足りていないですね。
-バイナリペイロードの使用