ランタイムはNode.js。
LambdaとAPI Gatewayだけのシンプルなファンクションを作ろうとした。
DynamoDBとかS3とか使わないしハマるポイントとかないでしょって思ったけどやっぱりハマったのでメモ。
返却JSON形式
return
でobjectを返すとJSONにしてくれるのだが、
const responseData = {
data: {
foo: "bar"
}
}
return data
こんな感じで書くとうまくいかない。
公式ドキュメントによると、
const responseData = {
statusCode: "...", // a valid HTTP status code
headers: {
custom-header: "..." // any API-specific custom header
},
body: "...", // a JSON string.
isBase64Encoded: true|false // for binary support
}
この形式で書く必要がある。
const responseData = {
statusCode: "200",
body: "foobar"
}
実際は最低これだけあれば動く。
なお、bodyの中身をネストさせたい場合はJSON.stringify
で囲ってやる必要がある。
const responseData = {
statusCode: "200",
body: JSON.stringify({
foo: "bar"
})
}
CORS設定
最初、ブラウザのAPI Gatewayコンソールで設定しようと必死こいたが無理だった(たぶんやりようはあるんだろうけど)。
試行錯誤と検索の果てにこの記事にたどり着く。
素直に返却JSONのheaders
にAccess-Control-Allow-Origin
を書いたら意図通りに動かせた。
{
statusCode: "...",
headers: {
"Access-Control-Allow-Origin" : "*"
},
body: "..."
}