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

最終更新日: 2021 年 4 月 19 日

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 関数からのデータベーストラフィックを処理します。詳細については、「AWS Lambda で Amazon RDS Proxy を使用する」を参照してください。

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