Amazon API GatewayにPOSTされたJSONに改行を入れてAmazon Kinesisに送る
2205 ワード
状況
IoT機器からJSONでPOSTされてくるデータをそのまま1行1レコードでS3に保存したい。
何も考えずに API Gateway => Kinesis Streams => Kinesis Firehose => S3 に流すと1行に複数のレコードが保存されてしまう。
こういうマッピングテンプレートにすると
{
"StreamName": "MyStream",
"Data": "$util.base64Encode(${input.json('$')})",
"PartitionKey": "$input.path('$.key')"
}
こんなファイルができてしまう。
{"key":"hoge"}{"key":"fuga"}{"key":"piyo"}
欲しいファイルはこんな感じ。
{"key":"hoge"}
{"key":"fuga"}
{"key":"piyo"}
Data
に改行を含めてKinesisに送ってあげる必要がある。
解決
文字列に改行をそのまま入れてあげれば良かった。
#set($Data = $input.json('$') + "
")
{
"StreamName": "MyStream",
"Data": "$util.base64Encode($Data)",
"PartitionKey": "$input.path('$.key')"
}
ダメだったパターン
エスケープシーケンス \n
を書いても
#set($Data = $input.json('$') + "\n")
{
"StreamName": "MyStream",
"Data": "$util.base64Encode($Data)",
"PartitionKey": "$input.path('$.key')"
}
エスケープされてなかった
{"key":"hoge"}\n{"key":"fuga"}\n{"key":"piyo"}\n
メモ
API Gatewayのマッピングテンプレートを書く前に読むべきもの
Author And Source
この問題について(Amazon API GatewayにPOSTされたJSONに改行を入れてAmazon Kinesisに送る), 我々は、より多くの情報をここで見つけました https://qiita.com/tektoh/items/b1b78e46cac6245d7ad1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .