【问题标题】:Javascript: Copy all S3 items from one bucket to otherJavascript:将所有 S3 项目从一个存储桶复制到另一个存储桶
【发布时间】:2018-08-01 04:45:19
【问题描述】:

我正在尝试将所有项目(文件和文件夹)从一个 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.");
    }
});
};

不知何故,这段代码不起作用。我想在这里实现两件事。

  • 将所有数据从一个存储桶复制到另一个存储桶
  • 一旦我实现了复制操作,我会每天定期运行这段代码,在“目标存储桶”中创建一个新文件夹,并每天将所有数据复制到新创建的文件夹中。

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

【问题讨论】:

    标签: javascript node.js amazon-web-services aws-lambda aws-sdk


    【解决方案1】:

    如果运行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 控制台中,但实际上它只是键值对的集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 2018-11-22
      • 1970-01-01
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-01
      相关资源
      最近更新 更多