ゲートウェイレスポンスの注意点【API Gateway REST API】
はじめに
API Gatewayにはゲートウェイレスポンスと呼ばれる機能があります。これを設定することにより、統合先のLambda等でエラーを返す処理を記述しなくても、API Gateway側で先にエラーを返してくれるようになります。
返すことができるエラーの種類は決まっています[1]が、エラーの内容はカスタマイズすることが可能です。
結合試験で各ゲートウェイレスポンスのテストをする中で、いくつかハマりどころがあったので紹介しようと思います。
「リクエストが大きすぎるエラー」はカスタムできない
リクエストペイロードが10MBを超える場合、ゲートレスポンスREQUEST_TOO_LARGE
を返します。
各ゲートウェイレスポンスは基本的に返す内容をカスタマイズできるのですが、このREQUEST_TOO_LARGE
だけはカスタマイズしてもデフォルトの内容が適用されていました。
原因を考えていたところ、API Gatewayの開発者ガイドに記載があり、REST APIの仕様であることがわかりました。
現在、413 REQUEST_TOO_LARGE のデフォルトゲートウェイレスポンスのカスタマイズはサポートされていません。
あくまで"現在"はサポートされていないということなので、将来的にカスタマイズできるようになるかもしれませんね。
存在しないリソースパスにリクエストしたらどうなるか?
REST APIはリソースパス(v1/hoge/fuga
の部分)を指定してリクエストを送信しますが、存在しないリソースパスにリクエストした場合、どのゲートウェイレスポンスでエラーが返されるのでしょうか。
最初は名前的にRESOURCE_NOT_FOUND
になると思っていました。しかし、実際に返ってきたのはMISSING_AUTHENTICATION_TOKEN
でした。
そこで開発者ガイドをよく見ると以下のような記述がありました。[1:1]
ゲートウェイレスポンスのタイプ | デフォルトのステータスコード | 説明 |
---|---|---|
MISSING_AUTHENTICATION_TOKEN | 403 | 認証トークンが見つからない場合のゲートウェイレスポンス。サポートされていない API メソッドやリソースをクライアントが呼び出そうとした場合などが該当します。 |
RESOURCE_NOT_FOUND | 404 | API リクエストが認証および認可 (API キー認証および認可を除く) に合格した後で、指定されたリソースを API Gateway で見つけることができない場合のゲートウェイレスポンス。 |
私の場合、APIキー認証は設定していましたが、その他認証トークンによる認証は設定していませんでしたので、MISSING_AUTHENTICATION_TOKEN
のほうが適用されたようです。
おわりに
ゲートウェイレスポンスは便利な機能ですので、正しく理解して使うことが大切だと思います。この記事が何かの参考になれば幸いです。
Discussion