外部调用时 Lambda 函数超时

Lambda function timeout on external call

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

When you enable VPC, your Lambda function will lose default internet access. If you require external internet access for your function, ensure that your security group allows outbound connections and that your VPC has a NAT gateway.

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

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

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

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

另一个路由 table 与其他 3 个子网也在 VPC 上,0.0.0.0/0 路由设置为以互联网网关为目标。

两条路由 table 具有相同的 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

I go into VPC, create a NAT gateway (I let AWS create a EIP), attach it to one of the subnets on my lambda function.

这就是gou出错的地方。

NAT 网关必须不能连接到它服务的任何子网。 NAT 网关必须位于具有到 Internet 网关的默认路由的 public 子网上。

NAT 网关的默认路由遵循其所属子网路由table 的默认路由到达Internet。如果它与需要 NAT 网关的子网关联,则其默认路由会自行环回。

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