如何配置 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 范围进行入站访问。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?