node.js - 外部调用时 Lambda 函数超时

标签 node.js amazon-web-services aws-lambda amazon-vpc

我有一个 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 函数上的一个子网。

出于调试目的,我的安全组出站函数设置为所有流量/所有目的地 (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 路由设置为以互联网网关为目标。

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

最佳答案

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 网关的默认路由遵循其所属子网路由表中的默认路由到达互联网。如果它与需要 NAT 网关的子网关联,则其默认路由会自行环回。

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

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

相关文章:

amazon-web-services - 如何模拟 *ec2.DescribeVolumes 输出的值

amazon-web-services - API Gateway lambda 授权方自定义状态代码

node.js - 如何将 AWS SDK 与 Promise 结合使用

node.js - Mongoose 节省

javascript - Node js,process.env 不读取环境变量

javascript - Sails 引用错误 : Article "Model" is not defined

java - AWS Lambda JavaCompiler实例

javascript - Node.js 中的正则表达式不匹配

amazon-web-services - 在 cloudwatch 中创建日志组时如何触发 lambda?

amazon-web-services - 使用Docker在AWS EC2上运行Elasticsearch