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 での描画ができてさらに便利になるやん、と期待してたりしました。