Lambda と統合する API Gateway エンドポイントで発生する問題をトラブルシューティングする方法を教えてください。

所要時間1分
0

Amazon API Gateway エンドポイントを AWS Lambda と統合したいのですが、エラーが発生します。

解決策

発生したエラーに応じて、次のトラブルシューティング手順を実行します。

始める前に、API Gateway のエラーをトラブルシューティングするために Amazon CloudWatch Logs を有効化します。[ログレベル][INFO] を選択すると、すべてのリクエストの実行ログが生成されます。

API ゲートウェイに Lambda 関数のアクセス許可がない

Invalid permissions on Lambda function というエラーは、API Gateway に Lambda 関数を呼び出すアクセス許可がない場合に発生します。この問題を解決するには、「API Gateway REST API で発生する、Lambda 関数のアクセス許可が無効というエラーを解決する方法を教えてください」をご覧ください。

注: AWS CloudFormation などの別のサービスを使用して API ゲートウェイリソースをデプロイする場合は、AWS::Lambda::Permission リソースにアクセス許可を付与してください。

スロットリングが発生している

多数のリクエストによりバックエンドサービスでスロットリングが発生した場合、API Gateway API は内部サーバーエラーを返す場合があります。エクスポネンシャルバックオフと再試行メカニズムを有効にしてから、リクエストを再送信します。問題が解決しない場合は、API Gateway のクォータを確認してください。サービスクォータを超えた場合は、関数のスロットリングを防ぐために Lambda 関数の同時実行数クォータ増加をリクエストしてください。

Lambda 関数のスロットリングの問題が原因で、Rate exceeded エラーや 429 TooManyRequestsException エラーが発生する場合もあります。詳細については、「Lambda 関数で "Rate exceeded" や "TooManyRequestsException" などのスロットリングに関するエラーが発生する場合のトラブルシューティング方法を教えてください」を参照してください。

ステータスコードのマッピングが正しくないか、欠けている

HTTP ステータスコードのマッピングが正しくないか欠けている場合、次のような 500 エラーメッセージが表示されることがあります。

「Execution failed due to configuration error: 出力マッピングは無効なメソッド応答を参照しています: 2xx/4xx/5xx」

このエラーを解決するには、正しいステータスコードを返すように API 操作の統合リクエストとレスポンスを設定します

Lambda サービスの例外に対処していない

Lambda 関数のタイムアウトなどの Lambda サービスの例外に対処していない場合、Lambda.Unknown エラーが発生します。Lambda 関数のタイムアウトを防ぐには、Lambda 関数コードをべき等にします。

詳細については、「API Gateway と Lambda のエラー処理パターン」を参照してください。

Lambda 統合エンドポイントのタイムアウトに関する問題

API Gateway 統合タイムアウトのデフォルトクォータ制限は、すべての統合タイプで 29 秒です。Lambda 関数が応答を返すまでに 29 秒よりも長くかかる場合、リクエストは失敗し、504 Endpoint request timed out エラーが発生します。

Lambda 関数が 29 秒以内に応答を返すことを確認してください。Lambda 関数が 29 秒以内に応答を返すことができない場合は、統合タイムアウト制限のクォータ増加を申請してください。

注: リージョナル API とプライベート API では、統合タイムアウトを 29 よりも長い期間に増やすことができます。ただし、統合タイムアウトを増やすと、AWS アカウントでリージョンレベルのスロットルクォータを減らす必要がある場合があります。

Lambda 関数が出力する JSON 形式に誤りがある

統合 Lambda 関数からの出力が REST API で指定された JSON 形式に準拠していない場合、malformed proxy エラーが発生します。プロキシ統合用の Lambda 関数と Lambda オーソライザーからの出力では、正しい JSON 形式を使用する必要があります。

プロキシ統合用の Lambda 関数の例

{

"isBase64Encoded": true|false,

"statusCode": httpStatusCode,

"headers": { "headerName": "headerValue", ... },

"multiValueHeaders": { "headerName": ["headerValue", "headerValue2", ...], ... },

"body": "..."

}

関連情報

API Gateway での HTTP 呼び出しに関するエラーのトラブルシューティング方法を教えてください

コメントはありません

関連するコンテンツ