Amazon RDS データベースに接続するために、Amazon Relational Database Service (Amazon RDS) Proxy を使用するように 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 を書き留めておきます。
詳細については、「Create an AWS Secrets Manager secret」(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 Proxy が IAM 認証を使用していることを確認する
Lambda 実行ロールを使用して Amazon RDS Proxy への認証を行う場合は、次の手順を実行します。
- Aurora と RDS コンソールを開きます。
- ナビゲーションペインで [プロキシ] をクリックし、使用するプロキシを選択します。
- [アクション]、[変更] の順に選択します。
- [認証] で、[IAM 認証] が [必須] に設定されていることを確認します。
接続の問題が発生した場合は、「RDS Proxy を使用して Amazon RDS DB または Amazon Aurora DB インスタンスに接続できないのはなぜですか?」を参照してください。
詳細については、「Using Amazon RDS Proxy with AWS Lambda」(AWS Lambda で Amazon RDS Proxy を使用する) を参照してください。
関連情報
Amazon RDS DB インスタンスにアクセスしようとすると、Lambda で発生する接続タイムアウトエラーをトラブルシューティングする方法を教えてください。
RDS インスタンスに接続するように Lambda 関数を設定するにはどうすればよいですか?
Amazon RDS プロキシを Lambda 関数にアタッチするときに発生する "Lambda could not update the function's execution role" というエラーを解決するにはどうすればよいですか?