2017-03-09 136 views
2

运行我有一个简单的lambda函数如下使用AWS SDK从LAMBDA在VPC

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开发工具包丢失?

+0

这个问题每周至少要问一次。请查看以下一些其他问题的答案:http://stackoverflow.com/questions/38188532/why-aws-lambda-within-vpc-can-not-send-message-to-sns http:// stackoverflow.com/questions/35423246/adding-aws-lambda-with-vpc-configuration-causes-timeout-when-accessing-s3 –

+0

@MarkB这一点经常被问到的事实只是表明它需要一个适当的文档亚马逊提供的用例或示例。我之前一直在用这些路线回答这些路线,所以我可能错过了一些东西或者弄得一团糟。我将重新开始,看看我能否取得成功 – ajmcgarry

+1

AWS已经在很多地方记录了这一点,如http://docs.aws.amazon.com/lambda/latest/dg/vpc.html和官方的Lambda VPC在此发布声明:https://aws.amazon.com/blogs/aws/new-access-resources-in-a-vpc-from-your-lambda-functions/您希望从他们那里得到什么具体信息,他们不是为你提供?无论如何,这就是您需要提供亚马逊的反馈,而不是将它发布到这里,他们永远不会看到它。 –

回答

0
  1. 您在return语句后进行回调。当然,它永远不会被执行,因为你从函数返回。

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

+0

Hi @ÇağatayGürtürk,是一个愚蠢的错误,由于我采取样板代码来演示我的问题,并没有正确调用回调函数。我编辑并修复了这个问题。然而,这不是问题,正如我所说的那样,它在VPC之外编码,并且在任何情况下都不会提前结束。我会采取建议并将NAT添加到子网 – ajmcgarry

+0

您可以将Internet网关添加到您的子网并解决问题,但您的子网将成为公有子网。只要子网可以访问Internet,就不会有问题。 –

+0

根据原始问题。我已经拥有一个带有Internet网关的公共子网。我试图将它换成NAT,因为我在VPC中只有一个路由表,并没有什么区别。你可以尝试执行我的代码,因为你说它可以完成,因为我不相信这是答案 – ajmcgarry