テストサンプルにPOSTボディできるものがなかったので、備忘録として。
手動で書き換えるポイントとしては、methodをPOSTにして、bodyというブロックが必要になります。
下にあるサンプルでは、Cookieもつけてます。(test=hoge123;)
要らなければブロックごと削除ですね。
BodyデータはBase64にエンコードしたものじゃないとダメのようです。
{"hoge1":"aaaaaaaaaa","hoge2":1111111111111}
というJsonをつけてみました。
{
"Records": [
{
"cf": {
"config": {
"distributionId": "EXAMPLE"
},
"request": {
"uri": "/sample.html",
"method": "POST",
"clientIp": "2001:cdba::3257:9652",
"body": {
"action": "read-only",
"data": "eyJob2dlMSI6ImFhYWFhYWFhYWEiLCJob2dlMiI6MTExMTExMTExMTExMX0=",
"encoding": "base64",
"inputTruncated": false
},
"headers": {
"host": [
{
"key": "Host",
"value": "d123.cf.net"
}
],
"user-agent": [
{
"key": "User-Agent",
"value": "Test Agent"
}
],
"user-name": [
{
"key": "User-Name",
"value": "aws-cloudfront"
}
],
"cookie": [
{
"key": "cookie",
"value": "test=hoge123;"
}
]
}
}
}
}
]
}
lambda@edgeのコードです。
index.js
'use strict';
exports.handler = (event, context, callback) => {
// リクエストの取得
const request = event.Records[0].cf.request;
console.log("event", event);
// body取得
var bodyData = Buffer.from(event.Records[0].cf.request.body.data, 'base64').toString("utf-8");
var req_body = JSON.parse(bodyData);
console.info('req_body: ',req_body);
callback(null, request);
};
実行ログです。
START RequestId: 83454c21-7a6b-4f9f-9085-1b5fd1e2aefc Version: $LATEST
2021-09-21T10:16:51.415Z 83454c21-7a6b-4f9f-9085-1b5fd1e2aefc INFO event { Records: [ { cf: [Object] } ] }
2021-09-21T10:16:51.416Z 83454c21-7a6b-4f9f-9085-1b5fd1e2aefc INFO req_body: { hoge1: 'aaaaaaaaaa', hoge2: 1111111111111 }
END RequestId: 83454c21-7a6b-4f9f-9085-1b5fd1e2aefc
REPORT RequestId: 83454c21-7a6b-4f9f-9085-1b5fd1e2aefc Duration: 56.07 ms Billed Duration: 57 ms Memory Size: 128 MB Max Memory Used: 65 MB Init Duration: 165.47 ms
req_body
というJsonオブジェクトに入ってます。
個別に取り出すときは、req_body.hoge1
とかで取れると思います。