3

将文件上传到 s3 存储桶后,有没有办法触发将同一文件复制到具有不同目录结构的另一个 s3 存储桶?

两个 s3 存储桶在同一个帐户下。

一种可能的解决方案是 - 我可以在上传到 s3 存储桶的客户端中触发它。但这里的问题是有很多客户端上传原始存储桶。

我想知道 aws 是否有任何此类服务来触发此类副本。

4

3 回答 3

4

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

我认为一个选项可能是 lambda 函数(我认为在发布此问题时它不可用),您可以在某个存储桶上启用触发器,以便每次将某些内容上传到该存储桶时,此触发器都会调用一个lamba函数并做一些事情。在您的情况下,您可以在您的存储桶上设置一个触发器以监视上传,一旦调用该触发器,您的 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);
        });
      }
    };
};
于 2017-04-28T17:29:45.680 回答
3

这个答案可以帮助你:新 S3 对象的通知

总结就是,此时除了s3:ReducedRedundancyLostObject事件外,没有任何新对象的通知。官方文档在这里:http ://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTnotification.html

解决方案是在您的代码中实现逻辑或轮询存储桶。

于 2013-08-12T15:52:40.367 回答
1

它不会是实时的,但延迟只有几分钟——在第一个存储桶上启用日志记录;设置一个作业来下载和解析这些日志——其中将包括 PUT 请求——并使用它来了解需要同步哪些文件。S3 中没有像这样同步存储桶的内置机制。

于 2013-08-15T03:29:19.877 回答