LoginSignup
3
1

More than 1 year has passed since last update.

Lambda から直接ステータスコードを返す

Last updated at Posted at 2022-05-21

問題

こんな感じで ステータスコード 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);
};
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