問題
こんな感じで ステータスコード 400 を return する Lambda を書くとする。
exports.handler = async (event, context) => {
let response = {
statusCode: '400',
body: JSON.stringify({ error: 'Bad Request' }),
};
return response;
};
しかし、API Gateway を介してこの Lambda にアクセスしてみると、なぜかステータスコード 200 が返ってくる。
これは Lambda のレスポンスが API Gateway によりラッピングされてしまうことが原因。
なので、Lambda のレスポンス内容をもとにマッピングテンプレートを利用し API Gateway 側でレスポンスコードを指定する必要があった。
でも面倒なので、Lambda で直接ステータスコードを設定したい。
対処
callback
にレスポンス内容を渡してあげれば中身がそのままレスポンスとして返る。
中身がそのまま返るからヘッダーとかちゃんと設定してあげる必要あるけど。
exports.handler = async (event, context, callback) => {
let response = {
statusCode: '400',
body: JSON.stringify({ error: 'Bad Request' }),
headers: {
'Content-Type': 'application/json',
}
};
callback(null, response);
};