是否可以在不复制对象的情况下使用 lambda 函数添加或更新 s3 对象元数据? This 2 year old post says that we do need to make a copy , 但它已经 2 岁了,所以也许情况已经改变了?
最佳答案
使用s3.headObject
通过 object.Metadata 方法和设置相应的元数据
我创建 lambda 并在创建新对象时将其订阅到事件:
console.log('Loading function');
const aws = require('aws-sdk');
const s3 = new aws.S3({ apiVersion: '2006-03-01' });
exports.handler = async (event, context, callback) => {
console.log('Received event:', JSON.stringify(event, null, 2));
const bucket = event.Records[0].s3.bucket.name;
const key = decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, ' '));
var params = {
Bucket: bucket,
Key: key,
CopySource: encodeURIComponent( bucket+"/"+key ),
Metadata: {
mode: '33188',
},
MetadataDirective: 'REPLACE',
};
try {
var data = await s3.copyObject(params).promise();
console.log('UPDATE SUCCESS', data);
} catch (err) {
console.log(err);
const message = `Error updating object ${key} from bucket ${bucket}. Make sure they exist and your bucket is in the same region as this function.`;
console.log(message);
throw new Error(message);
}
};
警告不要忘记这一点:
否则会陷入死循环
关于javascript - 在不执行对象复制的情况下使用 lambda 更新 amazon s3 对象元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49766843/