外部调用的Lambda函数超时

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

当您启用VPC时,您的Lambdafunction将会失去默认的互联网访问权限。 如果您的function需要外部Internet访问,请确保您的安全组允许出站连接,并确保您的VPC具有NAT网关。

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

出于debugging目的,我的安全组出站function被设置为所有通信/所有目的地( 0.0.0.0/0 )。 另外我的这个VPC的networkingACL被设置为这个(有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路由设置为定位到Internet网关。

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

我得到的错误是:

 { Error: connect ETIMEDOUT xxxx: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: 'xxxx', port: 443 } 

我正在运行的节点代码在我的桌面节点环境中工作,并且POST调用在postman中工作,所以我相当肯定这是我的AWSconfiguration的问题。

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

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

那是你出错的地方。

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

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

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