将文件上传到 s3 存储桶后,有没有办法触发将同一文件复制到具有不同目录结构的另一个 s3 存储桶?
两个 s3 存储桶在同一个帐户下。
一种可能的解决方案是 - 我可以在上传到 s3 存储桶的客户端中触发它。但这里的问题是有很多客户端上传原始存储桶。
我想知道 aws 是否有任何此类服务来触发此类副本。
将文件上传到 s3 存储桶后,有没有办法触发将同一文件复制到具有不同目录结构的另一个 s3 存储桶?
两个 s3 存储桶在同一个帐户下。
一种可能的解决方案是 - 我可以在上传到 s3 存储桶的客户端中触发它。但这里的问题是有很多客户端上传原始存储桶。
我想知道 aws 是否有任何此类服务来触发此类副本。
我知道这个问题很老了,但是当我最终来到这里时,其他一些人也可能会来到这里。
我认为一个选项可能是 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);
});
}
};
};
这个答案可以帮助你:新 S3 对象的通知
总结就是,此时除了s3:ReducedRedundancyLostObject事件外,没有任何新对象的通知。官方文档在这里:http ://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketPUTnotification.html
解决方案是在您的代码中实现逻辑或轮询存储桶。
它不会是实时的,但延迟只有几分钟——在第一个存储桶上启用日志记录;设置一个作业来下载和解析这些日志——其中将包括 PUT 请求——并使用它来了解需要同步哪些文件。S3 中没有像这样同步存储桶的内置机制。