Pat*_*ham 10 amazon-web-services amazon-vpc aws-lambda
我试图从Lambda函数中向第三方服务发出出站API请求,但该函数总是超时而没有任何错误.
以前发生在尝试s3.putObject在不同的功能(仍在相同的VPC /子网内)中执行操作时,我设法通过添加带有服务名称的端点com.amazonaws.us-east-1.s3并将其连接到与之关联的路由表来解决这个问题.此Lambda函数所在的VPC.
在网络框 - >安全组部分内的Lambda仪表板中,我看到此警告:
启用VPC后,您的Lambda函数将失去默认的Internet访问权限.如果您的功能需要外部Internet访问,请确保您的安全组允许出站连接,并确保您的VPC具有NAT网关.
我相信这个安全组允许出站连接,基于下面的出站规则表:
对于第二个要求,我可以确认此VPC具有NAT网关,因为在VPC仪表板上,在NAT网关选项卡中,出现的那个具有与之关联的VCP,并且该VPC与托管Lambda功能的VPC相同.
我按照指南创建了一个Flow Log来监控进出VPC的流量,希望看到这些出站请求确实被拒绝了.但是,在执行此操作并检查CloudWatch日志之后,所有记录都以ACCEPT OK或中结束NODATA.
如何授予我的VPC Lambda功能的互联网访问权限?是我最初试图遵循的指南,但我在第4步下陷入困境To create a public or private subnet:
从"更改为:"下拉菜单中,选择适当的路由表:对于私有子网,默认路由应指向NAT网关或NAT实例:
目标:0.0.0.0/0目标:nat- ...(或eni- ...)对于公有子网,默认路由应指向Internet网关:
目的地:0.0.0.0/0目标:igw- ...
对于此VPC中的所有四个子网,单击右侧的下拉列表Change to:仅显示一个选项,即已选择的选项rtb-xxxxxxxx.单击该路由表的链接,然后单击Summary旁边的Routes选项卡,我看到:
我阻止Lambda函数访问Internet的错误是什么?
Nav*_*ngh 15
对于LAMBDA通过VPC访问互联网应该是在Private Subnet与NAT Gateway连接.
根据您的屏幕截图,附加到子网的路由表已igw-xxxxxxx附加,使您的当前子网成为a public subnet.
为了使事情有效,您可以执行以下操作:
NAT Gateway而不是igw-xxxxxx当前的路由表subnet要么
Elastic IP如果您想要访问互联网,请查找附加到您的Lambda的ENI并附上.要么
根据@John Rotenstein,如果您的Lambda不需要VPC资源,您可以将Lambda移出VPC
小智 6
您可能做错的一件事(这正是我做错的事情,但从上面的 @Ramratan Gupta 得到了提示)是将 NAT 网关放在私有子网中而不是公共子网中。
NAT 网关为您的私有 IP Lambda 函数提供互联网连接,因此 NAT 网关本身需要具有互联网访问权限并位于公共网络中,这是理所当然的。
总结一下:
您必须创建至少两个子网:一个公共子网和一个私有子网。将两者放在同一个 VPC 中。
使子网成为公共子网或私有子网的是0.0.0.0/0路由。
您需要同时拥有互联网网关 (igw) 和 NAT 网关 (ngw)。
要创建 NAT 网关,您需要弹性 IP。
另外,这就是我做错的地方,您需要在公共网络中创建 NAT 网关。
igw 与 NAT 网关位于同一子网中:公共子网。
您需要有两条路由:一条路由0.0.0.0/0引用 igw,另一条路由引用 ngw。
然后,您需要将包含路由表的 NAT-route 与私有子网关联,并将包含路由表的 igw-route 与公有子网关联。请注意,在进行此关联之前,将一个子网设为公共子网和将子网设为私有子网之间没有区别。通过如何将子网与路由表关联起来,可以将一个子网设为私有,另一个设为公共。
最后,您需要将 Lambda 函数连接到 VPC,并且仅连接到私有子网。这样,当您的 lambda 尝试访问互联网时,它会转到私有子网,查找路由0.0.0.0/0,该路由将其定向到公共子网中的 NAT 网关。然后,NAT 网关使用 igw 联系互联网(因为它们位于同一子网中),并在收到响应后将其返回到您的 Lambda 函数。
另请注意,您的 Lambda 函数需要一些权限(AWS 会警告您)才能连接到 VPC。
大家好,我开发了分步教程,并提供了相关的明确屏幕截图:
第一部分
第二部分
| 归档时间: |
|
| 查看次数: |
3506 次 |
| 最近记录: |