如何配置 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 函数的网络设置的信息,请参阅 Configuring a Lambda function to access resources in a VPC。如果网络设置不正确,则 Lambda 函数将超时并显示 Task timed out 错误消息。

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

解决方法

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

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

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

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

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 以允许出站 TCP 连接到其他实例的子网的 CIDR。

**注意:**以下示例使用四个用自己 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/16local

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

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

有关更多信息,请参阅 Update your route tables for a VPC peering connection

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 官方已更新 1 年前