私有子网内的lambda如何访问公用子网中的EC2



我已经在一个公共子网中创建了一个EC2实例(这样我就可以从我的家庭网络访问它(,并且我已经在我的VPC的私有子网内创建了一些Lambda。

我的第一个lambda可以自由访问互联网(通过NAT网关(并完成它的工作。这就是从互联网上获取一个文件并上传到S3,每天一次。

我的第二个lambda应该从S3中检索这个文件(它这样做没有问题(读取文件&然后将数据上传到EC2实例上运行的MySQL。它无法连接到数据库(使用EC2的公用或专用IP(,Cloudwatch日志显示会话超时,这让我认为这是一个网络问题。

我有一个第三个lambda,它也需要与EC2/DB实例交互。

我的安全组允许来自我的家庭网络IP的所有传入流量,NAT网关&VPC IP范围。允许所有出站流量。

我很感激在公共子网中以这种方式设置EC2/DB并不常见,但我更喜欢在家中使用Sequel Pro以这种方式与它交互。

然而,我的设置可能吗?例如,我的私有子网lambdas可以与公用子网ec2实例交互吗?如果是的话,有人知道我该怎么做吗?

您的情况似乎是:

  • 在公共子网中运行的AmazonEC2实例,带有MySQL
    • EC2实例有一个安全组,允许来自家庭网络IP、NAT网关和VPC IP范围的所有传入流量
  • 连接到同一VPC的私有子网的AWS Lambda函数
  • 允许私有子网连接到Internet的NAT网关
  • Lambda函数无法连接EC2实例上运行的MySQL数据库

此场景的正常安全配置为:

  • Lambda函数(Lambda-SG(上的安全组,允许所有出站访问(不需要入站(
  • EC2实例(EC2-SG(上的一个安全组,允许从端口3306上的Lambda-SG进行入站访问,再加上您希望通过SSH访问实例的任何入站权限,等等

鉴于您的安全组包括";VPC IP范围";,这应该足以允许入站访问。

Lambda函数应通过其私有IP地址引用EC2实例,以保持VPC内的流量。默认情况下,VPC内的所有子网都可以相互通信,除非网络ACL已被修改(通常应保留为默认值(。

这意味着剩下的唯一解释是MySQL数据库不接受来自VPC IP范围的流量。(我不是MySQL的人,但我知道PostgreSQL需要定义传入的IP范围,所以MySQL也可能是这样。(

要诊断网络中可能发生的情况,我建议:

  • 公用子网中启动另一个Amazon EC2实例
  • 连接到新实例并尝试通过私有IP地址连接到MySQL数据库
  • 如果有效,请从专用子网中的EC2实例重复该过程。要使用它,您需要连接到"public"EC2实例,然后从那里连接到"private"EC2示例。然后,尝试从那个私有实例连接到MySQL

这些步骤将逐步让您确定网络问题的位置。让我们知道您的发现!

最新更新