我正在尝试将所有项目(文件和文件夹)从一个s3 bucket
复制到另一个。我正在AWS Lambda
上运行此命令,因此,同步对我来说不是一个好选择,因为执行同步命令可能需要5分钟以上的时间。这是我的JS代码:
var AWS = require("aws-sdk");
exports.handler = (event, context, callback) => {
var s3 = new AWS.S3();
var sourceBucket = "source-bucket";
var destinationBucket = "destination-bucket";
var objectKey = "/";
var copySource = encodeURI(sourceBucket + objectKey);
var copyParams = { Bucket: destinationBucket, CopySource: copySource, Key: objectKey
};
s3.copyObject(copyParams, function(err, data) {
if (err) {
console.log(err, err.stack);
} else {
console.log("S3 object copy successful.");
}
});
};
不知何故,此代码无法正常工作。我想在这里实现两件事。
如果有人可以帮助我,我将不胜感激。
答案 0 :(得分:0)
如果运行aws s3 sync
的时间超过5分钟,则在使用Node.js的Lambda中仍然可能失败。使用适用于AWS的Node.js API没有万灵丹。如果您确实需要运行5分钟以上,则可以使用一些策略来检测您的功能是否即将用完。在此处查看“ context.getRemainingTimeInMillis”:https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html
但是要回答您的问题,您需要首先使用s3.listObjectsV2
(https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#listObjectsV2-property)列出存储桶中的所有对象。
一旦有了对象数组,就需要遍历并使用s3.copyObject
(https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#copyObject-property)复制每个对象
您的代码现在正尝试使用键/
从源存储桶中获取单个对象,该键不存在。 S3存储桶不是真正的目录。它们具有类似目录的行为,尤其是在在线Web控制台中,但实际上它只是键值对的集合。