ダメ元エンジニアのお勉強おメモ

ほとんど自分用のメモです。AWS をよく触ります。Web アプリとか作ります。Raspberry Pi も好きです。

API Gateway で構築した REST API の存在しないパスへアクセスされた場合に 404 エラーを返したい

概要

API Gateway で構築した REST API の存在しないパスへアクセスされた場合、デフォルトだと 403 エラーで下記が返る。

{"message": "Missing Authentication Token" }

存在しないなら 404 エラーとして返したいよねって気持ちになった際の対処法を記載する。

対処法

ゲートウェイのレスポンスという設定を変えれば OK。

下記で編集ページまで行く。

f:id:rkr0314:20210515121824p:plain

デフォルトのステータスコード403なので404に変える。

f:id:rkr0314:20210515121840p:plain

レスポンス内容を変えたければ、テンプレート本文を変更する。保存を忘れずに。

f:id:rkr0314:20210515121859p:plain

注意点として、ここのテンプレートには複雑な内容が書けない。例えば if / else を書いた場合、それがそのまま文字列になって返ってしまう。

エラーレスポンスを交換に準拠した形式にするには、カスタマイズを使用する必要があります。カスタマイズは、単純な変数の置換のみをサポートする VTL 以外のマッピングテンプレートでレンダリングされます。

docs.aws.amazon.com

結果

リソースが作られていない下記にアクセスした場合、

  • xxx.execute-api.{region}.amazonaws.com/{stageName}
  • xxx.execute-api.{region}.amazonaws.com/{stageName}/
  • xxx.execute-api.{region}.amazonaws.com/{stageName}/hoge

404 エラーで、下記が返るようになる。

{"message":"Not Found"}

ただし、残念ながら下記のようなステージ名が指定されていない or 存在しない場合は、

  • xxx.execute-api.{region}.amazonaws.com
  • xxx.execute-api.{region}.amazonaws.com/
  • xxx.execute-api.{region}.amazonaws.com/hoge

403 エラーで、下記が返ってきてしまう模様。。

{"message":"Forbidden"}