VPC リンク経由で NLB と接続する API Gateway にリクエストを送ると Internal Server Error が返ってきます。原因を教えてください。
困っていること
VPC リンク経由で NLB と接続する REST API の API Gateway 環境を構築しました。しかし、API Gateway に対して API リクエストを送ると、ステータスコード 500 の Internal Server Error が返ってきます。原因を教えてください。
どう対応すればいいの?
API Gateway からのリクエストに対して NLB にアタッチしているセキュリティグループのインバウンドルールが適用されてしまっていることによりエラーが発生している可能性があります。
NLB のセキュリティ設定で「PrivateLink トラフィックにインバウンドルールを適用する」を無効にしているかを確認してください。
API Gateway から NLB に VPC リンク経由でアクセスを実施する場合、NLB への送信元 IP アドレスは AWS が管理する API Gateway サービス基盤のプライベート IP アドレスとなります。
当該サービス基盤の IP アドレス仕様は公開されてないため、上記構成にて NLB にアクセスする場合には「PrivateLink トラフィックにインバウンドルールを適用する」設定を無効にし、API Gateway からのアクセスを NLB にアタッチしているセキュリティグループの影響対象から除外する[1]必要があります。
b. PrivateLink のセキュリティグループ評価をオフにします。
- コンソールを使用して PrivateLink トラフィックのセキュリティグループ評価をオフにするには、[セキュリティ] タブ、[編集] の順に選択します。[セキュリティ設定] で、[PrivateLink トラフィックにインバウンドルールを適用する] をオフにします。
補足
なお、 API Gateway から Internal server error が返ってくる理由としては、NLB 側のセキュリティ設定以外にも複数の要因が考えられます。[2]
上記設定に問題が無かった場合は、以下観点にて切り分けを実施してください。
500 エラー: 内部サーバーエラー
このエラーは、次のいずれかのシナリオが原因で発生する可能性があります。
- AWS Lambda 関数コードのエラー
- ステージ変数を使用する権限がない
- HTTP ステータスコードのマッピングが正しくないか、見つからない
- スロットリングに関する問題
- POST の HTTP メソッドが未定義です
- Lambda 権限
- Lambda 関数の JSON 形式の問題
- バックエンドのペイロードサイズが 10 MB を超える
- プライベートエンドポイント統合
- 内部サービスの障害