Node.js AWS VPC Lambda功能一直无法访问互联网

Node.js AWS VPC Lambda功能一直无法访问互联网,node.js,amazon-web-services,aws-lambda,amazon-elasticache,vpc,Node.js,Amazon Web Services,Aws Lambda,Amazon Elasticache,Vpc,希望有人能在这个问题上给我启发。我目前正在开发一个lambda函数,它利用cloud watch调度器检查各种设备,并使用elasticache在读数上维护一个简单的数据库 我的问题是,在我晚上停止测试之后。早上我启动lambda函数,该函数已无法访问互联网。它由函数“超时”表示。通常在我的路线和专有网络设置混乱了几个小时后,它会重新开始工作。只是为了第二天休息。有时它与nat网关一起工作,有时仅与nat实例一起工作。我通常对vpc设置所做的更改很小。我使用的设置模式是一个公共、一个私有和一个n

希望有人能在这个问题上给我启发。我目前正在开发一个lambda函数,它利用cloud watch调度器检查各种设备,并使用elasticache在读数上维护一个简单的数据库

我的问题是,在我晚上停止测试之后。早上我启动lambda函数,该函数已无法访问互联网。它由函数“超时”表示。通常在我的路线和专有网络设置混乱了几个小时后,它会重新开始工作。只是为了第二天休息。有时它与nat网关一起工作,有时仅与nat实例一起工作。我通常对vpc设置所做的更改很小。我使用的设置模式是一个公共、一个私有和一个natgateway


更新:在昨天一整天都无法从我的VPC访问互联网后,今天运行正常。我做了什么不同的事,没什么。当它再次停止运行时,可能是今天晚些时候,我会打电话给AWS,看看我们是否能找到问题的根源

具有VPC访问的Lambda功能需要NAT网关才能访问互联网。您指出,它有时仅与Internet网关一起工作,但根据AWS文档,这是不可能的。如果您要删除NAT网关或VPC到NAT网关的路由,则这将从启用了VPC访问的任何Lambda功能中删除internet访问。

听起来这似乎是由于AWS Lambda使用的临时端口范围造成的。我建议您检查所有网络ACL(NACL),以确保它们允许在以下网络上进行通信:

AWS Lambda函数使用端口1024-65535


这意味着,当lambda运行时,它可以使用此范围内的任何端口向internet发送通信。即使目的地是端口80或443,发送端口也将在此临时范围内,因此当internet服务器响应时,它将把响应发送回原始临时端口。确保您的NACL允许此临时范围的通信(入站或出站或两者,具体取决于您的用例),否则您可能会被阻止,具体取决于使用的临时端口。这篇文章有一个有用的解释:

我刚刚修复了我的lambda的相同问题-问题是我已将lambda设置为在我的所有子网中运行(我有2个专用子网和1个公用子网)。这篇knowledgebase文章指定您应该只在私有子网中运行它们,这很有意义:


转到AWS控制台上的lambda页面,取消选择公用子网并保存,问题应该得到解决。

K,可能它只适用于nat网关。但是,这并不能忽略这样一个事实,即第二天nat网关已停止连接到internet,而配置没有任何更改。这听起来像是nat网关而不是Lambda功能的问题。您是在使用托管NAT网关服务还是在创建自己的NAT网关?我想,我应该在我的描述中更加清楚。Lambda函数很好。问题出在Nat网关上。通常情况下,我会选择创建新的nat网关,启动弹性ip,然后将其与0.0.0.0/0的路由关联。我面临的问题与VPC下的lambda功能相同,所有适当的配置都可以访问互联网,有时无法与外部互联网连接。@Liam否VPC中运行的Lambda函数不可能仅通过互联网网关访问互联网。它需要一个NAT网关。您的答案指定您将lambda从公共子网(仅具有internet网关的子网)中取出,并仅在私有子网(具有NAT网关路由的子网)中运行它们。所以你的答案实际上和我的一样。我有完全相同的问题。你能修复它吗?你找到它的底部了吗???这也发生在我身上,我读了几篇关于使用nat网关的文章等等。。。然后我对它进行了配置、测试,并随机丢失了internet访问,有时工作正常D:我也遇到过同样的问题(私有子网中的Lambda函数、公共子网中的NAT网关、通过NAT路由的私有子网的出站流量)。我还没有解决这个问题,但我发现不知怎么的,这个函数只有在特定子网中第一次启动时才起作用。之后,它无法连接到互联网。请检查。如果您只允许一组临时端口,那么“internet”(即您正在查询的特定服务器)可能会对您正在阻止的某些端口进行应答。这节省了我的时间!只有一个问题-这是否应该是针对所有Lambda的策略(有或没有互联网接入)?我建议您将其用于所有Lambda是一种良好的做法-您可以使用其他AWS服务,这些服务可能只能从您的私人子网访问。