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

4 分钟阅读
0

我希望我的 AWS Lambda 函数连接到 Amazon Relational Database Service(Amazon RDS)实例。

简短描述

**注意:**以下信息和步骤涉及 Amazon RDS 实例。不过,该解决方案也适用于位于虚拟私有云(VPC)中的任何端点或数据库。

要将 Lambda 函数连接到 RDS 实例,请将联网配置设置为允许连接。

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

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

出于安全考虑,最好将 RDS 实例保留在 VPC 中。对于公共数据库,请使用 NoSQL 数据库服务,例如 Amazon DynamoDB

VPC 外部的 Lambda 函数无法访问 VPC 内的 RDS 实例。

有关如何配置 Lambda 函数的网络设置的信息,请参阅配置 Lambda 函数以访问 VPC 中的资源。如果网络设置不正确,则 Lambda 函数将超时并显示任务超时错误消息。

要将 Lambda 函数连接到 Amazon Aurora 数据库集群,请使用 Data API for Aurora Serverless

解决方法

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

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

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

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

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

对于连接到同一安全组的实例,将该安全组设为入站规则的来源。将安全组设为出站规则的目标。

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

连接至同一安全组的实例的入站规则示例

类型协议端口范围
自定义 TCPTCP3306sg-abcd1234

连接至同一安全组的实例的出站规则示例

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

-或者-

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

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

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

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

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

类型协议端口范围
自定义 TCPTCP3306sg-1234

**重要提示:**确保规则允许通过数据库端口进行 TCP 连接。

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

**注意:**默认情况下,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 的出站规则示例

类型协议端口范围目的地允许/拒绝
自定义 TCPTCP3306172.31.10.0/24允许
自定义 TCPTCP3306172.31.64.0/20允许

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

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

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

类型协议端口范围允许/拒绝
自定义 TCPTCP1024-65535172.31.10.0/24允许
自定义 TCPTCP1024-65535172.31.64.0/20允许

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

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

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

**重要提示:**请务必为 VPC 对等连接开启域名系统(DNS)。

1.    对于路由表,确认 VPC 对等连接成功:
对于目的地,请查找对等 VPC 的 CIDR。
对于目标,请查找对等连接。

**注意:**以下示例包括两个示例 VPC:

源 VPC(Lambda 函数)的 CIDR:10.0.0.0/16

对等 VPC(RDS 实例)的 CIDR:172.31.0.0/16

对等连接:pcx-01234abcd

与 Lambda 函数关联的源 VPC 的路由表示例

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

带有 RDS 实例的对等 VPC 的路由表示例

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

有关更多信息,请参阅更新 VPC 对等连接的路由表

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

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

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

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

类型协议端口范围目的地
自定义 TCPTCP3306172.31.0.0/16

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

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

类型协议端口范围
自定义 TCPTCP330610.0.0.0/16

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

**注意:**作为 VPC 对等的替代方案,您可以使用 AWS PrivateLink 通过 VPC 访问 Amazon RDS。该解决方案适用于同一 AWS 区域中的 AWS 账户和 VPC。


AWS 官方
AWS 官方已更新 7 个月前