Lambda 関数と DB インスタンスを自動的に接続する
Amazon RDS コンソールを使用すると、Lambda 関数と DB インスタンスとの接続を簡単に設定できます。多くの場合、DB インスタンスは VPC 内のプライベートサブネットにあります。アプリケーションで Lambda 関数を使用すると、プライベート DB インスタンスにアクセスできます。
Lambda 関数とマルチ AZ DB クラスター間の接続をセットアップする方法については、「Lambda 関数とマルチ AZ DB クラスターを自動的に接続する」を参照してください。
次の画像は、DB インスタンスと Lambda 関数の間の直接接続を示しています。
Lambda 関数と DB インスタンス間の RDS プロキシ経由の接続を設定して、データベースのパフォーマンスと耐障害性を改善できます。多くの場合、Lambda 関数は短いデータベース接続を頻繁に行い、RDS プロキシが提供する接続プールを使用することで利点を得られます。データベース認証情報を Lambda アプリケーションコードで管理する代わりに、Lambda 関数に設定済みの AWS Identity and Access Management IAM 認証を利用できます。詳細については、「Amazon RDS Proxy の使用」を参照してください。
コンソールを使用して既存のプロキシに接続すると、Amazon RDS は、DB インスタンスと Lambda 関数からの接続を許可するように、プロキシセキュリティグループを更新します。
同じコンソールページから新しいプロキシを作成することもできます。コンソールでプロキシを作成するときに、DB インスタンスにアクセスするには、データベースの認証情報を入力するか、AWS Secrets Manager シークレットを選択する必要があります。
Lambda 関数との自動接続の概要
Lambda 関数と RDS DB インスタンス を接続するための要件は次のとおりです。
-
Lambda 関数は、DB インスタンスと同じ VPC に存在する必要があります。
-
接続を設定するユーザーには、以下の Amazon RDS、Amazon EC2、Lambda、Secrets Manager、および IAM 操作を実行するアクセス許可が必要です。
-
Amazon RDS
-
rds:CreateDBProxies
-
rds:DescribeDBInstances
-
rds:DescribeDBProxies
-
rds:ModifyDBInstance
-
rds:ModifyDBProxy
-
rds:RegisterProxyTargets
-
-
Amazon EC2
-
ec2:AuthorizeSecurityGroupEgress
-
ec2:AuthorizeSecurityGroupIngress
-
ec2:CreateSecurityGroup
-
ec2:DeleteSecurityGroup
-
ec2:DescribeSecurityGroups
-
ec2:RevokeSecurityGroupEgress
-
ec2:RevokeSecurityGroupIngress
-
-
Lambda
-
lambda:CreateFunctions
-
lambda:ListFunctions
-
lambda:UpdateFunctionConfiguration
-
-
Secrets Manager
-
secretsmanager:CreateSecret
-
secretsmanager:DescribeSecret
-
-
IAM
-
iam:AttachPolicy
-
iam:CreateRole
-
iam:CreatePolicy
-
-
AWS KMS
-
kms:describeKey
-
-
注記
DB インスタンスと Lambda 関数が異なるアベイラビリティーゾーンにある場合、アベイラビリティーゾーン間のコストが発生する可能性があります。
Lambda 関数 RDS データベース間の接続を設定すると、Amazon RDS は、関数と DB インスタンス の VPC セキュリティグループを設定します。RDS プロキシを使用する場合、Amazon RDS はプロキシの VPC セキュリティグループも設定します。Amazon RDS は、次の表で説明されているように、DB インスタンス、Lambda 関数、およびプロキシに関連付けられたセキュリティグループの現在の設定に従って動作します。
現在の RDS セキュリティグループの設定 | 現在の Lambda セキュリティグループ設定 | 現在のプロキシセキュリティグループ設定 | RDS アクション |
---|---|---|---|
DB インスタンスには 1 つ以上のセキュリティグループが関連付けられ、その名前は、パターン パターンに一致するセキュリティグループは変更されていません。このセキュリティグループには、Lambda 関数またはプロキシの VPC セキュリティグループをソースとするインバウンドルールが 1 つのみ存在します。 |
Lambda 関数に関連付けられたセキュリティグループが 1 つ以上あり、その名前はパターン パターンに一致するセキュリティグループは変更されていません。このセキュリティグループには、DB インスタンスまたはプロキシのいずれかの VPC セキュリティグループをデスティネーションとするアウトバウンドルールが 1 つだけあります。 |
プロキシに関連付けられたセキュリティグループが 1 つ以上あり、その名前はパターン パターンに一致するセキュリティグループは変更されていません。このセキュリティグループには、Lambda 関数と DB インスタンス の VPC セキュリティグループに関するインバウンドルールとアウトバウンドルールがあります。 |
Amazon RDS は何もしません。 Lambda 関数、プロキシ (オプション)、および DB インスタンス間の接続は既に自動的に設定されています。関数、プロキシ、およびデータベースの間には既に接続が存在するため、セキュリティグループは変更されません。 |
次の条件のいずれかが適用されます。
Amazon RDS は、Lambda 関数またはプロキシの VPC セキュリティグループをソースとするインバウンドルールが 1 つも存在しないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。変更の例としては、ルールの追加や、既存ルールのポート変更などがあります。 |
次の条件のいずれかが適用されます。
Amazon RDS は、DB インスタンスまたはプロキシの VPC セキュリティグループをデスティネーションとするアウトバウンドルールが 1 つもないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。 |
次の条件のいずれかが適用されます。
|
RDS action: create new security groups |
DB インスタンスに関連付けられ、パターン パターンに一致するセキュリティグループは変更されていません。このセキュリティグループには、Lambda 関数またはプロキシの VPC セキュリティグループをソースとするインバウンドルールが 1 つのみ存在します。 |
Lambda 関数に関連付けられたセキュリティグループが 1 つ以上あり、その名前はパターン ただし、Amazon RDS は、これらのセキュリティグループのいずれも、DB インスタンスとの接続には使用できません。Amazon RDS は、DB インスタンスまたはプロキシの VPC セキュリティグループをデスティネーションとするアウトバウンドルールが 1 つもないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。 |
プロキシに関連付けられ、パターン ただし、Amazon RDS は、これらのセキュリティグループのいずれも、DB インスタンスまたは Lambda 関数との接続には使用できません。Amazon RDS は、DB インスタンスおよび Lambda 関数の VPC セキュリティグループに関するインバウンドルールとアウトバウンドルールがないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。 |
RDS action: create new security groups |
DB インスタンスに関連付けられ、パターン パターンに一致するセキュリティグループは変更されていません。このセキュリティグループには、Lambda 関数またはプロキシの VPC セキュリティグループをソースとするインバウンドルールが 1 つのみ存在します。 |
接続用の有効な Lambda セキュリティグループが存在しますが、Lambda 関数に関連付けられていません。このセキュリティグループには、パターン |
接続に有効なプロキシセキュリティグループは存在しますが、プロキシに関連付けられていません。このセキュリティグループには、パターン |
RDS action: associate Lambda security group |
次の条件のいずれかが適用されます。
Amazon RDS は、Lambda 関数またはプロキシの VPC セキュリティグループをソースとするインバウンドルールが 1 つも存在しないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。 |
Lambda 関数に関連付けられたセキュリティグループが 1 つ以上あり、その名前はパターン パターンに一致するセキュリティグループは変更されていません。このセキュリティグループには、DB インスタンスまたはプロキシの VPC セキュリティグループをデスティネーションとするアウトバウンドルールが 1 つだけあります。 |
プロキシに関連付けられ、パターン パターンに一致するセキュリティグループは変更されていません。このセキュリティグループには、DB インスタンスおよび Lambda 関数の VPC セキュリティグループに関するインバウンドルールとアウトバウンドルールがあります。 |
RDS action: create new security groups |
次の条件のいずれかが適用されます。
Amazon RDS は、Lambda 関数またはプロキシの VPC セキュリティグループをソースとするインバウンドルールが 1 つも存在しないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。 |
次の条件のいずれかが適用されます。
Amazon RDS は、DB インスタンスまたはプロキシの VPC セキュリティグループをソースとするアウトバウンドルールが 1 つもないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。 |
次の条件のいずれかが適用されます。
|
RDS action: create new security groups |
RDS アクション: 新しいセキュリティグループを作成する
Amazon RDS は以下のアクションを実行します。
-
パターン
rds-lambda-
またはn
rds-rdsproxy-
(RDS プロキシを使用する場合) に一致する新しいセキュリティグループを作成します。このセキュリティグループには、Lambda 関数またはプロキシの VPC セキュリティグループをソースとするインバウンドルールがあります。このセキュリティグループは、DB インスタンスに関連付けられ、関数またはプロキシが DB インスタンスにアクセスすることを許可します。n
-
パターン
lambda-rds-
またはn
lambda-rdsproxy-
に一致する新しいセキュリティグループを作成します。このセキュリティグループには、DB インスタンスまたはプロキシの VPC セキュリティグループをデスティネーションとするアウトバウンドルールがあります。このセキュリティグループは Lambda 関数に関連付けられ、関数が DB インスタンス にトラフィックを送信するか、プロキシ経由でトラフィックを送信することを許可します。n
-
パターン
rdsproxy-lambda-
に一致する新しいセキュリティグループを作成します。このセキュリティグループには、DB インスタンスおよび Lambda 関数の VPC セキュリティグループに関するインバウンドルールとアウトバウンドルールがあります。n
RDS アクション: Lambda セキュリティグループを関連付ける
Amazon RDS は、有効な既存の Lambda セキュリティグループを Lambda 関数に関連付けます。このセキュリティグループは、関数が DB インスタンス にトラフィックを送信するか、プロキシ経由でトラフィックを送信することを許可します。
Lambda 関数と RDS データベース を自動的に接続する
Amazon RDS コンソールを使用して、Lambda 関数を DB インスタンスに自動的に接続することができます。これにより、これらのリソース間の接続を設定するプロセスが簡単になります。
RDS プロキシを使用して、接続にプロキシを含めることもできます。Lambda 関数は短いデータベース接続を頻繁に行うため、RDS プロキシが提供する接続プールを使用することで利点を得られます。Lambda アプリケーションコードでデータベース認証情報を管理する代わりに、Lambda 関数用に設定済みの IAM 認証を使用することもできます。
[Lambda 接続の設定] ページを使用して、既存の DB インスタンスを新規および既存の Lambda 関数に接続できます。セットアッププロセスでは、必要なセキュリティグループが自動的にセットアップされます。
Lambda 関数と DB インスタンスの間の接続を設定する前に、次のことを確認してください。
-
Lambda 関数と DB インスタンスが同じ VPC にあります。
-
ユーザーアカウントに適切なアクセス許可があります。要件の詳細については、「Lambda 関数との自動接続の概要」を参照してください。
接続の設定後にセキュリティグループを変更すると、Lambda 関数と DB インスタンスとの接続に影響する可能性があります。
注記
AWS Management Console でのみ、DB インスタンスと Lambda 関数の間の接続を自動的に設定できます。Lambda 関数を接続するには、DB インスタンスが使用可能状態である必要があります。
Lambda 関数と DB インスタンスを自動的に接続するには
AWS Management Console にサインインし、Amazon RDS コンソール https://console.aws.amazon.com/rds/
を開きます。 -
ナビゲーションペインで、[データベース] を選択し、Lambda 関数に接続するDB インスタンスを選択します。
-
[アクション] として、[Lambda 接続の設定] を選択します。
-
[Lambda 接続の設定] ページの [Lambda 関数の選択] で、次のいずれかを実行します。
-
DB インスタンスと同じ VPC に既存の Lambda 関数がある場合は、[既存の関数を選択] を選択し、関数を選択します。
-
同じ VPC に Lambda 関数がない場合は、[新しい関数を作成] を選択し、[関数名] を入力します。デフォルトのランタイムは Nodejs.18 に設定されています。接続設定が完了した後、Lambda コンソールで新しい Lambda 関数の設定を変更できます。
-
-
(オプション) [RDS プロキシ] で、[RDS プロキシを使用して接続] を選択し、次のいずれかを実行します。
-
使用する既存のプロキシがある場合は、[既存のプロキシを選択] を選択し、プロキシを選択します。
-
プロキシがなく、Amazon RDS にプロキシを自動的に作成させる場合は、[新しいプロキシの作成] を選択します。次に、[データベース認証情報] として、次のいずれかを実行します。
-
[データベースのユーザー名とパスワード] を選択し、DB インスタンスの [ユーザー名] と [パスワード] を入力します。
-
[Secrets Manager シークレット] を選択します。次に、[シークレットを選択] で、AWS Secrets Manager シークレットを選択します。Secrets Manager シークレットがない場合は、[新しい Secrets Manager シークレットを作成] を選択して、新しいシークレットを作成します。シークレットを作成した後、[シークレットを選択] で、新しいシークレットを選択します。
新しいプロキシを作成した後、[既存のプロキシを選択] を選択し、プロキシを選択します。プロキシが接続可能になるまでに時間がかかる場合があることに注意してください。
-
-
-
(オプション) [接続の概要] を展開し、強調表示されているリソースの最新情報を確認します。
-
[Set up (セットアップ)] を選択します。
接続中のコンピューティングリソースを表示する
AWS Management Console を使用して、DB インスタンスに接続されている Lambda 関数を確認できます。表示されるリソースには、Amazon RDS が自動的に設定したコンピューティングリソース接続が含まれます。
一覧表示されるコンピューティングリソースには、DB インスタンスに手動で接続されたリソースは含まれていません。例えば、データベースに関連付けられた VPC セキュリティグループにルールを追加することで、コンピューティングリソースが DB インスタンス に手動でアクセスするのを許可できます。
コンソールに Lambda 関数を一覧表示するには、以下の条件が適用される必要があります。
-
コンピューティングリソースに関連付けられているセキュリティグループの名前がパターン
lambda-rds-
またはn
lambda-rdsproxy-
(n
は数字) と一致します。n
-
コンピューティングリソースに関連付けられているセキュリティグループに、DB インスタンスまたは該当するプロキシが使用するポートにポート範囲が設定されたアウトバウンドルールがあります。アウトバウンドルールのデスティネーションは、DB インスタンスまたは関連するプロキシに関連付けられているセキュリティグループに設定されている必要があります。
-
構成にプロキシが含まれる場合、データベースに関連付けられたプロキシにアタッチされたセキュリティグループの名前は、パターン
rdsproxy-lambda-
(n
は数字) と一致します。n
-
関数に関連付けられているセキュリティグループに、DB インスタンスまたは該当するプロキシが使用するポートにポート範囲が設定されたアウトバウンドルールがあります。デスティネーションは、DB インスタンスまたは関連するプロキシに関連付けられているセキュリティグループに設定されている必要があります。
DB インスタンスに自動的に接続されたコンピューティングリソースを表示するには
AWS Management Console にサインインし、Amazon RDS コンソール https://console.aws.amazon.com/rds/
を開きます。 -
ナビゲーションペインで、[データベース] を選択し、DB クラスターを選択します。
-
[接続とセキュリティ] タブの [接続されたコンピューティングリソース] にコンピューティングリソースが表示されます。