NodeJS 与S3通信时Lambda超时

dgiusagp  于 2023-06-22  发布在  Node.js
关注(0)|答案(5)|浏览(158)

我尝试使用Lambda列出S3存储桶中的所有文件
代码如下所示:

var AWS = require('aws-sdk');
var s3 = new AWS.S3();

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

   s3.listObjectsV2({
       Bucket: "bucketname",
   }, function(err, data) {
       console.log("DONE : " + err + " : " + data); 

       callback(null, 'Hello from Lambda');
    });
};

使用上面的方法,我从来没有得到“完成”打印在所有。日志不显示任何信息,只显示超时。
我能在这里做些什么故障排除吗?我本以为至少错误会显示在“完成”部分。

puruo6ea

puruo6ea1#

感谢楼上的Michael。问题是它在VPC内运行。如果我将其更改为无VPC,则可以正常工作。如果您需要在VPC中运行,您的解决方案可能会有所不同。

hrirmatl

hrirmatl2#

如果您在VPC内运行代码,请确保创建VPC端点。
下面是教程:https://aws.amazon.com/blogs/aws/new-vpc-endpoint-for-amazon-s3/

n7taea2i

n7taea2i3#

如果您在VPC内部运行代码,请确保VPC子网及其路由表条目正确(路由:0.0.0.0/0和target = igw-xxxx)。此外,必须添加VPC端点路由,以便通过端点与s3通信。

ergxz8rk

ergxz8rk4#

在我的例子中,我选择了2个不同的子网,1个是私有的,另一个是公共的。所以它有时起作用,有时不起作用。我把两个子网都改成了私有的(路由中有NAT网关),现在它工作起来没有超时错误。

eoigrqb6

eoigrqb65#

我也有同样的问题。
我的lambda函数位于VPC内的私有子网内。
我在同一个VPC的公有子网中生成了一个NAT示例。
为lambda函数和NAT示例的安全组定义了必要的规则。
因此,使用NAT示例解决了我的问题,与NAT网关相比,它对我来说是一个更便宜的解决方案。

相关问题