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