AWS lambda 函数从 S3 文件夹中删除文件
Posted
技术标签:
【中文标题】AWS lambda 函数从 S3 文件夹中删除文件【英文标题】:AWS lambda function delete files from S3 folder 【发布时间】:2020-12-09 23:06:09 【问题描述】:我将一些数据从漏斗导入 S3 存储桶。之后,Lambda 函数将数据复制到 Redshift 中的表中,我尝试从存储桶文件夹中删除所有复制的对象,但一直超时。
这是我的代码:
const Promise = require('bluebird');
const Pool = require('pg');
const AWS = require('aws-sdk');
async function emptyS3Directory(bucket, dir)
const listParams =
Bucket: bucket,
Prefix: dir
;
var s3 = new AWS.S3();
s3.listObjectsV2(listParams, function(err, data) // Here I always getting timeout
);
.....
编辑.... 这是函数的代码。
async function DeleteAllDataFromDir(bucket, dir)
const listParams =
Bucket: bucket,
Prefix: dir
;
var s3 = new AWS.S3();
const listedObjects = await s3.listObjects(listParams).promise();
console.log("reponse", listedObjects);
if (listedObjects.Contents.length === 0) return;
const deleteParams =
Bucket: bucket,
Delete: Objects: []
;
listedObjects.Contents.forEach(( Key ) =>
deleteParams.Delete.Objects.push( Key );
);
await s3.deleteObjects(deleteParams).promise();
if (listedObjects.IsTruncated) await DeleteAllDataFromDir(bucket, dir);
我第一次将超时设置为 2 分钟,然后我将其更改为 10 分钟,我得到了同样的错误::
"errorType": "NetworkingError",
"errorMessage": "connect ETIMEDOUT IP:port",
"code": "NetworkingError",
"message": "connect ETIMEDOUT IP:port",
"errno": "ETIMEDOUT",
"syscall": "connect",
"address": "IP",
"port": port,
"region": "eu-west-2",
"hostname": "hostName",
"retryable": true,
"time": "2020-12-10T08:36:29.984Z",
"stack": [
"Error: connect ETIMEDOUT 52.95.148.74:443",
" at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1107:14)"
]
【问题讨论】:
您为 Lambda 配置了什么超时?err
的值是多少? CloudWatch 中的任何内容可以为我们提供更多见解?
不应该是listObjects而不是listObjectsV2吗?
@Nonik 其实有这么一个函数/属性:docs.aws.amazon.com/AWSjavascriptSDK/latest/AWS/…
另外,由于你的方法是异步的,你可以简单地做 const response = await s3.listObjectsV2(listParams).promise();并确保您的前缀正确
您的 AWS Lambda 函数是否配置为使用 VPC? (提示:最好不连接到 VPC。)
【参考方案1】:
根据错误的性质,您的存储桶可能与您的 lambda 函数位于不同的区域。
在构建 S3 客户端时提供region hash 作为选项。
var s3 = new AWS.S3(region: 'bucket-region-hash');
要计算区域哈希,请转到 S3 管理控制台。 然后从边栏中,单击“存储桶”。在结果视图中,您将找到区域哈希。就是下图用金色标记的那个。
【讨论】:
我试过了,我得到了同样的错误。我应该为 s3 或 lambda 设置任何特殊权限吗?以上是关于AWS lambda 函数从 S3 文件夹中删除文件的主要内容,如果未能解决你的问题,请参考以下文章