LoginSignup
3
1

More than 5 years have passed since last update.

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

Posted at

ランタイムは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のheadersAccess-Control-Allow-Originを書いたら意図通りに動かせた。

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1