API Gateway(HTTP API)の疎通確認は、段階ごとに進めないと混乱します。
リクエストがバックエンドに到達するまでと、各段階の調査方法をまとめました。
API Gateway → バックエンドのリクエスト解決順
- カスタムドメインをStageごとのInvoke URLに解決する。
- ステージ内の指定したリソースに対するアクセス権が存在するかを確認する。
- メソッドリクエスト実行のための認証を行う
- メソッドリクエストを受け付けた後、API Gatewayからバックエンド(例えばAWS Lambda)に統合リクエストを行う(終了)
1. カスタムドメインをStageごとのInvoke URLに解決する
普通にdig
してCNAMEレコードが返ってくるか確認してください。
ここで失敗していると、当然ですがそもそもAPIからレスポンスが返ってきません。
2. ステージ内の指定したリソースに対するアクセス権が存在するかを確認する
疎通確認のため、API GatewayのStageからEnable CloudWatch Logs
を必ず有効にしてください。
CloudFormationで設定している場合は TracingEnabled: true
で有効になります。
その後、普通に curl
や Postman
でAPIにアクセスしてください。
私がよく遭遇するエラーは以下のとおりです。
Missing Authentication Token
API Gatewayの指定したリソースが存在しない場合に表示されます。
要するにURLやメソッドが間違ってるか、API Gatewayのリソースポリシーが間違っています。
{
"message": "Missing Authentication Token"
}
3. メソッドリクエスト実行のための認証を行う
メソッドリクエストの実行に失敗した時によく遭遇するエラーは以下の通りです。
Forbidden
例えばAPI_KEYが間違っています。
{
"message": "Forbidden"
}
The security token included in the request is invalid
メソッドリクエストの AuthorizerをIAMに指定している場合で、かつAWSのセッションが切れている場合です。
{
"message": "The security token included in the request is invalid"
}
4. メソッドリクエストを受け付けた後、API Gatewayからバックエンド(例えばAWS Lambda)に統合リクエストを行う
ここまでくれば、後は API Gateway自体の CloudWatch Logsでデバッグできるでしょう。
よくやらかすのはAPI GatewayにLambdaを実行する権限がない場合などです。