初めてAWS Lambda+API Gatewayをやってみてハマったポイント 返却JSON形式、CORS設定

More than 1 year has passed since last update.

ランタイムはNode.js。

LambdaとAPI Gatewayだけのシンプルなファンクションを作ろうとした。

DynamoDBとかS3とか使わないしハマるポイントとかないでしょって思ったけどやっぱりハマったのでメモ。


返却JSON形式

returnでobjectを返すとJSONにしてくれるのだが、

const responseData = {

data: {
foo: "bar"
}
}
return data

こんな感じで書くとうまくいかない。

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-integration-settings-integration-response.html

公式ドキュメントによると、

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コンソールで設定しようと必死こいたが無理だった(たぶんやりようはあるんだろうけど)。

https://qiita.com/maaz118/items/e20b64f088fbead07206

試行錯誤と検索の果てにこの記事にたどり着く。

素直に返却JSONのheadersAccess-Control-Allow-Originを書いたら意図通りに動かせた。

{

statusCode: "...",
headers: {
"Access-Control-Allow-Origin" : "*"
},
body: "..."
}