Lambda 関数と DB インスタンスを自動的に接続する - Amazon Relational Database Service

Lambda 関数と DB インスタンスを自動的に接続する

Amazon RDS コンソールを使用すると、Lambda 関数と DB インスタンスとの接続を簡単に設定できます。多くの場合、DB インスタンスは VPC 内のプライベートサブネットにあります。アプリケーションで Lambda 関数を使用すると、プライベート DB インスタンスにアクセスできます。

Lambda 関数とマルチ AZ DB クラスター間の接続をセットアップする方法については、「Lambda 関数とマルチ AZ DB クラスターを自動的に接続する」を参照してください。

次の画像は、DB インスタンスと Lambda 関数の間の直接接続を示しています。

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 シークレットを選択する必要があります。

DB インスタンスを Lambda 関数に RDS プロキシ経由で自動的に接続する

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 つ以上のセキュリティグループが関連付けられ、その名前は、パターン rds-lambda-n に一致します。または、プロキシが既に DB インスタンスに接続している場合、RDS は関連するプロキシの TargetHealth が AVAILABLE であるかどうかを確認します。

パターンに一致するセキュリティグループは変更されていません。このセキュリティグループには、Lambda 関数またはプロキシの VPC セキュリティグループをソースとするインバウンドルールが 1 つのみ存在します。

Lambda 関数に関連付けられたセキュリティグループが 1 つ以上あり、その名前はパターン lambda-rds-n または lambda-rdsproxy-n (n は数字) に一致します。

パターンに一致するセキュリティグループは変更されていません。このセキュリティグループには、DB インスタンスまたはプロキシのいずれかの VPC セキュリティグループをデスティネーションとするアウトバウンドルールが 1 つだけあります。

プロキシに関連付けられたセキュリティグループが 1 つ以上あり、その名前はパターン rdsproxy-lambda-n (n は数字) に一致します。

パターンに一致するセキュリティグループは変更されていません。このセキュリティグループには、Lambda 関数と DB インスタンス の VPC セキュリティグループに関するインバウンドルールとアウトバウンドルールがあります。

Amazon RDS は何もしません。

Lambda 関数、プロキシ (オプション)、および DB インスタンス間の接続は既に自動的に設定されています。関数、プロキシ、およびデータベースの間には既に接続が存在するため、セキュリティグループは変更されません。

次の条件のいずれかが適用されます。

  • DB インスタンスに関連付けられ、パターン rds-lambda-n に一致する名前を持つセキュリティグループはありません (または関連するプロキシの TargetHealth が AVAILABLE の場合)。

  • DB インスタンスに関連付けられ、パターン rds-lambda-n に一致する名前を持つ 1 つ以上のセキュリティグループがあります (または関連するプロキシの TargetHealth が AVAILABLE の場合)。ただし、これらのセキュリティグループは、いずれも Lambda 関数との接続には使用できません。

Amazon RDS は、Lambda 関数またはプロキシの VPC セキュリティグループをソースとするインバウンドルールが 1 つも存在しないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。変更の例としては、ルールの追加や、既存ルールのポート変更などがあります。

次の条件のいずれかが適用されます。

  • Lambda 関数に関連付けられ、パターン lambda-rds-n または lambda-rdsproxy-n に一致する名前のセキュリティグループはありません。

  • Lambda 関数に関連付けられたセキュリティグループが 1 つ以上あり、その名前はパターン lambda-rds-n または lambda-rdsproxy-n に一致します。ただし、Amazon RDS は、これらのセキュリティグループのいずれも、DB インスタンスとの接続には使用できません。

Amazon RDS は、DB インスタンスまたはプロキシの VPC セキュリティグループをデスティネーションとするアウトバウンドルールが 1 つもないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。

次の条件のいずれかが適用されます。

  • プロキシに関連付けられ、パターン rdsproxy-lambda-n に一致する名前のセキュリティグループはありません。

  • プロキシに関連付けられ、パターン rdsproxy-lambda-n に一致する名前のセキュリティグループが 1 つ以上あります。ただし、Amazon RDS は、これらのセキュリティグループのいずれも、DB インスタンスまたは Lambda 関数との接続には使用できません。

Amazon RDS は、DB インスタンスおよび Lambda 関数の VPC セキュリティグループに関するインバウンドルールとアウトバウンドルールがないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。
RDS action: create new security groups

DB インスタンスに関連付けられ、パターン rds-lambda-n に一致する名前を持つ 1 つ以上のセキュリティグループがあります (または関連するプロキシの TargetHealth が AVAILABLE の場合)。

パターンに一致するセキュリティグループは変更されていません。このセキュリティグループには、Lambda 関数またはプロキシの VPC セキュリティグループをソースとするインバウンドルールが 1 つのみ存在します。

Lambda 関数に関連付けられたセキュリティグループが 1 つ以上あり、その名前はパターン lambda-rds-n または lambda-rdsproxy-n に一致します。

ただし、Amazon RDS は、これらのセキュリティグループのいずれも、DB インスタンスとの接続には使用できません。Amazon RDS は、DB インスタンスまたはプロキシの VPC セキュリティグループをデスティネーションとするアウトバウンドルールが 1 つもないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。

プロキシに関連付けられ、パターン rdsproxy-lambda-n に一致する名前のセキュリティグループが 1 つ以上あります。

ただし、Amazon RDS は、これらのセキュリティグループのいずれも、DB インスタンスまたは Lambda 関数との接続には使用できません。Amazon RDS は、DB インスタンスおよび Lambda 関数の VPC セキュリティグループに関するインバウンドルールとアウトバウンドルールがないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。

RDS action: create new security groups

DB インスタンスに関連付けられ、パターン rds-lambda-n に一致する名前を持つ 1 つ以上のセキュリティグループがあります (または関連するプロキシの TargetHealth が AVAILABLE の場合)。

パターンに一致するセキュリティグループは変更されていません。このセキュリティグループには、Lambda 関数またはプロキシの VPC セキュリティグループをソースとするインバウンドルールが 1 つのみ存在します。

接続用の有効な Lambda セキュリティグループが存在しますが、Lambda 関数に関連付けられていません。このセキュリティグループには、パターン lambda-rds-n または lambda-rdsproxy-n に一致する名前が付いています。これは変更されていません。DB インスタンスまたはプロキシの VPC セキュリティグループをデスティネーションとするアウトバウンドルールが 1 つだけあります。

接続に有効なプロキシセキュリティグループは存在しますが、プロキシに関連付けられていません。このセキュリティグループには、パターン rdsproxy-lambda-n に一致する名前が付いています。これは変更されていません。DB インスタンスおよび Lambda 関数の VPC セキュリティグループに関するインバウンドルールとアウトバウンドルールがあります。

RDS action: associate Lambda security group

次の条件のいずれかが適用されます。

  • DB インスタンスに関連付けられ、パターン rds-lambda-n に一致する名前を持つセキュリティグループはありません (または関連するプロキシの TargetHealth が AVAILABLE の場合)。

  • DB インスタンスに関連付けられ、パターン rds-lambda-n に一致する名前を持つ 1 つ以上のセキュリティグループがあります (または関連するプロキシの TargetHealth が AVAILABLE の場合)。ただし、Amazon RDS は、これらのセキュリティグループを Lambda 関数またはプロキシとの接続に使用できません。

Amazon RDS は、Lambda 関数またはプロキシの VPC セキュリティグループをソースとするインバウンドルールが 1 つも存在しないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。

Lambda 関数に関連付けられたセキュリティグループが 1 つ以上あり、その名前はパターン lambda-rds-n または lambda-rdsproxy-n に一致します。

パターンに一致するセキュリティグループは変更されていません。このセキュリティグループには、DB インスタンスまたはプロキシの VPC セキュリティグループをデスティネーションとするアウトバウンドルールが 1 つだけあります。

プロキシに関連付けられ、パターン rdsproxy-lambda-n に一致する名前のセキュリティグループが 1 つ以上あります。

パターンに一致するセキュリティグループは変更されていません。このセキュリティグループには、DB インスタンスおよび Lambda 関数の VPC セキュリティグループに関するインバウンドルールとアウトバウンドルールがあります。

RDS action: create new security groups

次の条件のいずれかが適用されます。

  • DB インスタンスに関連付けられ、パターン rds-lambda-n に一致する名前を持つセキュリティグループはありません (または関連するプロキシの TargetHealth が AVAILABLE の場合)。

  • DB インスタンスに関連付けられ、パターン rds-lambda-n に一致する名前を持つ 1 つ以上のセキュリティグループがあります (または関連するプロキシの TargetHealth が AVAILABLE の場合)。ただし、Amazon RDS は、これらのセキュリティグループを Lambda 関数またはプロキシとの接続に使用できません。

Amazon RDS は、Lambda 関数またはプロキシの VPC セキュリティグループをソースとするインバウンドルールが 1 つも存在しないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。

次の条件のいずれかが適用されます。

  • Lambda 関数に関連付けられ、パターン lambda-rds-n または lambda-rdsproxy-n に一致する名前のセキュリティグループはありません。

  • Lambda 関数に関連付けられたセキュリティグループが 1 つ以上あり、その名前はパターン lambda-rds-n または lambda-rdsproxy-n に一致します。ただし、Amazon RDS は、これらのセキュリティグループを DB インスタンスとの接続に使用できません。

Amazon RDS は、DB インスタンスまたはプロキシの VPC セキュリティグループをソースとするアウトバウンドルールが 1 つもないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。

次の条件のいずれかが適用されます。

  • プロキシに関連付けられ、パターン rdsproxy-lambda-n に一致する名前のセキュリティグループはありません。

  • プロキシに関連付けられ、パターン rdsproxy-lambda-n に一致する名前のセキュリティグループが 1 つ以上あります。ただし、Amazon RDS は、これらのセキュリティグループを DB インスタンスまたは Lambda 関数との接続に使用することはできません。

Amazon RDS は、DB インスタンスおよび Lambda 関数の VPC セキュリティグループに関するインバウンドルールとアウトバウンドルールがないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。
RDS action: create new security groups
RDS アクション: 新しいセキュリティグループを作成する

Amazon RDS は以下のアクションを実行します。

  • パターン rds-lambda-n または rds-rdsproxy-n (RDS プロキシを使用する場合) に一致する新しいセキュリティグループを作成します。このセキュリティグループには、Lambda 関数またはプロキシの VPC セキュリティグループをソースとするインバウンドルールがあります。このセキュリティグループは、DB インスタンスに関連付けられ、関数またはプロキシが DB インスタンスにアクセスすることを許可します。

  • パターン lambda-rds-n または lambda-rdsproxy-n に一致する新しいセキュリティグループを作成します。このセキュリティグループには、DB インスタンスまたはプロキシの VPC セキュリティグループをデスティネーションとするアウトバウンドルールがあります。このセキュリティグループは Lambda 関数に関連付けられ、関数が DB インスタンス にトラフィックを送信するか、プロキシ経由でトラフィックを送信することを許可します。

  • パターン rdsproxy-lambda-n に一致する新しいセキュリティグループを作成します。このセキュリティグループには、DB インスタンスおよび Lambda 関数の VPC セキュリティグループに関するインバウンドルールとアウトバウンドルールがあります。

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 インスタンスを自動的に接続するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[データベース] を選択し、Lambda 関数に接続するDB インスタンスを選択します。

  3. [アクション] として、[Lambda 接続の設定] を選択します。

  4. [Lambda 接続の設定] ページの [Lambda 関数の選択] で、次のいずれかを実行します。

    • DB インスタンスと同じ VPC に既存の Lambda 関数がある場合は、[既存の関数を選択] を選択し、関数を選択します。

    • 同じ VPC に Lambda 関数がない場合は、[新しい関数を作成] を選択し、[関数名] を入力します。デフォルトのランタイムは Nodejs.18 に設定されています。接続設定が完了した後、Lambda コンソールで新しい Lambda 関数の設定を変更できます。

  5. (オプション) [RDS プロキシ] で、[RDS プロキシを使用して接続] を選択し、次のいずれかを実行します。

    • 使用する既存のプロキシがある場合は、[既存のプロキシを選択] を選択し、プロキシを選択します。

    • プロキシがなく、Amazon RDS にプロキシを自動的に作成させる場合は、[新しいプロキシの作成] を選択します。次に、[データベース認証情報] として、次のいずれかを実行します。

      1. [データベースのユーザー名とパスワード] を選択し、DB インスタンスの [ユーザー名] と [パスワード] を入力します。

      2. [Secrets Manager シークレット] を選択します。次に、[シークレットを選択] で、AWS Secrets Manager シークレットを選択します。Secrets Manager シークレットがない場合は、[新しい Secrets Manager シークレットを作成] を選択して、新しいシークレットを作成します。シークレットを作成した後、[シークレットを選択] で、新しいシークレットを選択します。

      新しいプロキシを作成した後、[既存のプロキシを選択] を選択し、プロキシを選択します。プロキシが接続可能になるまでに時間がかかる場合があることに注意してください。

  6. (オプション) [接続の概要] を展開し、強調表示されているリソースの最新情報を確認します。

  7. [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 インスタンスに自動的に接続されたコンピューティングリソースを表示するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[データベース] を選択し、DB クラスターを選択します。

  3. [接続とセキュリティ] タブの [接続されたコンピューティングリソース] にコンピューティングリソースが表示されます。