Amazon RDS Proxy を使用して Amazon Relational Database Service (Amazon RDS) データベースに接続するように AWS Lambda 関数を設定したいと考えています。
簡単な説明
Lambda 関数用の Amazon RDS Proxy データベースを作成できます。データベースプロキシは、データベース接続のプールを管理し、関数からのクエリを中継します。これにより、データベース接続を使い果たすことなく、関数の同時実行レベルを高くすることができます。
詳細については、「Lambda 関数のデータベースアクセスの設定」を参照してください。
解決方法
以下の手順に従って、Lambda 関数を使用して Amazon RDS Proxy を設定します。
注: Amazon RDS Proxy は Amazon RDS データベースと同じ Amazon Virtual Private Cloud (Amazon VPC) にある必要があります。Amazon RDS Proxy にアクセスするように Amazon VPC で Lambda 関数を設定します。
ステップ 1: AWS Secrets Manager でデータベース認証情報を作成する
1. Secrets Manager コンソールを開いて、[Store a new secret] (新しいシークレットを保存) をクリックします。
2. [Select type] (タイプを選択) では、[Credentials for RDS database] (RDS データベースの認証情報) を選択します。
3. Amazon RDS データベースインスタンスのユーザー名とパスワードを入力します。
4. [Enctyption key] (暗号化キー) には、Secrets Manager がシークレット値を暗号化するために使用する AWS Key Management Service (AWS KMS) キーを選択します**。**
5. [Database] (データベース) でデータベースを選択し、[Next] (次へ) を選択します。
6. [Secret name] (シークレット名) では名前を入力して [Next] (次へ) を選択し、もう一度 [Next] (次へ) を選択してから、[Store] (ストア) を選択します。
7. [Secrets] (シークレット) で、作成した Secrets Manager シークレットを選択します。
8. [Secret ARN] (シークレット ARN) で、別のステップで使用するために ARN をコピーします。
詳細については、「AWS Secrets Manager データベースシークレットの作成」を参照してください。
ステップ 2: Amazon RDS Proxy 用の AWS Identity and Access Management (IAM) ポリシーとロールを作成する
シークレットを使用するアクセス許可を持つ IAM ロールを作成し、次に Amazon RDS がそのロールを引き継ぐことを許可する信頼ポリシーを作成します。
IAM Secrets Manager ポリシーの例
注: Secret_ARN は、以前にコピーした Secrets Manager ARN に置き換えてください**。**
{
"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": "*"
}
]
}
IAM RDS の信頼ポリシー例
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "rds.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
ステップ 3: RDS プロキシを作成して Lambda 関数にアタッチする
1. Lambda コンソールで関数ページを開きます 。
2. [Functions] (関数) で、Lambda 関数を選択します。
3. [Configuration] (設定) を選択し、[Add database proxies] (データベースプロキシの追加) を選択します。
4. 次の変数を入力します。
プロキシ識別子: プロキシの名前。
RDS DB インスタンス: サポートされている MySQL または PostgreSQL DB インスタンスまたはクラスター。
シークレット: 作成した Secrets Manager。
IAM ロール: 作成した IAM ロール。
認証: [Password] (パスワード) を選択してデータベース認証情報で接続するか、[Execution role] (実行ロール) を選択して関数の IAM 認証情報を認証に使用します。
5. [Add] (追加) を選択します。
プロキシの作成が完了するまでに数分かかります。プロキシが使用可能になったら、データベースエンドポイントではなくプロキシエンドポイントに接続するように関数を設定します。詳細については、「データベースプロキシ (コンソール) の作成」を参照してください。
ステップ 4: (オプション) Amazon RDS Proxy が IAM 認証を使用していることを確認する
以下の手順は、Lambda 実行ロールを使用して Amazon RDS Proxy への認証を行う場合にのみ必要です。
1. Amazon RDS コンソールを開きます。
2. ナビゲーションペインで、[Proxies] (プロキシ) を選択し、自分のプロキシを選択します。
3. [Actions]、[Modify] の順にクリックします。
4. 接続モジュールで、[IAM Authentication] (IAM 認証) が [Required] (必須) に設定されていることを確認します。
注: 接続に関する問題が発生している場合は、「
RDS Proxy を使用して Amazon RDS DB または Amazon Aurora DB インスタンスに接続できないのはなぜですか」を参照してください。
詳細については、「AWS Lambda で Amazon RDS Proxy を使用する」を参照してください。
関連情報
Amazon RDS DB インスタンスへのアクセス時に Lambda で発生する接続タイムアウトエラーをトラブルシューティングする方法を教えてください。
RDS インスタンスに接続するように Lambda 関数を設定する方法を教えてください。
Amazon RDS Proxy を Lambda 関数にアタッチするときに発生する「Lambda could not update the function's execution role」(Lambda が関数の実行ロールを更新できませんでした) というエラーを解決するにはどうすればよいですか?