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 インスタンスへの接続問題を解決するには、どうすれば良いですか?