如何配置 Lambda 函数以连接到 RDS 实例?

上次更新日期:2021 年 1 月 5 日

我希望我的 AWS Lambda 函数连接到 Relational Database Service (RDS) 实例。我该如何配置网络设置来做到这一点?

简短描述

要将 Lambda 函数连接到 RDS 实例,必须将每个函数上的联网配置设置为允许连接。

以下每种连接类型都有不同的配置设置:

同一个 Virtual Private Cloud (VPC) 中的 Lambda 函数和 RDS 实例 不同 VPC 中的 Lambda 函数和 RDS 实例 Lambda 函数和公有 RDS 实例

有关如何配置 Lambda 函数的网络设置的信息,请参阅使用 Lambda 控制台配置 VPC 访问 。要将 Lambda 函数连接到 Aurora 数据库集群,请使用 Aurora Serverless 的数据 API。

注意:如果网络设置不正确,则 Lambda 函数将超时并显示任务超时错误消息。

解决方法

重要提示:确保更改以下示例中提供的每个 Port Range(端口范围)、Source(源)和 Destination(目的地)设置,以匹配您自己的网络配置。传输控制协议 (TCP) 是每种类型的网络配置所需的协议。

同一 VPC 中的 Lambda 函数和 RDS 实例

将 Lambda 函数连接到同一 VPC 中的 RDS 实例时,请使用以下网络配置。

注意:默认情况下,VPC 内的所有子网都包含本地路由。目的地是 VPC 的无类域间路由 (CIDR),目标为本地。有关更多信息,请参阅路由表。

1.对于安全组,请使用以下网络设置之一:

对于附加到同一安全组的实例,请将安全组设为入站规则的源和出站规则的目的地。

例如,如果 Lambda 函数和 RDS 实例都在安全组 sg-abcd1234 中,则每个实例将具有以下入站和出站规则。

附加到同一安全组的实例的入站规则示例

类型 协议 端口范围
自定义 TCP TCP 3306 sg-abcd1234

附加到同一安全组的实例的出站规则示例

类型 协议 端口范围 目的地
自定义 TCP TCP 3306 sg-abcd1234

-或者-

对于不同安全组中的实例,请确保两个安全组都允许彼此访问。

例如,如果 Lambda 函数位于安全组 sg-1234 中,而 RDS 实例位于 sg-abcd 中,则每个组都将具有以下规则:

与要连接到的 RDS 实例不同的安全组中的 Lambda 函数的出站规则示例

类型 协议 端口范围 目的地
自定义 TCP TCP 3306 sg-abcd

与要连接的 Lambda 函数不同的安全组中 RDS 实例的入站规则示例

类型 协议 端口范围
自定义 TCP TCP 3306 sg-1234
重要提示:确保规则允许通过数据库端口进行 TCP 连接。

2.对于网络访问控制列表 (NACL),请确保入站和出站规则允许 Lambda 函数与 RDS 实例之间的通信。

注意:默认情况下,NACL 允许所有的入站和出站流量。但是,这些默认设置可以更改。

配置 NACL 时,请执行以下操作:

确保与 RDS 实例和 Lambda 函数关联的每个子网的 NACL 允许到另一个实例的子网 CIDR 的出站 TCP 连接。

注意:以下示例使用四个通过 CIDR 标记的示例子网:
对于 Lambda 函数的子网,为 172.31.1.0/24 和 172.31.0.0/28。
对于 RDS 实例的子网,为 172.31.10.0/24 和 172.31.64.0/20。

Lambda 函数子网 NACL 的出站规则示例

类型 协议 端口范围 目的地 允许/拒绝
自定义 TCP TCP 3306 172.31.10.0/24 允许
自定义 TCP TCP 3306 172.31.64.0/20 允许

重要提示:同样的 出站规则也需要应用于 RDS 实例子网的 NACL,但其目的地设置为 Lambda 子网的 CIDR。

确保每个子网的 NACL 在其他实例子网 CIDR 范围内的临时端口上也有入站规则。

Lambda 函数子网 NACL 的入站规则示例

类型 协议 端口范围 允许/拒绝
自定义 TCP TCP 1024-65535 172.31.10.0/24 允许
自定义 TCP TCP 1024-65535 172.31.64.0/20 允许

重要提示:必须将相同的入站规则应用于 RDS 实例子网的 NACL,但其源设置为 Lambda 子网的 CIDR。

不同 VPC 中的 Lambda 函数和 RDS 实例

首先,使用 VPC 对等连接来连接两个 VPC。然后,使用以下网络配置将一个 VPC 中的 Lambda 函数连接到另一个 VPC 中的 RDS 实例:

重要提示:确保 VPC 对等连接已启用域名服务器 (DNS) 解析。

1.对于路由表,通过查找以下内容来确认 VPC 对等连接成功完成:
对于目的地,请查找对等 VPC 的 CIDR。
对于目标,查找对等连接。

注意:以下示例包括两个由 CIDR 标记的示例子网:

对于对等的 VPC,该示例为 172.31.0.0/16。对于对等连接,为 pcx-01234abcd。

不同 VPC 中的 Lambda 函数和 RDS 实例的示例路由表

目的地 目标
172.31.0.0/16 pcx-01234abcd
10.0.0.0/16 本地

2.对于安全组,请使用以下网络设置:

对于 Lambda 函数的安全组,请确保允许流量进出 RDS 实例的 VPC 的 CIDR。

注意:以下示例包括两个由 CIDR 标记的示例子网:
对于 RDS 实例,该示例为 172.31.0.0/16
对于 Lambda 函数,为 10.0.0.0/16

与 RDS 实例不同的 VPC 中的 Lambda 函数的出站规则示例

类型 协议 端口范围 目的地
自定义 TCP TCP 3306 172.31.0.0/16
对于 RDS 实例的安全组,请确保允许流量进出 Lambda 函数安全组的 CIDR。

与 Lambda 函数不同的 VPC 中的 RDS 实例的入站规则示例

类型 协议 端口范围
自定义 TCP TCP 3306 10.0.0.0/16

3.对于 NACL,请按照上面的同一 VPC 中的 Lambda 函数和 RDS 实例部分中的步骤三的程序进行操作。Lambda 函数子网 CIDR 的来源位于不同的 VPC 中。

Lambda 函数和公有 RDS 实例

1.确保已在 VPC 上启用了 DNS 路由。

2.使用以下网络配置之一:

对于与公有 RDS 实例位于同一 VPC 中的 Lambda 函数,请参阅上面的同一 VPC 中的 Lambda 函数和 RDS 实例部分。

注意:Lambda 函数不需要互联网访问。它使用其私有 IP 地址解析 RDS。

-或者-

对于不同 VPC 中的 Lambda 函数和公有 RDS 实例,请参阅上面的不同 VPC 中的 Lambda 函数和 RDS 实例部分。

注意:不在 VPC 中的 Lambda 函数会自动接入互联网,并且可以解析公有 RDS 实例的 IP 地址。

3.确保您的公有 RDS 配置符合以下条件:附加到 RDS 实例的子网是公有的(默认路由到 IGW)。所有 NACL 都允许所有入站和出站访问。安全组允许所有入站连接。

注意:如果要限制 NACL 访问,请确保 NACL 仍允许与 Lambda 的 VPC CIDR 或 EC2 CIDR 范围之间的连接。确保将出站连接设置为数据库的端口,并将入站连接设置为临时端口 (1024-65535)。如果需要限制安全组的入站访问,请确保该组仍允许从 Lambda 的 VPC CIDR 或 EC2 CIDR 范围进行入站访问。