【AWS】API Gatewayでカスタムなステータスコードを返す方法

LambdaやEC2で作成したアプリのレスポンスが404や500などを返しても、API Gatewayにアタッチすると、なぜか200でレスポンスが帰ってしまいます。

これはAPI Gatewayの設定が足りていないために発生します。
この記事ではその設定方法を紹介します。

API Gatewayの設定

早速API Gatewayの設定をしていきましょう。
今回はGETメソッドへアクセスした場合、ステータス404でJSONが返ってくる場合を想定します。
Lambdaのコードで表現すると以下のような感じですね。

exports.handler = async (event, context, callback) => {
    const myErrorObj = {
        errorType : "Page not found",
        httpStatus : 404,
    }
    return callback(JSON.stringify(myErrorObj));
    // リクエストをしても200が返ってくる
};

メソッドレスポンス

まずはカスタムステータスを返したいパスのメソッドを選択します。
今回はGETを選択します。

次に、出てきた画面のメソッドレスポンスの設定画面を開いてください。
「メソッドレスポンス」と記載されている箇所のリンクをクリックしてください。

以下のように表示されていると思います。

ここで、レスポンスの追加をクリックして、出したいステータスを入力しましょう。
今回は404を追加しますので、「レスポンスの追加」>「404」と入力すると以下のようになります。

次にCORS系のレスポンスヘッダーと、レスポンス本文はJSONなので、それぞれ設定しましょう。

ステータスやレスポンスヘッダー、レスポンス本文の設定はご自分のアプリケーションに合わせて変更してください。

統合レスポンス

次に、統合レスポンスの方を修正していきます。
設定を開くと以下のようになっていると思います。

ここに404の設定を加えましょう。
ヘッダーのマッピング、マッピングテンプレートも先ほど入力したレスポンスヘッダーとレスポンス本文のものを入力します。

入力が終わったら「保存」ボタンを押しましょう。
これで設定は終わりです。

テスト

メソッドの設定画面からテストを行ってみてください。
以下の「テスト」をクリックするとテストできるかと思います。

これで、404ステータスが返ってきていれば成功です。
デプロイも忘れずに実行しましょう。

著者

Webエンジニア歴30年、フリーランスバックエンドエンジニア。

PHP歴約30年(Laravel 7年・FuelPHP 5年・CakePHP・自作FW)、
JavaScript歴約20年(React・Vue各4年)。
AWS(EC2 / CloudFront / RDS / API Gateway など)・
GCP(BigQuery)を使ったバックエンド開発を中心に、
複数の事業会社・受託案件でシステム設計から実装・運用まで担当しています。

PHPがバージョン4の時代から書いており、
Laravelが普及する前のフレームワーク乱立期も経験しています。
「昔はこう書いていたが今はこう」という変遷を肌で知っているエンジニアとして、
単なるコマンドの使い方だけでなく、なぜそうするのかの背景まで伝えることを意識して書いています。

このブログでは、実務で実際に詰まった箇所・調べたこと・気づいたことを
そのまま記事にしています。誰かの「詰まり」が解決するきっかけになれば幸いです。

千原 耕司をフォローする

役にたったと思ったら応援をお願いします m(._.)m

AWS
スポンサーリンク
シェアする
千原 耕司をフォローする
タイトルとURLをコピーしました