AWS Lambda连接到Internet

TL; TR

我试图从AWS Lambda连接到互联网,我有一个NAT网关的私人子网,但仍然无法连接到互联网…

完整的问题

所以我试图用我的AWS Lambda函数访问互联网。 我已经尝试了Java和NodeJS 4,没有运气。

我有一个私人VPC与子网:10.0.10.0/24

在这里输入图像说明

正如你所看到的,我已经添加了一个规则到我的NAT网关:

在这里输入图像说明

我像这样configuration了我的AWS Lambda:

在这里输入图像说明

select该子网(10.0.10.0)和一个开放的安全组(入站和出站)

但是,当我尝试从互联网下载某些东西时,lambda超时:

'use strict'; console.log('Loading function'); var http = require("http"); exports.handler = (event, context, callback) => { //console.log('Received event:', JSON.stringify(event, null, 2)); console.log('value1 =', event.key1); console.log('value2 =', event.key2); console.log('value3 =', event.key3); var options = { host: 'www.virgilio.it', port: 80, path: '/' }; http.get(options, function(res) { console.log("Got response: " + res.statusCode); }).on('error', function(e) { console.log("Got error: " + e.message); }); callback(null, event.key1); // Echo back the first key value // callback('Something went wrong'); }; 

{“errorMessage”:“2016-05-10T10:11:46.936Z 79968883-1697-11e6-9e17-1f46a366f324 55.00秒后超时”}

这是一个错误?

注意:相同的function工作如果我不select我的VPC

我发现错误,NAT网关应该被添加到一个公共子网(而不是一个私人的)。
公有子网是Internet Gatway路由与0.0.0.0/0关联的子网

由于我面临同样的问题,为上述答案增加了一点清晰度 –

  1. 将NAT网关或NAT实例添加到公有子网(对应(公共)子网路由表中具有0.0.0.0/0条目到Internet网关的公共子网)
  2. 编辑私有子网(您正在运行您的lambda的位置)的路由表,使其具有0.0.0.0/0的条目到公有子网中的NAT网关。
  3. 确保分配给lambda的安全组允许出站连接。