【问题标题】:Using AWS SDK from Lambda running in VPC使用在 VPC 中运行的 Lambda 中的 AWS 开发工具包
【发布时间】:2017-07-30 10:31:43
【问题描述】:

我有一个简单的 lambda 函数如下

var AWS = require("aws-sdk");

exports.handler = (event, context, callback) => {

var ec2 = new AWS.EC2({region:'us-east-1'});
return ec2.describeRegions({}).promise()
.then(function(regionResponse) {
    console.log(regionResponse.Regions)
    callback(null, regionResponse.Regions);
})
.catch(
    function (err) {
        console.log({"error" : err});
        callback(err, null);
    }
)

};

我可以在 VPC 之外成功运行此功能。

我使用 VPC 向导创建了一个 VPC,并创建了一个具有单个公有子网和 Internet 网关的 VPC。我将函数放在 VPC 中,并赋予它一个具有 Lambda VPC 执行权限的执行角色。 它现在因超时而失败,我已将其设置为 10 秒(正常执行 1 秒)

我的配置中缺少什么会阻止函数访问 VPC 内的 AWS 开发工具包?

【问题讨论】:

  • 这个问题每周至少在这里被问一次。请查看其他一些问题的答案,例如:stackoverflow.com/questions/38188532/…stackoverflow.com/questions/35423246/…
  • @MarkB 经常被问到这个事实只是表明它需要亚马逊提供的适当记录用例或示例。我之前已经通过这些其他答案走过了这些路线,所以我可能错过了一些东西或把一些东西弄得一团糟。我会重新开始,看看我能不能取得一些成功
  • AWS 已经在很多地方记录了这一点,比如这里:docs.aws.amazon.com/lambda/latest/dg/vpc.html 和这里的官方 Lambda VPC 公告:aws.amazon.com/blogs/aws/… 你想从他们那里得到什么他们没有提供给你?无论如何,这是您需要向亚马逊提供的反馈,而不是将其发布在他们永远看不到的地方。
  • 另外,我在您发布的代码中没有看到任何需要在 VPC 中运行的内容。如果您只是从 VPC 中删除 Lambda 函数,它将能够访问 AWS API。
  • @MarkB 我发布的代码只是我从一个更大的应用程序中获取的一个示例,该应用程序使用无服务器框架和一个以 API 网关为前端的 NodeJS ExpressJS API 构建。

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


【解决方案1】:
  1. 您将回调放在 return 语句之后。当然它永远不会被执行,因为你是从函数返回的。

  2. 如果您运行 Lambda 的子网不是公共子网或没有 NAT 网关,它将无法连接到 Internet,因此无法连接到 AWS API。

【讨论】:

  • 嗨@Çağatay Gürtürk,是的一个愚蠢的错误,因为我使用样板代码来演示我的问题并且没有正确调用回调函数。我已经编辑并修复了它。然而,这不是问题,正如我所说,它确实在 VPC 之外进行了编码,并且在任何一种情况下都不会过早结束。我会听取您的建议并在子网中添加一个 NAT
  • 您可以将 Internet 网关添加到您的子网并解决问题,但您的子网将成为公共子网。只要子网可以访问 Internet,就没有问题。
  • 根据原始问题。我已经有一个带有 Internet 网关的公共子网。我尝试将它换成 NAT,因为我在 VPC 中只有一个路由表,它没有任何区别。你能不能像你说的那样执行我的代码,因为我不相信这是答案
  • @ÇağatayGürtürk 您对公共子网和互联网网关的看法不正确。您必须添加 NAT 网关,因为即使在公有子网中,也不会为 Lambda 函数分配公有 IP,因此它仍然无法访问 VPC 之外的任何内容。
  • 您的公共子网是否可以访问互联网?您可以交叉检查您的路由表以访问互联网吗? @ajmcgarry
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 2019-05-04
  • 2021-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多