Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 在s3上传到一个bucket时,触发s3复制到另一个bucket_Amazon Web Services_Amazon S3 - Fatal编程技术网

Amazon web services 在s3上传到一个bucket时,触发s3复制到另一个bucket

Amazon web services 在s3上传到一个bucket时,触发s3复制到另一个bucket,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,一旦一个文件被上传到一个s3存储桶,有没有办法触发一个相同文件的副本到另一个具有不同目录结构的s3存储桶 这两个s3存储桶位于同一帐户下 一个可能的解决办法是: 我可以在上传到s3 bucket的客户机中触发它。但是这里的问题是有很多客户端上传原始bucket 我想知道aws是否有触发此类副本的服务 这个答案可以帮助您: 总结是,目前除了s3:ReducedEdundanCylosObject事件外,没有新对象的通知。官方文件如下: 解决方案是在代码中实现逻辑或轮询bucket。它不会是实时的,

一旦一个文件被上传到一个s3存储桶,有没有办法触发一个相同文件的副本到另一个具有不同目录结构的s3存储桶

这两个s3存储桶位于同一帐户下

一个可能的解决办法是: 我可以在上传到s3 bucket的客户机中触发它。但是这里的问题是有很多客户端上传原始bucket


我想知道aws是否有触发此类副本的服务

这个答案可以帮助您:

总结是,目前除了s3:ReducedEdundanCylosObject事件外,没有新对象的通知。官方文件如下:


解决方案是在代码中实现逻辑或轮询bucket。

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

我知道这个问题已经很老了,但当我在这里结束时,其他人可能也会来这里

我认为一个选项可以是lambda函数(我认为在发布这个问题时它还不可用),您可以在某个bucket上启用触发器,这样每当有东西上传到该bucket时,该触发器就会调用lamba函数并执行某些操作。 在你的情况下,你可以在你的bucket上设置一个触发器来监视上传,一旦这个触发器被调用,你的lambda函数应该执行类似“获取该文件并再次上传到另一个bucket”的操作

一些Lambda文档:

还有一些带有S3文档的Lambda:

我认为示例代码可能类似于:

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);
        });
      }
    };
};

Amazon为s3启动了跨地理位置复制,这在本例中可能很有用-