我想让我的 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 函数将超时并显示 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 中,则每个实例都有以下入站和出站规则。
附加到同一安全组的实例的入站规则示例
| | | |
---|
类型 | 协议 | 端口范围 | 源 |
自定义 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 允许所有入站和出站流量。但是,您可以更改这些默认设置。
对于与 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 的出站规则示例
| | | | |
---|
类型 | 协议 | 端口范围 | 目的地 | 允许/拒绝 |
自定义 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。
对于目标,查找对等连接。
**注意:**以下示例包括两个示例 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/16 | pcx-01234abcd |
10.0.0.0/16 | local |
具有 RDS 实例的对等 VPC 的示例路由表
| |
---|
目的地 | 目标 |
10.0.0.0/16 | pcx-01234abcd |
172.31.0.0/16 | local |
有关更多信息,请参阅 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 函数的出站规则示例
| | | |
---|
类型 | 协议 | 端口范围 | 目的地 |
自定义 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 实例部分中的第 3 步进行操作。Lambda 函数的子网 CIDR 的来源位于不同的 VPC 中。
**注意:**作为 VPC 对等的替代方案,您可以使用 AWS PrivateLink 跨 VPC 访问 Amazon RDS。此解决方案适用于同一 AWS 区域中的 AWS 账户和 VPC。