如何排查从 Lambda 访问 Amazon RDS 数据库实例时一直出现的连接超时问题?

上次更新时间:2020 年 2 月 27 日

我的 AWS Lambda 函数在尝试访问某个 Amazon Relational Database Service (Amazon RDS) 数据库实例时一直出现连接超时错误。如何排查这些错误?

解决方法

一直出现连接超时错误可能由多种原因导致,具体取决于您的使用案例和 Lambda 函数配置。请按照以下步骤来诊断这些错误。

注意:如果您遇到间歇性和临时性的连接超时,请捕获相应事件,并在 Lambda 函数的错误处理过程中重试。有关更多信息,请参阅 AWS Lambda 中的错误处理和自动重试

检查 Lambda 函数日志

如果您尚未检查 Lambda 函数的日志,请为连接启用日志记录功能,然后执行此操作。有关更多信息,请参阅对基于 Lambda 的应用程序进行监控和问题排查

检查 VPC 配置

执行以下任意一项操作:

有关更多信息,请参阅教程:配置 Lambda 函数以访问 Amazon VPC 中的 Amazon RDS

检查安全组规则

执行以下任意一项操作:

  • 如果数据库是可私有访问的,并且您的 Lambda 函数位于某个 Amazon VPC 中,则将入站规则添加到您的数据库安全组中,以允许来自该 VPC 的 子网安全组的 CIDR 范围的流量。
  • 如果数据库是可公开访问的,并且您的 Lambda 函数位于某个 Amazon VPC 中,则将入站规则添加到您的数据库安全组中,以允许来自该 VPC 的 NAT 网关NAT 实例的流量。

更新 Lambda 函数处理程序

更新您的 Lambda 函数代码,这样函数会在函数处理程序以外打开数据库连接,并且不会关闭连接。由于 Lambda 重用容器的方式,在重用容器时,Lambda 不会重新初始化函数处理程序之外的代码。

使用 EC2 实例连接

作为测试,请使用与 Lambda 函数相同的 Amazon VPC 配置启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例。尝试从 EC2 实例连接到 RDS 数据库实例

  • 如果您能够连接到数据库,则连接错误的根本原因在于 Lambda 一方。继续排查 Lambda 联网问题
  • 如果您无法连接到数据库,则根本原因是网络配置出现问题。

有关更多信息,请参阅如何解决连接到 Amazon RDS 数据库实例时出现的问题?

使用 Amazon RDS Proxy(预览版)

为您的 RDS 数据库创建一个 Amazon RDS Proxy 终端节点,以处理来自 Lambda 函数的数据库流量。有关更多信息,请参阅读 Using Amazon RDS Proxy with AWS Lambda

注意:在预览版期间,Amazon RDS Proxy 可在亚太地区(东京)、欧洲(爱尔兰)、美国东部(俄亥俄)、美国东部(弗吉尼亚北部)和美国西部(俄勒冈)AWS 区域使用。