0
Help us understand the problem. What are the problem?

posted at

updated at

Organization

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

問題

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

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?