

# 自动连接 Lambda 函数和Aurora 数据库集群
<a name="lambda-rds-connect"></a>

您可以使用 Amazon RDS 控制台来简化在 Lambda 函数和 Aurora 数据库集群之间设置连接的过程。通常，您的数据库集群位于 VPC 内的私有子网中。应用程序可以使用 Lambda 函数访问您的私有数据库集群。



下图显示了数据库集群与您的 Lambda 函数之间的直接连接。

![\[自动连接 Aurora 数据库集群和 Lambda 函数\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/images/auto-connect-aurora-lambda.png)


您可以通过 RDS 代理在 Lambda 函数和数据库集群之间设置连接，以提高数据库性能和弹性。通常，Lambda 函数会进行频繁的短期数据库连接，此类连接受益于 RDS 代理提供的连接池。您可以利用已为 Lambda 函数提供的任何 AWS Identity and Access Management（IAM）身份验证，而不是在 Lambda 应用程序代码中管理数据库凭证。有关更多信息，请参阅 [适用于 Aurora 的Amazon RDS 代理](rds-proxy.md)。

当您使用控制台通过现有代理进行连接时，Amazon RDS 会更新代理安全组，以允许来自数据库集群和 Lambda 函数的连接。

您也可以从同一个控制台页面创建新的代理。当您在控制台中创建代理时，要访问数据库集群，必须输入数据库凭证或选择 AWS Secrets Manager 密钥。

![\[通过 RDS 代理自动连接 Aurora 数据库集群和 Lambda 函数\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/images/auto-connect-aurora-lambda-Proxy.png)


**提示**  
要将 Lambda 函数快速连接到Aurora 数据库集群，还可以使用控制台内的引导式向导。要打开该向导，请执行以下操作：  
打开 Lamba 控制台的[函数](https://console.aws.amazon.com/lambda/home#/functions)页面。
选择要将数据库连接到其中的函数。
在**配置**选项卡上，选择 **RDS 数据库**。
选择**连接到 RDS 数据库**。
将函数连接到数据库后，您可以通过选择**添加代理**来创建代理。

**Topics**
+ [

## 与 Lambda 函数的自动连接概述
](#lambda-rds-connect-overview)
+ [

## 自动连接 Lambda 函数和 Aurora 数据库集群
](#lambda-rds-connect-connecting)
+ [

## 查看连接的计算资源
](#lambda-rds-connect-viewing)

## 与 Lambda 函数的自动连接概述
<a name="lambda-rds-connect-overview"></a>

以下是将 Lambda 函数与 Aurora 数据库集群连接的要求：
+ Lambda 函数必须与数据库集群位于同一 VPC 中。
+ 目前，数据库集群不能是 Aurora Serverless 数据库集群，也不能是 Aurora Global Database 的一部分。
+ 设置连接的用户必须具有执行以下 Amazon RDS、Amazon EC2、Lambda、Secrets Manager 和 IAM 操作的权限：
  + Amazon RDS
    + `rds:CreateDBProxies`
    + `rds:DescribeDBClusters`
    + `rds:DescribeDBProxies`
    + `rds:ModifyDBCluster`
    + `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`

**注意**  
如果数据库集群与 Lambda 函数位于不同的可用区，您的账户可能会产生跨可用区成本。

当您在 Lambda 函数和 Aurora 数据库集群之间设置连接时，Amazon RDS 会为您的函数和数据库集群配置 VPC 安全组。如果您使用 RDS 代理，则 Amazon RDS 还会为代理配置 VPC 安全组。Amazon RDS 根据与数据库集群、Lambda 函数和代理关联的安全组的当前配置执行操作，如下表所述。


| 当前 RDS 安全组配置 | 当前 Lambda 安全组配置 | 当前代理安全组配置 | RDS 操作 | 
| --- | --- | --- | --- | 
|  有一个或多个安全组与数据库集群关联，其名称与模式 `rds-lambda-n` 匹配，或者，如果代理已连接到您的数据库集群，则 RDS 将检查关联代理的 `TargetHealth` 是否为 `AVAILABLE`。 尚未修改与此模式匹配的安全组。该安全组只具有一条以 Lambda 函数或代理的 VPC 安全组作为源的入站规则。  |  有一个或多个安全组与 Lambda 函数关联，此函数的名称与模式 `lambda-rds-n` 或 `lambda-rdsproxy-n`（其中 `n` 是数字）相匹配。 尚未修改与此模式匹配的安全组。此安全组只有一条出站规则，此规则以数据库集群或代理的 VPC 安全组作为目标。  |  有一个或多个安全组与代理关联，此代理的名称与模式 `rdsproxy-lambda-n`（其中 `n` 是数字）相匹配。 尚未修改与此模式匹配的安全组。此安全组具有入站和出站规则，这些规则具有 Lambda 函数和数据库集群的 VPC 安全组。  |  Amazon RDS 不执行任何操作。 已在 Lambda 函数、代理（可选）和数据库集群之间自动配置了连接。由于函数、代理和数据库之间已经存在连接，因此不会修改安全组。  | 
|  以下任一条件适用： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/lambda-rds-connect.html) 如果安全组没有一条以 Lambda 函数或代理的 VPC 安全组作为源的入站规则，则 Amazon RDS 无法使用该安全组。Amazon RDS 也无法使用经过修改的安全组。修改示例包括添加规则或更改现有规则的端口。  |  以下任一条件适用： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/lambda-rds-connect.html) 如果安全组没有一条以数据库集群或代理的 VPC 安全组作为目标的出站规则，则 Amazon RDS 无法使用该安全组。Amazon RDS 也无法使用经过修改的安全组。  | 以下任一条件适用：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/lambda-rds-connect.html)如果安全组没有入站和出站规则（这些规则具有数据库集群和 Lambda 函数的 VPC 安全组），则 Amazon RDS 无法使用该安全组。Amazon RDS 也无法使用经过修改的安全组。 |  [RDS action: create new security groups](#rds-lam-action-create-new-security-groups) | 
|  有一个或多个与数据库集群（名称与模式 `rds-lambda-n` 匹配或关联代理的 `TargetHealth` 为 `AVAILABLE`）相关联的安全组。 尚未修改与此模式匹配的安全组。该安全组只具有一条以 Lambda 函数或代理的 VPC 安全组作为源的入站规则。  |  有一个或多个安全组与 Lambda 函数关联，此函数的名称与模式 `lambda-rds-n` 或 `lambda-rdsproxy-n` 相匹配。 但是，Amazon RDS 不能使用这些安全组中的任何一个来连接数据库集群。如果安全组没有一条以数据库集群或代理的 VPC 安全组作为目标的出站规则，则 Amazon RDS 无法使用该安全组。Amazon RDS 也无法使用经过修改的安全组。  |  有一个或多个安全组与代理关联，此代理的名称与模式 `rdsproxy-lambda-n` 相匹配。 但是，Amazon RDS 不能使用这些安全组中的任何一个来连接数据库集群或 Lambda 函数。如果安全组没有入站和出站规则（这些规则具有数据库集群和 Lambda 函数的 VPC 安全组），则 Amazon RDS 无法使用该安全组。Amazon RDS 也无法使用经过修改的安全组。  |  [RDS action: create new security groups](#rds-lam-action-create-new-security-groups) | 
|  有一个或多个与数据库集群（名称与模式 `rds-lambda-n` 匹配或关联代理的 `TargetHealth` 为 `AVAILABLE`）相关联的安全组。 尚未修改与此模式匹配的安全组。该安全组只具有一条以 Lambda 函数或代理的 VPC 安全组作为源的入站规则。  |  存在用于连接的有效 Lambda 安全组，但它与 Lambda 函数不关联。此安全组的名称与模式 `lambda-rds-n` 或 `lambda-rdsproxy-n` 相匹配。尚未修改它。它只有一条出站规则，此规则以数据库集群或代理的 VPC 安全组作为目标。  |  存在用于连接的有效代理安全组，但它与代理不关联。此安全组的名称与模式 `rdsproxy-lambda-n` 相匹配。尚未修改它。它具有入站和出站规则，这些规则具有数据库集群和 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/zh_cn/AmazonRDS/latest/AuroraUserGuide/lambda-rds-connect.html) 如果安全组没有一条以 Lambda 函数或代理的 VPC 安全组作为源的入站规则，则 Amazon RDS 无法使用该安全组。Amazon RDS 也无法使用经过修改的安全组。  |  有一个或多个安全组与 Lambda 函数关联，此函数的名称与模式 `lambda-rds-n` 或 `lambda-rdsproxy-n` 相匹配。 尚未修改与此模式匹配的安全组。此安全组只有一条出站规则，此规则以数据库集群或代理的 VPC 安全组作为目标。  |  有一个或多个安全组与代理关联，此代理的名称与模式 `rdsproxy-lambda-n` 相匹配。 尚未修改与此模式匹配的安全组。此安全组具有入站和出站规则，这些规则具有数据库集群和 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/zh_cn/AmazonRDS/latest/AuroraUserGuide/lambda-rds-connect.html) 如果安全组没有一条以 Lambda 函数或代理的 VPC 安全组作为源的入站规则，则 Amazon RDS 无法使用该安全组。Amazon RDS 也无法使用经过修改的安全组。  |  以下任一条件适用： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/lambda-rds-connect.html) 如果安全组没有一条以数据库集群或代理的 VPC 安全组作为源的出站规则，则 Amazon RDS 无法使用该安全组。Amazon RDS 也无法使用经过修改的安全组。  | 以下任一条件适用：[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/lambda-rds-connect.html)如果安全组没有入站和出站规则（这些规则具有数据库集群和 Lambda 函数的 VPC 安全组），则 Amazon RDS 无法使用该安全组。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 安全组作为源的入站规则。该安全组与数据库集群相关联，并允许函数或代理访问数据库集群。
+ 创建与模式 `lambda-rds-n` 或 `lambda-rdsproxy-n` 匹配的新安全组。此安全组具有一条出站规则，此规则以数据库集群或代理的 VPC 安全组作为目标。此安全组与 Lambda 函数相关联，并允许该函数将流量发送到数据库集群或者通过代理发送流量。
+ 创建与模式 `rdsproxy-lambda-n` 匹配的新安全组。此安全组具有入站和出站规则，这些规则具有数据库集群和 Lambda 函数的 VPC 安全组。

**RDS 操作：关联 Lambda 安全组**  
Amazon RDS 将有效的现有的 Lambda 安全组与 Lambda 函数关联。此安全组允许该函数将流量发送到数据库集群或者通过代理发送流量。

## 自动连接 Lambda 函数和 Aurora 数据库集群
<a name="lambda-rds-connect-connecting"></a>

您可以使用 Amazon RDS 控制台自动将 Lambda 函数连接到您的数据库集群。这简化了在这些资源之间设置连接的过程。

您也可以使用 RDS 代理在连接中包含代理。Lambda 函数会进行频繁的短期数据库连接，此类连接受益于 RDS 代理提供的连接池。您还可以使用已经为 Lambda 函数设置的任何 IAM 身份验证，而不是在 Lambda 应用程序代码中管理数据库凭证。

您可以使用**设置 Lambda 连接**页面将现有的数据库集群连接到新的和现有的 Lambda 函数。设置过程会自动为您设置所需的安全组。

在 Lambda 函数和数据库集群之间设置连接之前，请确保：
+ 您的 Lambda 函数和数据库集群位于同一 VPC 中。
+ 您拥有用户账户的相应权限。有关要求的更多信息，请参阅[与 Lambda 函数的自动连接概述](#lambda-rds-connect-overview)。

如果您在配置连接后更改安全组，则这些更改可能会影响 Lambda 函数与数据库集群之间的连接。

**注意**  
您只能在 AWS 管理控制台中自动设置数据库集群和 Lambda 函数之间的连接。要连接 Lambda 函数，数据库集群中的所有实例必须处于**可用**状态。

**自动连接 Lambda 函数和数据库集群**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**数据库**，然后选择要连接到 Lambda 函数的数据库集群。

1. 对于**操作**，选择**设置 Lambda 连接**。

1. 在**设置 Lambda 连接**页面上，在**选择 Lambda 函数**下方，执行以下任一操作：
   + 如果您在与数据库集群相同的 VPC 中有一个现有的 Lambda 函数，请选择**选择现有函数**，然后选择该函数。
   + 如果您在同一 VPC 中没有 Lambda 函数，请选择**创建新函数**，然后输入**函数名称**。默认运行时系统设置为 Nodejs.18。完成连接设置后，您可以在 Lambda 控制台中修改新 Lambda 函数的设置。

1. （可选）在 **RDS 代理**下，选择**使用 RDS 代理进行连接**，然后执行以下任一操作：
   + 如果您有要使用的现有代理，请选择**选择现有代理**，然后选择此代理。
   + 如果您没有代理，并且希望 Amazon RDS 自动为您创建代理，请选择**创建新代理**。然后，对于**数据库凭证**，执行以下任一操作：

     1. 选择**数据库用户名和密码**，然后为您的数据库集群输入**用户名**和**密码**。

     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 代理（如果您使用了代理）和数据库集群的过程。控制台显示**连接详细信息**对话框，其中列出了允许在您的资源之间进行连接的安全组更改。

## 查看连接的计算资源
<a name="lambda-rds-connect-viewing"></a>

您可以使用 AWS 管理控制台查看连接到数据库集群的 Lambda 函数。显示的资源包括 Amazon RDS 自动设置的计算资源连接。

列出的计算资源不包括手动连接到数据库集群的计算资源。例如，您可以通过向与数据库关联的 VPC 安全组添加规则，来允许计算资源手动访问数据库集群。

要使控制台列出 Lambda 函数，必须满足以下条件：
+ 与计算资源关联的安全组的名称与模式 `lambda-rds-n` 或 `lambda-rdsproxy-n`（其中 `n` 是数字）相匹配。
+ 与计算资源关联的安全组具有出站规则，其端口范围设置为数据库集群或关联代理的端口。出站规则的目标必须设置为与数据库集群或关联代理关联的安全组。
+ 如果配置包含代理，则连接到与您数据库关联的代理的安全组名称与模式 `rdsproxy-lambda-n`（其中 `n` 是一个数字）相匹配。
+ 与函数关联的安全组具有出站规则，其端口设置为数据库集群或关联代理使用的端口。目标必须设置为与数据库集群或关联代理关联的安全组。

**查看自动连接到数据库集群的计算资源**

1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择**数据库**，然后选择数据库实例。

1. 在**连接和安全**选项卡上，在**连接的计算资源**下查看计算资源。