Lambda 在本地连接到 Aurora MySql - 部署到 AWS 时超时

Posted

技术标签:

【中文标题】Lambda 在本地连接到 Aurora MySql - 部署到 AWS 时超时【英文标题】:Lambda connects to Aurora MySql locally - times out when deployed to AWS 【发布时间】:2018-10-23 14:33:46 【问题描述】:

我有一个公开的 Aurora mysql 集群,因此我可以从本地工作站连接到它。我创建了一个 aspnetcore 项目,如果我在 VS Code 中本地运行 lambda,它可以连接到数据库、查询并将结果返回给我。

当我将 Lambda 部署到 AWS(上传已发布的 .zip)时,lambda 会执行不与数据库交互的 API(通过 API 网关)。一旦我点击了一个尝试连接到 Aurora 的 API,它就会超时并失败。

Lambda 和 RDS 在同一个 VPC 中,并且在同一个子网中。我试过 RDS 既是公共的又是私有的,都不管用。我的 Lambda 分配了一个 IAM 角色,授予它完全 RDS 访问权限和完全 VPC 访问权限。为了击中极光,lambda 还需要什么额外的东西?

我还尝试在相同的 VPC/子网中运行 Lambda,并且没有任何 VPC。当我在没有连接 VPC 的情况下运行它时,我会在 Cloudwatch 中返回整个堆栈跟踪,说它尝试连接时超时。当我在 VPC/子网中运行 Lambda 时,我没有从 Lambda 中获得任何写入 CloudWatch 的日志消息。

编辑以显示安全组设置

Aurora MySql RDS

Lambda

安全组

【问题讨论】:

您能否分享屏幕截图以确认您的 Lambda 确实应用了相同的安全组?此外,您无需将 RDSFullAccess 与您的执行角色相关联,IAM 只是授予您在 RDS 上执行管理 API 的权限(如创建集群、删除集群等)。它与实际访问数据库端点没有任何关系。 嗨乔纳森,你有没有解决过这个问题?我目前面临同样的问题。安全组彼此面对,Lambda 执行角色有权创建 ENI,但我仍然总是遇到连接超时。期待您的来信。 【参考方案1】:

在 VPC 内,RDS 实例的安全组需要有一个规则,允许与 Lambda 函数关联的安全组或与 Lambda 函数关联的所有子网对 TCP 端口 3306 进行入站访问。

p>

在 VPC 之外,RDS 实例需要允许从 0.0.0.0/0... 访问,或者至少允许与整个区域(即数百万个地址)的所有 EC2 关联的所有公共 IP,因为 Lambda VPC 外部的函数从区域 EC2 池中动态获取其 IP 地址,因此最好避免这种情况。

【讨论】:

Lambda和RDS属于同一个VPC;该 VPC 具有应用入站规则的安全组,允许来自其自身的所有流量。团体。它还允许来自我的家庭 IP 在端口 3306 上的所有入站流量。由于某种原因,Lambda 仍然无法建立连接。 这个安全组是否也与 Lambda 函数相关联? 当我查看 RDS 和 Lambda 时,它显示相同的 VPC、相同的安全组和相同的子网列表。我正在使用默认 VPC 和默认安全组 更新了我的 OP 以包含设置的屏幕截图以帮助诊断。 您的 VPC 是否将 dns 解析和 dns 主机名都设置为“是”? docs.aws.amazon.com/AmazonVPC/latest/UserGuide/…【参考方案2】:

您的 VPC 中是否有足够的免费/可用 IP 用于您的 lambda?

我为这种情况发布了一个答案,因为您提到当 lambda 在 VPC 中时没有日志

请在另一个 *** 问题上查看我的回答 here

【讨论】:

是的,我有足够的 IP,我只有 2 个 EC2 和一个 RDS。 我创建了一个运行 Linux 的新 EC2,并且能够建立到 RDS 的连接。 EC2 位于同一个 VPC 中,并具有具有 RDS 完全访问权限的 IAM 角色,就像 Lambda 一样。我可以从 EC2 连接和查询数据库,但 Lambda 在连接时继续超时。

以上是关于Lambda 在本地连接到 Aurora MySql - 部署到 AWS 时超时的主要内容,如果未能解决你的问题,请参考以下文章

AWS Lambda 无法连接到 RDS 实例,但我可以在本地连接?

使用 Ngrok 从 AWS Lambda 连接到本地 PostgreSQL

连接到 Aurora AWS 无服务器

使用 SQLAlchemy 连接到 Amazon Aurora

使用MySQL Workbench连接到Amazon Aurora时出错

将 AWS Lambda 连接到 Redshift - 60 秒后超时