Lambda 関数とマルチ AZ DB クラスターを自動的に接続する - Amazon Relational Database Service

Lambda 関数とマルチ AZ DB クラスターを自動的に接続する

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

次の画像は、マルチ AZ DB クラスターと Lambda 関数の間の直接接続を示しています。

マルチ AZ DB クラスターと Lambda 関数を自動的に接続します。

Lambda 関数とデータベース間の RDS プロキシ経由の接続を設定して、データベースのパフォーマンスと耐障害性を改善できます。多くの場合、Lambda 関数は短いデータベース接続を頻繁に行い、RDS プロキシが提供する接続プールを使用することで利点を得られます。データベース認証情報を Lambda アプリケーションコードで管理する代わりに、Lambda 関数に設定済みの IAM 認証を利用できます。詳細については、「Amazon RDS Proxy の使用」を参照してください。

コンソールを使用して、接続用のプロキシを自動的に作成できます。既存のプロキシを選択することもできます。コンソールはプロキシセキュリティグループを更新して、データベースと Lambda 関数からの接続を許可します。データベースの認証情報を入力するか、データベースへのアクセスに必要な Secrets Manager シークレットを選択できます。

マルチ AZ DB クラスターと Lambda 関数を RDS プロキシ経由で自動的に接続します。

Lambda 関数との自動接続の概要

Lambda 関数とマルチ AZ DB クラスター間の自動接続をセットアップすると、Amazon RDS は、Lambda 関数と DB クラスター の VPC セキュリティグループを設定します。

Lambda 関数とマルチ AZ DB クラスターを接続するための要件は次のとおりです。

  • Lambda 関数は、マルチ AZ DB クラスターと同じ VPC に存在する必要があります。

    同じ VPC に Lambda 関数が存在しない場合、コンソールには Lambda 関数を作成するためのリンクが表示されます。

  • 接続を設定するユーザーには、以下の 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

      • sercetsmanager:CreateSecret

      • secretsmanager:DescribeSecret

    • IAM

      • iam:AttachPolicy

      • iam:CreateRole

      • iam:CreatePolicy

    • AWS KMS

      • kms:describeKey

Lambda 関数とマルチ AZ DB クラスター間の接続をセットアップすると、Amazon RDS は、Lambda 関数とマルチ AZ DB クラスター の VPC セキュリティグループを設定します。RDS プロキシを使用する場合、Amazon RDS はプロキシの VPC セキュリティグループも設定します。Amazon RDS は、次の表で説明されているように、マルチ AZ DB クラスター、Lambda 関数、およびプロキシに関連付けられたセキュリティグループの現在の設定に従って動作します。

現在の RDS セキュリティグループの設定 現在の Lambda セキュリティグループ設定 現在のプロキシセキュリティグループ設定 RDS アクション

すべてのリソースのセキュリティグループは正しい命名パターンに従い、適切なインバウンドルールとアウトバウンドルールを持っているため、Amazon RDS は何もしません。

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

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

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

パターンに一致するセキュリティグループは変更されていません。このセキュリティグループには、マルチ AZ DB クラスターまたはプロキシの VPC セキュリティグループをデスティネーションとするアウトバウンドルールが 1 つのみ存在します。

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

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

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

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

  • マルチ AZ DB クラスターに関連付けられ、パターン rds-lambda-n に一致する名前を持つセキュリティグループはありません (または関連するプロキシの 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 は、これらのセキュリティグループをルチ AZ DB クラスターとの接続に使用できません。

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

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

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

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

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

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

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

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

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

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

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

RDS action: create new security groups

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

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

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

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

RDS action: associate Lambda security group

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

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

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

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

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

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

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

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

RDS action: create new security groups

マルチ AZ DB クラスターに関連付けられ、パターン rds-rdsproxy-n (n は数字) に一致する名前を持つのセキュリティグループが 1 つ以上あります。

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

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

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

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

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

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

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

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

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

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

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

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

RDS アクション: Lambda セキュリティグループを関連付ける

Amazon RDS は、有効な既存の Lambda セキュリティグループを Lambda 関数に関連付けます。このセキュリティグループは、関数がマルチ AZ DB クラスター にトラフィックを送信するか、プロキシ経由でトラフィックを送信することを許可します。

Lambda 関数とマルチ AZ DB クラスターを自動的に接続する

Amazon RDS コンソールを使用して、Lambda 関数をマルチ AZ DB クラスターに自動的に接続することができます。これにより、これらのリソース間の接続を設定するプロセスが簡単になります。

RDS プロキシを使用して、接続にプロキシを含めることもできます。Lambda 関数は短いデータベース接続を頻繁に行うため、RDS プロキシが提供する接続プールを使用することで利点を得られます。Lambda アプリケーションコードでデータベース認証情報を管理する代わりに、Lambda 関数用に設定済みの IAM 認証を使用することもできます。

[Lambda 接続の設定] ページを使用して、既存のマルチ AZ DB クラスターを新規および既存の Lambda 関数に接続できます。セットアッププロセスでは、必要なセキュリティグループが自動的にセットアップされます。

Lambda 関数とマルチ AZ DB クラスターの間の接続を設定する前に、次のことを確認してください。

  • Lambda 関数とマルチ AZ DB クラスターが同じ VPC にあります。

  • ユーザーアカウントに適切なアクセス許可があります。要件の詳細については、「Lambda 関数との自動接続の概要」を参照してください。

接続の設定後にセキュリティグループを変更すると、Lambda 関数とマルチ AZ DB クラスターとの接続に影響する可能性があります。

注記

AWS Management Console でのみ、マルチ AZ DB クラスターと Lambda 関数の間の接続を自動的に設定できます。Lambda 関数を接続するには、マルチ AZ DB クラスターのすべてのインスタンスが使用可能状態である必要があります。

Lambda 関数とマルチ AZ DB クラスターを自動的に接続するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

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

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

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

    • マルチ AZ DB クラスターと同じ VPC に既存の Lambda 関数がある場合は、[既存の関数を選択] を選択し、関数を選択します。

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

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

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

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

      1. [データベースのユーザー名とパスワード] を選択し、マルチ AZ DB クラスターの [ユーザー名] と [パスワード] を入力します。

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

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

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

  7. [Set up (セットアップ)] を選択します。

接続中のコンピューティングリソースを表示する

AWS Management Console を使用して、マルチ AZ DB クラスターに接続されているコンピューティングリソースを表示できます。表示されるリソースには、Amazon RDS が自動的に設定したコンピューティングリソース接続が含まれます。

一覧表示されるコンピューティングリソースには、マルチ AZ DB クラスターに手動で接続されたリソースは含まれていません。例えば、クラスターに関連付けられた VPC セキュリティグループにルールを追加することで、コンピューティングリソースがマルチ AZ DB クラスター に手動でアクセスするのを許可できます。

コンソールに Lambda 関数を一覧表示するには、以下の条件が適用される必要があります。

  • コンピューティングリソースに関連付けられているセキュリティグループの名前がパターン lambda-rds-n または lambda-rdsproxy-n (n は数字) と一致します。

  • コンピューティングリソースに関連付けられているセキュリティグループに、マルチ AZ DB クラスターまたは該当するプロキシが使用するポートにポート範囲が設定されたアウトバウンドルールがあります。アウトバウンドルールのデスティネーションは、マルチ AZ DB クラスターまたは関連するプロキシに関連付けられているセキュリティグループに設定されている必要があります。

  • データベースに関連付けられたプロキシにアタッチされたセキュリティグループの名前は、パターン rds-rdsproxy-n (n は数字) と一致します。

  • 関数に関連付けられているセキュリティグループには、マルチ AZ DB クラスターまたは該当するプロキシが使用するポートにポート範囲が設定されたアウトバウンドルールがあります。デスティネーションは、マルチ AZ DB クラスターまたは関連するプロキシに関連付けられているセキュリティグループに設定されている必要があります。

マルチ AZ DB クラスターに自動的に接続されたコンピューティングリソースを表示するには
  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

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

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