API Gateway の Kinesis Proxy で追跡性をちょこっと上げてみる
結論
本文マッピングテンプレートを以下のようにします
#set($inputRoot = $input.path('$')) #define ($data){"requestId": "$context.requestId","data": "$inputRoot"}#end { "StreamName": "STREAM_NAME", "Data": "$util.base64Encode($data)", "PartitionKey": "KEY" }
これでリクエストの ID がとれ、後の処理の追跡がしやすくなる…はず?
設計に応じて、ステージ名とかパスとか入れるとよさそうです。
参考にさせてもらったところ
Amazon Kinesis プロキシとして API Gateway API を作成する - Amazon API Gateway
API Gatewayへの入力値にLambdaからアクセスする - Qiita
蛇足1: ちょっとめんどくさかった Json 文字列の作成
Kinesis Proxy の Data
は Base64 でエンコードされてる必要があります。よって、先に JSON 文字列を作ってやる必要がありました。
が、このやり方がひたすら謎で迷走してました。Velocity Template Language
てなんやねん…
結局は #define
でできました。
Apache Velocity Engine VTL Reference
ほかに試したこと
#set ($data = ...)
でいれてみる
-> ダブルクォート なしのやつが出来上がる- さらに
$data.json()
とかしてみる
-> 空文字が返ってくる #set ($data = ...)
の際に '"" をエスケープして追加してみる
-> いんたーなるさーばーえらー
蛇足2:本当は X-Ray の Trace Id がほしかった
API Gateway からの応答には入っていたので、$input.param('X-Amzn-Trace-Id')
と書けばとれたりするかなー、と思ったりしましたがだめでした。
これが取れると X-Ray での描画ができてさらに便利になるやん、と期待してたりしました。