Javascript:将所有S3项从一个bucket复制到另一个bucket

Javascript:将所有S3项从一个bucket复制到另一个bucket,javascript,node.js,amazon-web-services,aws-lambda,aws-sdk,Javascript,Node.js,Amazon Web Services,Aws Lambda,Aws Sdk,我正在尝试将所有项目(文件和文件夹)从一个s3 bucket复制到另一个。我在AWS Lambda上运行此命令,因此,sync对我来说不是一个好选项,因为执行sync命令可能需要5分钟以上。以下是我的JS代码: var AWS = require("aws-sdk"); exports.handler = (event, context, callback) => { var s3 = new AWS.S3(); var sourceBucket = "source-bu

我正在尝试将所有项目(文件和文件夹)从一个
s3 bucket
复制到另一个。我在AWS Lambda上运行此命令,因此,sync对我来说不是一个好选项,因为执行sync命令可能需要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.");
    }
});
};
不知何故,这段代码不起作用。我想在这里实现两件事

  • 将所有数据从一个bucket复制到另一个bucket
  • 一旦我实现了复制操作,我将每天定期运行此代码,创建一个新文件夹到“destination bucket”,并每天将所有数据复制到新创建的文件夹中

如果有人能帮助我,我将不胜感激。

如果运行aws s3 sync所需时间超过5分钟,则使用Node.js在Lambda中仍可能失败。使用Node.js API for AWS没有什么妙招。如果您真的需要运行超过5分钟,有一些策略可以检测您的函数是否即将耗尽时间。请参见此处的“context.getRemainingTimeInMillis”:

但要回答您的问题,首先需要使用
s3.listObjectsV2
()列出bucket中的所有对象

一旦有了对象数组,就需要使用
s3.copyObject
()

您的代码现在正试图从源bucket中获取一个键为
/
的对象,该键不存在。S3存储桶不是真正的目录。它们有一些类似目录的行为,特别是在在线web控制台中,但实际上它只是一组键值对