javascript - 在不执行对象复制的情况下使用 lambda 更新 amazon s3 对象元数据?

标签 javascript amazon-web-services amazon-s3 aws-lambda

是否可以在不复制对象的情况下使用 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);
    }
};

enter image description here

警告不要忘记这一点:

enter image description here

否则会陷入死循环

关于javascript - 在不执行对象复制的情况下使用 lambda 更新 amazon s3 对象元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49766843/

相关文章:

javascript - IE 不允许我使用 javascript 设置文本区域值

javascript - 获取可拖动元素相对于元素(内部)的位置

ruby-on-rails - 操作系统 : Rails Layer connect to Elasticache : Redis

apache-flex - 您可以通过 Flex 使用 Amazon S3 吗?

amazon-web-services - 如何使用无服务器部署没有身份源的 API 网关自定义授权方?

amazon-s3 - 如何指定S3 bucket region SAM模板

static - Nginx image_filter

javascript - 为什么 EventMachine 比 Node 慢那么多?

java - NoSuchMethodError : com. amazonaws.services.s3.model.S3ObjectInputStream.readAllBytes()

javascript - 你可以使用 Node 检查器来调试与工头一起运行的 node.js 应用程序吗