我有一个 Lambda 函数,我需要从中进行外部 API 调用。我已将 Lambda 函数添​​加到一个安全组、一个 VPC 和 2 个子网,它给了我以下文本:



我进入 VPC,创建一个 NAT 网关(我让 AWS 创建了一个 EIP),将它附加到我的 lambda 函数上的子网之一。

出于调试目的,我的安全组出站功能设置为所有流量/所有目的地 ( 0.0.0.0/0 )。此外,我为此 VPC 的网络 ACL 设置为(有 5 个子网,包括带有 NAT 网关的子网):

100 | ALL Traffic | ALL | ALL | 0.0.0.0/0 | ALLOW

具有相同 2 个子网的路由表位于 VPC 上,0.0.0.0/0 路由设置为以 NAT 网关为目标。

VPC 上还有一个包含 3 个其他子网的不同路由表,0.0.0.0/0 路由设置为以 Internet 网关为目标。

两个路由表具有相同的 local 目标 IP(VPC 的 IP)。

我得到的错误是:
{ Error: connect ETIMEDOUT x.x.x.x:443
at Object.exports._errnoException (util.js:1018:11)
at exports._exceptionWithHostPort (util.js:1041:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1090:14)
code: 'ETIMEDOUT',
errno: 'ETIMEDOUT',
syscall: 'connect',
address: 'x.x.x.x',
port: 443 }

我正在运行的 Node 代码在我的桌面 Node 环境中工作,POST 调用在 postman 中工作,所以我很确定这是我的 AWS 配置的问题。

我一直在使用这个场景作为资源:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html

最佳答案



那就是gou出错的地方。

NAT 网关必须 而不是 连接到它所服务的任何子网。 NAT 网关必须位于具有到 Internet 网关的默认路由的公共(public)子网上。

NAT 网关的默认路由遵循它所连接的子网的路由表的默认路由,以到达 Internet。如果它与需要 NAT 网关的子网关联,则其默认路由会在自身上循环。

然后,与 Lambda 关联的所有子网都需要使用一个路由表,其默认路由指向 NAT 网关。

关于node.js - 外部调用的 Lambda 函数超时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43661156/

10-13 03:39