Amazon RDS データベースに接続するために、Amazon Relational Database Service (Amazon RDS) プロキシを使用するように AWS Lambda 関数を設定したいと考えています。
解決策
前提条件 Amazon RDS Proxy は、Amazon RDS データベースと同じ Amazon Virtual Private Cloud (Amazon VPC) の VPC にある必要があります。
Amazon RDS Proxy を使用して Amazon RDS データベースに接続するように Lambda 関数を設定するには、次の手順を実行します。
Secrets Manager でデータベース認証情報を作成する
次の手順を実行します。
- AWS Secrets Manager コンソールを開きます。
- [新しいシークレットを保存する] を選択します。
- [シークレットタイプ] で [RDS データベースの認証情報] を選択します。
- RDS DB インスタンスのユーザー名とパスワードを入力します。
- [暗号化キー] には、Secrets Manager がシークレット値の暗号化に使用する AWS Key Management Service (AWS KMS) キーを選択します。
- [データベース] でデータベースを選択し、[次へ] を選択します。
- [シークレット名] に名前を入力し、[次へ] を選択します。
- [次へ] を選択してから、[保存] を選択します。
- [シークレット] で Secrets Manager のシークレットを選択します。
- [シークレット ARN] に記載されたシークレット ARN を書き留めておきます。
詳細については、「AWS Secrets Manager のシークレットを作成する」を参照してください。
Amazon RDS Proxy の IAM ポリシーとロールを作成する
シークレットを使用するアクセス許可を持つ AWS Identity and Access Management (IAM) ロールを作成します。例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"secretsmanager:GetResourcePolicy",
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret",
"secretsmanager:ListSecretVersionIds"
],
"Resource": [
"[Secret_ARN]"
]
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"secretsmanager:GetRandomPassword",
"secretsmanager:ListSecrets"
],
"Resource": "*"
}
]
}
注: Secret_ARN を実際のシークレット ARN に置き換えます。
次に、Amazon RDS がそのロールを引き受けることを許可する信頼ポリシーを作成します。例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "rds.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
プロキシを作成して Lambda 関数にアタッチする
まず、RDS プロキシを作成します。次に、以下の手順を実行し、データベースエンドポイントではなくプロキシエンドポイントに接続するように関数を設定します。
- Lambda コンソールを開きます。
- [関数] を選択し、次に Lambda 関数を選択します。
- [設定] を選択し、次に [RDS データベース] を選択します。
- [RDS データベースに接続] を選択します。
- RDS データベースを選択します。または、[新しいデータベースを作成] を選択し、次の設定を行います。
[エンジンタイプ] で、エンジンタイプを選択します。
[DB インスタンス識別子] に DB インスタンスの名前を入力します。
[マスターユーザー名] に、プライマリユーザーのログイン ID を入力します。
VPC には、デフォルト設定を使用します。デフォルトでは、Lambda は関数と同じ VPC に RDS データベースを設定します。
- データベース接続を選択し、[プロキシの追加] を選択します。
- [既存のプロキシ] で RDS プロキシを選択します。
- [追加] を選択します。
プロキシ接続が完了するまでに数分かかります。RDS DB インスタンスを Lambda で使用するように設定する方法の詳細については、「RDS リソースと連携するように関数を設定する」を参照してください。
(オプション) Amazon RDS プロキシが IAM 認証を使用していることを確認する
Lambda 実行ロールを使用して Amazon RDS プロキシへの認証を行う場合は、次の手順を実行します。
- Amazon RDS コンソールを開きます。
- ナビゲーションペインで [プロキシ] を選択し、使用するプロキシを選択します。
- [アクション]、**[変更]**の順に選択します。
- [認証] で、[IAM 認証] が [必須] に設定されていることを確認します。
接続の問題が発生した場合は、「Amazon RDS プロキシを使用して Amazon RDS DB または Amazon Aurora DB インスタンスに接続できない理由を知りたいです」を参照してください。
詳細については、「AWS Lambda で Amazon RDS プロキシを使用する」を参照してください。
関連情報
Amazon RDS DB インスタンスにアクセスしようとしたときの Lambda からの接続タイムアウトエラーをトラブルシューティングする方法を教えてください
RDS インスタンスに接続するように Lambda 関数を設定する方法を教えてください
Amazon RDS プロキシを Lambda 関数にアタッチするときの「Lambda は関数の実行ロールを更新できませんでした」というエラーを解決する方法を教えてください