API Gateway で「Output mapping refers to an invalid method response: 200」が発生するときの対処方法

2023.07.07

困っていた内容

API Gateway を利用して独自の REST API を構築中です。
EC2 で稼働中するバックエンドまでの一連の構築が終わり、テストリクエストを行ったところ{"message": "Internal server error"}が発生しました。
バックエンドのアプリは正常にリクエストを返却していますが、API Gateway がエラーを返却しているようです。
クライアントに正常なレスポンスを返却するにはどうしたら良いでしょうか。

なお、実行ログには次のエラーが記録されていました。

Execution failed due to configuration error: Output mapping refers to an invalid method response: 200

どう対応すればいいの?

「メソッドレスポンス」と「統合レスポンス」で実行ログに記録された HTTP ステータスを正しく定義しているか確認してください。

Output mapping refers to an invalid method responseは、HTTP ステータスのマッピングが定義されていないか、誤っている場合に発生します。

初期構築で実行ログに記録されたエラーが200の場合、多くは「メソッドレスポンス」で HTTP ステータスの定義漏れです。

そのため、まず「メソッドレスポンス」で実行ログに記録された HTTP ステータスを正しく定義されているか、正しく定義されている場合「統合レスポンス」とマッピングされているか確認してください。

なお、バックエンドのステータスコードに関係なく、API Gateway から常に200が返却される場合は次のブログが参考になると思います。

HTTP カスタム統合の API Gateway でバックエンドのステータスコードと異なるコードが返ってくるのはなぜでしょうか | DevelopersIO

メソッドレスポンスに HTTP ステータス 200 を定義する

API Gateway コンソールを開き、対象の API をクリック

リソース -> 対象のメソッド -> 「メソッドレスポンス」の順にクリック

「レスポンスの追加」をクリック

200を入力し、右端のチェックを選択して保存

「メソッドの実行」をクリック

「統合レスポンス」をクリック

「メソッドレスポンス」で追加した値(200)が設定されていることを確認し「メソッドの実行」をクリック
※設定されていない場合は「統合レスポンスの追加」から追加してください。

アクションから API をデプロイします。

参考資料

バックエンドが返したレスポンスに対応するメソッドレスポンスが定義されていない場合、API Gateway はクライアントにレスポンスを返しません。代わりに、500 Internal server error エラーレスポンスを返します。

Incorrect or missing HTTP status code mapping

Incorrect or missing HTTP status code mapping can also result in 500 errors similar to the following:

"Execution failed due to configuration error: Output mapping refers to an invalid method response: 2xx/4xx/5xx".