我有一个公开的Aurora MySql集群,因此我可以从本地工作站连接到它 . 我创建了一个aspnetcore项目,可以连接到数据库,查询并将结果返回给我,如果我在VS Code中本地运行lambda .
当我将Lambda部署到AWS(上传已发布的.zip)时,lambda执行API(通过API网关),这些API不能与数据库交互 . 一旦我点击试图连接到Aurora的API,它就会超时并失败 .
Lambda和RDS位于相同的VPC中,并位于相同的子网中 . 我试过RDS是公共的还是私人的,都没有工作 . 我的Lambda具有分配给它的IAM角色,授予它完整的RDS访问权限和完整的VPC访问权限 . 为了击中Aurora,lambda还需要什么?
我也尝试在相同的VPC /子网中运行Lambda,并且没有任何VPC . 当我在没有连接VPC的情况下运行它时,我在Cloudwatch中恢复了整个堆栈跟踪,说它已经超时尝试连接 . 当我在VPC / Subnets中运行Lambda时,我没有从Lambda写入任何日志消息写入CloudWatch .
编辑以显示安全组设置
Aurora MySql RDS
Lambda
Security Group
2 回答
在VPC内部,RDS实例的安全组需要有一个规则,允许对与Lambda函数关联的安全组或与Lambda函数关联的所有子网的TCP端口3306进行入站访问 .
在VPC之外,RDS实例需要允许从0.0.0.0/0 ...或至少所有与整个区域(几百万个地址)的EC2相关联的所有公共IP进行访问,因为Lambda函数在VPC从区域EC2池动态获取其IP地址 - 因此最好避免这种情况 .
你的VPC中有足够的免费/可用IP用于你的lambda吗?
我发布了一个答案可能的原因,因为你提到当lambda在VPC中时没有日志
请参阅另一个StackOverflow问题的答案here