我有一个 Lambda 函数,需要从中进行外部 API 调用。我已将 Lambda 函数添加到一个安全组、一个 VPC 和 2 个子网,它为我提供了以下文本:
当您启用 VPC 时,您的 Lambda 函数将失去默认互联网
使用权。如果您需要外部互联网访问来执行您的功能,
确保您的安全组允许出站连接并且
您的 VPC 有 NAT 网关。
我进入 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
VPC 上有 2 个相同子网的路由表,其中0.0.0.0/0
路由设置为目标 NAT 网关。
VPC 上还有一个包含 3 个其他子网的不同路由表,其中0.0.0.0/0
路由设置为目标互联网网关。
两个路由表具有相同的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 }
我正在运行的节点代码在我的桌面节点环境中工作,并且 POST 调用在邮递员中工作,所以我相当确定这是我的 AWS 配置的问题。
我一直在使用这个场景作为资源:http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html