aws lambda连接internet

gcmastyq  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(526)

热释光;tr公司

我正试图连接到互联网从aws lambda,我有一个专用子网与nat网关,但仍然无法连接到互联网的功能。。。

完整问题

所以我尝试用我的aws lambda函数访问互联网。我试过java和nodejs4,但都没有成功。
我有一个私有专有网络,子网:10.0.10.0/24

如您所见,我已将规则添加到我的nat网关:

我将aws lambda配置为:

选择该子网(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秒后超时”}
这是虫子吗?
注意:如果我没有选择我的专有网络,同样的功能也会起作用

3ks5zfa0

3ks5zfa01#

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

3phpmpom

3phpmpom2#

因为我也面临同样的问题,所以我对以上的回答更加清楚了一点-
将nat网关或nat示例添加到公用子网(具有 0.0.0.0/0 在相应(公共)子网路由表中进入internet网关
编辑专用子网(运行lambda的位置)的路由表,以便为 0.0.0.0/0 到公用子网中的nat网关。
确保分配给lambda的安全组允许出站连接。

zsohkypk

zsohkypk3#

默认情况下,lambda函数不绑定到专有网络,这使它能够访问互联网,但阻止它访问专有网络中的资源,例如rds示例。
如果您将lambda连接到vpc,您将失去internet访问权限,这将阻止您访问s3和dynamo等资源,以及发出http请求。
如果你两个都需要,那我就得设置vpc上网,这是一个烂摊子(嘿aws的家伙,如果你有一个明确的过程,请让它简单:把它变成一个复选框或按钮;)
新建专有网络
我发现最好不要使用默认的专有网络,这样你就不会冒险破坏已经在该专有网络中工作的东西(以防你已经在那里有了资源),也因为你可以在将来使用默认的专有网络作为配置参考。
使用向导创建专有网络。

创建路由表
说出第一个 public-subnet (如果还没有);
说出第二个 private-lambda . aws支持人员建议只为lambda设置一个单独的子网,并将此路由表附加到lambda。

创建子网
默认情况下,当您创建专有网络时,它将为您创建一个公共子网。如果使用默认值,则其名称应为 Public subnet . 就这样吧。
现在要创建私有子网。如果您希望lambda具有高可用性,建议为其设置多个专用子网。
每个私有子网都将链接到您刚刚创建的专有网络。现在,假设您将vpc ip作为 10.0.0.0/16 你在弗吉尼亚管理你的资源( us-east-1 ),下面是一个模板,用于创建六个专用子网,每个子网位于不同的可用性区域(对于高可用性): private-lambda-us-east-1a ,可用区 us-east-1a ,ip块
10.0.16.0/24 private-lambda-us-east-1b ,可用区 us-east-1b ,ip块
10.0.32.0/24 private-lambda-us-east-1c ,可用区 us-east-1c ,ip块
10.0.48.0/24 private-lambda-us-east-1d ,可用区 us-east-1d ,ip块
10.0.64.0/24 private-lambda-us-east-1e ,可用区 us-east-1e ,ip块
10.0.80.0/24 private-lambda-us-east-1f ,可用区 us-east-1f ,ip块 10.0.92.0/24 但是你可以看到这样的模式:-在ip块的第三个位置有16个增量;-这些名称表示您所在区域中选定的可用性区域。

确保路由表与子网关联
转到route tables面板;
选择公子网表,检查其关联,并确保它与公子网相关联;
选择私有lambda表,检查其关联,并确保它与所有 private-lambda-* 你刚刚创建的子网。

创建internet网关
只需创建一个连接到专有网络。
配置公用子网的路由
在我的例子中,它是经过配置的,但是只要确保您的公共子网的路由表中有一个来自 0.0.0.0/0 到您刚刚创建的internet网关。

创建nat(网络地址转换器)
创建一个新的nat并选择您的公共子网。分配新的eip。
配置专用子网的路由
确保您的专用子网的路由表中有来自 0.0.0.0/0 为你的新纳特干杯。

通过这些步骤,您现在应该拥有一个支持互联网的专有网络。

用例:为internet和rds访问配置lambda

为lambda创建一个安全组
新建一个sg并配置出站->所有流量->到 0.0.0.0/0 以及 ::/0 修改rds示例的安全组以允许
入站->所有交通->来自lambda sg
配置lambda
创建新lambda或选择现有lambda;
选择新的专有网络;
选择所有专用子网( private-lambda-* )高可用性;
选择lambda安全组。
就这样。您现在应该有一个lambda函数,可以访问专有网络和互联网资源:)

相关问题