Amazon RDS DB インスタンスにアクセスしようとすると、Lambda で発生する接続タイムアウトエラーをトラブルシューティングする方法を教えてください。

所要時間1分
0

Amazon Relational Database Service (Amazon RDS) DB インスタンスにアクセスしようとしているとき、AWS Lambda 関数が接続タイムアウトエラーを受信します。このエラーのトラブルシューティング方法を教えてください。

解決方法

断続的および一時的な接続タイムアウトエラーのトラブルシューティング

Lambda 関数のイベントをキャプチャし、関数のエラー処理の一部として再試行する

詳細については、「エラー処理と AWS Lambda での自動再試行」を参照してください。

DNS エラーをチェックする

ドメインネームシステム (DNS) 関連のエラーがないかどうかを確認します。DNS エラーがある場合は、それらを確認します。次に、エクスポネンシャルバックオフを使用して DNS リクエストを再試行します。詳細については、「AWS でのエラー再試行とエクスポネンシャルバックオフ」を参照してください。

注: DNS リクエストを再試行する前に、インバウンドエンドポイントとアウトバウンドエンドポイントを解決できることを確認してください。

何度も起こる接続タイムアウトエラーのトラブルシューティング

Lambda 関数の Amazon CloudWatch Logs を確認する

Lambda 関数に CloudWatch ログ記録の許可をまだ付与していない場合は、付与します。その後、関数のログを確認して、特定の接続タイムアウトエラーを特定します。

詳細については、Lambda アプリケーションのモニタリングとトラブルシューティングを参照してください。

VPC 設定を確認する

プライベートデータベースの場合は、ユースケースに基づいて、次のいずれかの操作を行います。

Lambda 関数をデータベースと同じ Amazon Virtual Private Cloud (Amazon VPC) に配置します

  • または -

関数を含む Amazon VPC と、データベースを含む Amazon VPC との間に VPC ピアリング接続を作成します。

パブリックデータベースの場合は、次の操作を実行します。

(Amazon VPC 内の関数の場合) パブリックトラフィックをネットワークアドレス変換 (NAT) ゲートウェイまたは NAT インスタンスを介してルーティングします。詳細については、「Amazon VPC に接続されている Lambda 関数にインターネットアクセスを許可するにはどうすればよいですか?」を参照してください。

注: データベースがパブリックにアクセス可能で、データベースに IP アドレスベースの制限がない場合は、「チュートリアル: Amazon VPC の Amazon RDS にアクセスする Lambda 関数の設定」の手順に従ってください。

セキュリティグループのルールを確認する

プライベートデータベースの場合は、次の操作を行います。

VPC のサブネットまたはセキュリティグループの CIDR 範囲からのトラフィックを許可するインバウンドルールを DB セキュリティグループに追加します。

パブリックデータベースの場合は、次の操作を実行します。

VPC の NAT ゲートウェイまたは NAT インスタンスからのトラフィックを許可するインバウンドルールを DB セキュリティグループに追加します。

Lambda 関数ハンドラーを更新する

関数ハンドラーの外部で関数がデータベース接続を開き、接続を閉じないように Lambda 関数コードを更新します。

注: Lambda がコンテナを再利用する方法により、Lambda は、コンテナが再利用されたときに、関数ハンドラーの外部にあるコードを再初期化しません。ハンドラーの外部で再利用する予定の接続を作成して、次の各呼び出しでそこに残るようにするのがベストプラクティスです。接続を使用する前に、有効な接続があることを確認してください。有効な接続がない場合は、続行する前に新しい接続を作成します。

EC2 インスタンスを使用して接続する

テストとして、Lambda 関数と同じ Amazon VPC 設定で Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを起動します。その後、EC2 インスタンスから Amazon RDS DB インスタンスへの接続を試みます。

データベースに接続できる場合は、Lambda でのネットワークに関する問題のトラブルシューティングの手順に従います。

  • または -

データベースに接続できない場合は、Amazon RDS DB インスタンスに接続する際の問題を解決するにはどうすればよいですか? の手順に従ってください。

Amazon RDS プロキシを使用する

Amazon Relational Database Service (Amazon RDS) データベースの RDS プロキシエンドポイントを作成して、Lambda 関数からのデータベーストラフィックを処理します。詳細については、Using Amazon RDS Proxy with AWS Lambda を参照してください。

注: MySQL および PostgreSQL に対する Amazon RDS Proxy のサポートが一般利用可能になりました


関連情報

Lambda 関数のデータベースアクセスの設定

AWS Lambda を Amazon RDS に使用する

VPC のパブリックサブネットまたはプライベートサブネットを使用する Amazon RDS インスタンスへの接続問題を解決するには、どうすれば良いですか?

AWS公式
AWS公式更新しました 3年前
コメントはありません