5
2

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.

Amazon API GatewayにPOSTされたJSONに改行を入れてAmazon Kinesisに送る

Last updated at Posted at 2019-03-19

状況

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のマッピングテンプレートを書く前に読むべきもの

5
2
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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?