如何排查从 Lambda 访问 Amazon RDS 数据库实例时一直出现的连接超时问题?
上次更新时间:2020 年 2 月 27 日
我的 AWS Lambda 函数在尝试访问某个 Amazon Relational Database Service (Amazon RDS) 数据库实例时一直出现连接超时错误。如何排查这些错误?
解决方法
一直出现连接超时错误可能由多种原因导致,具体取决于您的使用案例和 Lambda 函数配置。请按照以下步骤来诊断这些错误。
注意:如果您遇到间歇性和临时性的连接超时,请捕获相应事件,并在 Lambda 函数的错误处理过程中重试。有关更多信息,请参阅 AWS Lambda 中的错误处理和自动重试。
检查 Lambda 函数日志
如果您尚未检查 Lambda 函数的日志,请为连接启用日志记录功能,然后执行此操作。有关更多信息,请参阅对基于 Lambda 的应用程序进行监控和问题排查。
检查 VPC 配置
执行以下任意一项操作:
- 如果数据库是可私有访问的,请将您的 Lambda 函数置于与数据库相同的 Amazon Virtual Private Cloud (Amazon VPC) 中。或者,在包含您的函数的 Amazon VPC 与包含您的数据库的 Amazon VPC 之间创建 VPC 对等连接。
- 如果数据库是可公开访问的,并且数据库上没有基于 IP 地址的限制,则无需将 Lambda 函数置于 Amazon VPC 中。如果您的函数已经置于某个 Amazon VPC 中,请通过 NAT 网关或 NAT 实例路由公共流量。有关更多信息,请参阅如何为 VPC 中的 Lambda 函数提供互联网访问权限?
有关更多信息,请参阅教程:配置 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 区域使用。