当向S3存储桶上传文件时,触发S3复制到另一个存储桶。

3
一旦文件上传到s3存储桶中,是否有任何方法可以触发将相同的文件复制到具有不同目录结构的另一个s3存储桶中?
这两个s3存储桶在同一帐户下。
一个可能的解决方案是 - 我可以在上传到s3存储桶的客户端中触发此操作。但问题在于有很多客户端上传原始存储桶。
我想知道aws是否有任何这样的服务来触发此类复制。

亚马逊推出了S3的跨地域复制功能,这在这种情况下可能非常有用 - https://aws.amazon.com/blogs/aws/new-cross-region-replication-for-amazon-s3/ - Arvindkumar
3个回答

5

我知道这个问题很老,但是因为我最终来到了这里,其他人可能也会来到这里。

我认为一个选项可能是lambda函数(我认为在发布这个问题的时候还没有),在lambda函数中可以启用对某个存储桶的触发器,这样每当向该存储桶上传文件时,该触发器将调用一个lambda函数并执行某些操作。在您的情况下,您可以在您的存储桶上设置一个触发器以监视上传情况,一旦触发该触发器,您的lambda函数应该做一些像“获取该文件并将其重新上传到另一个存储桶”的事情。

一些Lambda文档:https://aws.amazon.com/pt/documentation/lambda/

以及一些带有S3的Lambda文档:http://docs.aws.amazon.com/lambda/latest/dg/with-s3.html

我认为示例代码可能是:

const aws = require('aws-sdk');

const s3 = new aws.S3({ apiVersion: '2006-03-01' });

exports.handler = (event, context, callback) => {
    const bucket = event.Records[0].s3.bucket.name;
    const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));

    const params = {
        Bucket: bucket,
        Key: key
    };

    s3.getObject = (params) => {
      if(err){
        console.log('Error found trying to get Object from S3: ', err);
      }
      else{
        console.log('Get Object done ', data.Body);
        const param_copy = {Bucket: 'your_copy_bucket', Key: 'your_copy_key', Body: data.Body};
        s3.upload = (param_copy) => {
          if (err) console.log('Problem on uploading: ', err);

          console.log('done');
          callback(null);
        });
      }
    };
};

3

1

虽然不是实时的,但延迟只有几分钟--在第一个桶上启用日志记录;设置一个任务来下载和解析这些日志--包括PUT请求--并使用此信息知道需要同步哪些文件。S3中没有内置机制可以像这样同步桶。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接