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

上次更新日期:2022 年 8 月 11 日

我希望我的 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

    解决方法

    重要提示:确保更改以下示例中提供的每个 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 中。


    这篇文章对您有帮助吗?


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