我正在VPC内的lambda上运行无服务器Web应用程序,并连接到Aurora-MySQL RDS实例,并具有入站规则以允许来自lambda的安全组的流量 连接工作正常,但是lambda冷启动经常给我超时。 经过一些研究,我发现在VPC上运行lambda会带来额外的启动成本,并且我建议不要在多个地方使用该lambda,以避免在VPC上使用lambda,除非您严格需要访问VPC中的某些资源。
因此,我决定将RDS移至可公开访问的实例,以便我的Lambda可以通过Internet进行访问并将Lambda从VPC中删除。
因此,我将RDS Public accessibility
选项更改为Yes
,并编辑了安全组以允许来自任何IP的入站连接。
我还从Lambda中删除了VPC,因此Lambda不再在VPC上运行
我以为就足够了。
但是后来我的lambda开始无法连接到数据库 我尝试使用本地客户端进行连接,再次失败
尝试ping主机名,请求超时
深入研究之后,我发现具有某些私有子网的数据库实例子网组可能是一个问题(?) 因此,我创建了一个仅具有公共子网的新子网组,并尝试将数据库实例移至该新子网组...但是得到了以下消息:
You cannot move DB instance my-instance to subnet group my-new-group. The specified DB subnet group and DB instance are in the same VPC.
好吧,看来我无法移至同一VPC中的其他子网,我开始尝试创建一个新的VPC,但这似乎不合适,我敢肯定我还有其他东西在这里不见了。
我还阅读了有关网络ACL的信息,并认为这可能是问题所在,但我的规则似乎还不错,默认规则允许任何流量(规则*表示拒绝)
ALL Traffic ALL ALL 0.0.0.0/0 ALLOW
我的RDS网络设置
Subnet group
default
Subnets
subnet-11111111
subnet-22222222
subnet-33333333
subnet-44444444
subnet-55555555
subnet-66666666
Security
VPC security groups
default (sg-111111)
( active )
Public accessibility
Yes
我的安全组入站规则
Type Protocol Port range Source Description - optional
All traffic All All 0.0.0.0/0 -
All traffic All All ::/0 -
仍然无法连接,无法与本地客户端连接,甚至无法ping通:
通过我的本地客户端连接
Can't connect to MySQL server on 'my-instance.xxxxxxxxxx.us-east-1.rds.amazonaws.com'
ping my-instance.xxxxxxx.us-east-1.rds.amazonaws.com
PING ec2-xx-xx-xx-xx.compute-1.amazonaws.com (xx.xx.xx.xx): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
我在这里想念什么吗?
更新
我的VPC可以访问Internet(我可以从中访问Internet服务,这不是问题),我有Internet网关和NAT网关。
我正在使用Zappa进行lambda部署,这需要创建一个保持温暖的功能……但是,我知道并发请求仍然可能是个问题
lambda中的VPC的问题在于它可以在冷启动时增加10s,这对于我的一些用例来说是不可行的: https://www.freecodecamp.org/news/lambda-vpc-cold-starts-a-latency-killer-5408323278dd/
答案 0 :(得分:2)
除了在RDS实例上启用“公共访问”之外,您还需要使用Internet网关启用到VPC的Internet连接。将其连接到VPC之后,需要将数据从数据库子网路由到Internet网关。 Check here
但是我不建议您像这样公开您的数据库。如果您在lambda冷启动方面遇到问题,则应创建一个keep it warm事件。
答案 1 :(得分:1)
您需要做的是:
检查lambda安全组是否已打开以打开数据库端口的出站连接。
无需为RDS创建其他VPC。使用默认VPC。
按照@stargazer的建议,请尝试不公开公开或在VPC之外公开。它在VPC中运行良好。