Lambda + APIGatewayでREST APIを構築し、いろんなエラーに遭遇しました。
確認すべき箇所をメモしておきます。
403 {"message":"Forbidden"}
→ リクエストURLは正しいでしょうか
API Gatewayはpath+ステージ名を付けたりします。
このステージ名が抜けてるとForbiddenになりますので、確認してみてください。
構成
https://{APIのID}.execute-api.{リージョン}.amazonaws.com/{ステージ名}/{リソース名}
例
https://api-id.execute-api.us-east-2.amazonaws.com/default/pets?id=4&type=dog
→ リソースポリシーが間違っていないでしょうか
リソースポリシーが真っ白だとエラーになります。
左メニューの「リソースポリシー」を確認してみてください。
例えば全部許可するなら以下のように書きます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "execute-api:Invoke",
"Resource": "arn:aws:execute-api:ap-northeast-1:000000000000:api-id/*"
}
]
}
"Resource"
にはarnを入れてくださいね。
設定後は必ずAPIをデプロイしましょう。
502 Bad Gateway
→ API Gatewayに問題はないかもしれません...
APIGatewayをトリガーにしてLambdaが動き、Lambdaでエラーが発生した場合、502エラーが返ってきます。
なので、APIGatewayに問題はないかもしれません。
Lambda側のCloud Watchログなどを確認して、Lambdaの問題なのかAPIGateWayの問題なのかを切り分けてみてください。
→ エンドポイントがプライベート設定なのでしょうか
左メニュー「設定」 > エンドポイントの設定 を「プライベート」にしているとVPCの設定が求められます。
「プライベート」にするなら正しいVPCが設定されているかを確認してみてくださいね。
「リージョン」ならVPCの設定は必要ありません。
→ API keyが有効になってますでしょうか
左メニュー「リソース」 > 対象リソース名のメソッド > 「メソッドリクエスト」 をクリックして、APIキーの必要性が「false」になっていることを確認してください。
もしAPI Keyを設定するなら、
左メニューの「APIキー」からAPIを作って、ヘッダーにx-api-key
の項目名で設定しましょう。
また、左メニューの「設定」で「API キーのソース」が「ヘッダー」になっていることも確認してください。
設定後は必ずAPIをデプロイしましょう。
そのほか
→ リソースのデプロイをお忘れではないでしょうか...
これまでの内容でも赤文字で記載していますが、リソースやリソースポリシーをいじったら必ずデプロイしましょう。
私はこれをやってなくて1時間溶かしました😆
参考
参考にさせていただきました。
- AWS API Gateway デベロッパーガイド HTTP API のルートの使用
- API Gatewayとlambdaを使ってみる
- Amazon API Gateway でのプライベート API の作成
以上