

# Lambda 関数と DB インスタンスを自動的に接続する
<a name="lambda-rds-connect"></a>

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

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

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

![\[DB インスタンスを Lambda 関数に自動的に接続する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/auto-connect-rds-lambda.png)


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

コンソールを使用して既存のプロキシに接続すると、Amazon RDS は、DB インスタンスと Lambda 関数からの接続を許可するように、プロキシセキュリティグループを更新します。

同じコンソールページから新しいプロキシを作成することもできます。コンソールでプロキシを作成するときに、DB インスタンスにアクセスするには、データベースの認証情報を入力するか、AWS Secrets Manager シークレットを選択する必要があります。

![\[DB インスタンスを Lambda 関数に RDS プロキシ経由で自動的に接続する\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/auto-connect-rds-lambda-Proxy.png)


**ヒント**  
Lambda 関数を DB インスタンスにすばやく接続するには、コンソール内のガイド付きウィザードを使用することもできます。ウィザードを開くには、次の操作を行います。  
Lambda コンソールの [[関数]](https://console.aws.amazon.com/lambda/home#/functions) ページを開きます。
データベースを接続する関数を選択します。
**[設定]** タブで **[RDS データベース]** を選択します。
**[RDS データベースに接続]** を選択します。
関数をデータベースに接続したら、**[プロキシの追加]** を選択してプロキシを作成できます。

**Topics**
+ [Lambda 関数との自動接続の概要](#lambda-rds-connect-overview)
+ [Lambda 関数と RDS データベース を自動的に接続する](#lambda-rds-connect-connecting)
+ [接続中のコンピューティングリソースを表示する](#lambda-rds-connect-viewing)

## Lambda 関数との自動接続の概要
<a name="lambda-rds-connect-overview"></a>

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 インスタンス間の接続は既に自動的に設定されています。関数、プロキシ、およびデータベースの間には既に接続が存在するため、セキュリティグループは変更されません。  | 
|  次の条件のいずれかが適用されます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/lambda-rds-connect.html) Amazon RDS は、Lambda 関数またはプロキシの VPC セキュリティグループをソースとするインバウンドルールが 1 つも存在しないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。変更の例としては、ルールの追加や、既存ルールのポート変更などがあります。  |  次の条件のいずれかが適用されます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/lambda-rds-connect.html) Amazon RDS は、DB インスタンスまたはプロキシの VPC セキュリティグループをデスティネーションとするアウトバウンドルールが 1 つもないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。  | 次の条件のいずれかが適用されます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/lambda-rds-connect.html)Amazon RDS は、DB インスタンスおよび Lambda 関数の VPC セキュリティグループに関するインバウンドルールとアウトバウンドルールがないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。 |  [RDS action: create new security groups](#rds-lam-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](#rds-lam-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](#rds-lam-action-associate-lam-security-group)  | 
|  次の条件のいずれかが適用されます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/lambda-rds-connect.html) 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](#rds-lam-action-create-new-security-groups) | 
|  次の条件のいずれかが適用されます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/lambda-rds-connect.html) Amazon RDS は、Lambda 関数またはプロキシの VPC セキュリティグループをソースとするインバウンドルールが 1 つも存在しないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。  |  次の条件のいずれかが適用されます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/lambda-rds-connect.html) Amazon RDS は、DB インスタンスまたはプロキシの VPC セキュリティグループをソースとするアウトバウンドルールが 1 つもないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。  | 次の条件のいずれかが適用されます。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/lambda-rds-connect.html)Amazon RDS は、DB インスタンスおよび Lambda 関数の VPC セキュリティグループに関するインバウンドルールとアウトバウンドルールがないセキュリティグループを使用できません。また、Amazon RDS は、変更されたセキュリティグループを使用できません。 | [RDS action: create new security groups](#rds-lam-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 データベース を自動的に接続する
<a name="lambda-rds-connect-connecting"></a>

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

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

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

Lambda 関数と DB インスタンスの間の接続を設定する前に、次のことを確認してください。
+ Lambda 関数と DB インスタンスが同じ VPC にあります。
+ ユーザーアカウントに適切なアクセス許可があります。要件の詳細については、「[Lambda 関数との自動接続の概要](#lambda-rds-connect-overview)」を参照してください。

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

**注記**  
AWS マネジメントコンソール でのみ、DB インスタンスと Lambda 関数の間の接続を自動的に設定できます。Lambda 関数を接続するには、DB インスタンスが**使用可能**状態である必要があります。

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

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

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

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

1. **[Lambda 接続の設定]** ページの **[Lambda 関数の選択]** で、次のいずれかを実行します。
   + DB インスタンスと同じ VPC に既存の Lambda 関数がある場合は、**[既存の関数を選択]** を選択し、関数を選択します。
   + 同じ VPC に Lambda 関数がない場合は、**[新しい関数を作成]** を選択し、**[関数名]** を入力します。デフォルトのランタイムは Nodejs.18 に設定されています。接続設定が完了した後、Lambda コンソールで新しい Lambda 関数の設定を変更できます。

1. (オプション) **[RDS プロキシ]** で、**[RDS プロキシを使用して接続]** を選択し、次のいずれかを実行します。
   + 使用する既存のプロキシがある場合は、**[既存のプロキシを選択]** を選択し、プロキシを選択します。
   + プロキシがなく、Amazon RDS にプロキシを自動的に作成させる場合は、**[新しいプロキシの作成]** を選択します。次に、**[データベース認証情報]** として、次のいずれかを実行します。

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

     1. **[Secrets Manager シークレット]** を選択します。次に、**[シークレットを選択]** で、AWS Secrets Manager シークレットを選択します。Secrets Manager シークレットがない場合は、**[新しい Secrets Manager シークレットを作成]** を選択して、[新しいシークレットを作成](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)します。シークレットを作成した後、**[シークレットを選択]** で、新しいシークレットを選択します。

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

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

1. **[設定]** を選択します。

設定を確認すると、Amazon RDS は、Lambda 関数、RDS プロキシ (プロキシを使用した場合)、および DB インスタンスの接続プロセスを開始します。コンソールに **[接続の詳細]** ダイアログボックスが表示され、リソース間の接続を許可するセキュリティグループの変更が一覧表示されます。

## 接続中のコンピューティングリソースを表示する
<a name="lambda-rds-connect-viewing"></a>

AWS マネジメントコンソール を使用して、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 マネジメントコンソール にサインインし、Amazon RDS コンソール ([https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)) を開きます。

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

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