为单个对象创建/添加生命周期配置

Create / Add lifecylce configuration for individual object

我想使用 aws-sdk Node Js 为 S3 存储桶中的某些对象设置不同的到期日期。为此,我使用了 putBucketLifecycleConfigurationputBucketLifecycle。据我所知,我使用不同的前缀(=对象名称)来设置不同对象的到期日。但是这种方法不是创建新的生命周期,而是替换现有的生命周期。

const params = {
 Bucket: Env.AWS_BUCKET, /* required */
 LifecycleConfiguration: {
   Rules: [
    {
      Expiration: {
        Days: 1
    }, 
  Filter: {
     Prefix: fullPathOfObject
   }, 
  Status: "Enabled"
  }
 ]
}
};

const putBucketLifecycleConfigRequest = s3.putBucketLifecycleConfiguration(params);

putBucketLifecycleConfigRequest.
on('success', function(response: any) { 
console.log("success");
}).
on('error', function(error: any) {
console.log(error);
}).
on('complete', function(response: any) {
console.log("complete");
}).
send();

/***
const putBucketLifecycleRequest = s3.putBucketLifecycle(params);

putBucketLifecycleRequest.
 on('success', function(response: any) { 
 console.log("success");
 }).
 on('error', function(error: any) {
 console.log("error");
 }).
 on('complete', function(response: any) {
 console.log("complete");
 }).
 send();

**/

我阅读了很多答案和文档,但不知道如何在 s3 存储桶中创建多个生命周期。

在 AWS 文档中:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putBucketLifecycle-property

其写为“为存储桶创建新的生命周期配置或替换现有的生命周期配置”。那么,我们不能为单个对象创建/添加生命周期吗?

您正在尝试等待 callback,您需要等待 promise

const params = {
    Bucket: 'aws-bucket-name' 
    LifecycleConfiguration: {
        Rules: [
            {
                Expiration: {
                    Days: 1,
                },
                Filter: {
                    Prefix: fullPathOfObject,
                },
                Status: 'Enabled',
            },
        ..add another rule here
        ],
    },
}

await s3.putBucketLifecycleConfiguration(params).promise()

根据下面的文档,这将创建一个新的 bucket 生命周期(如果那里还没有)并替换现有的。所以这是按预期工作的。

据我所知,您需要添加另一个规则

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putBucketLifecycleConfiguration-property

putBucketLifecycleConfiguration creates a new lifecycle configuration for the bucket or replaces an existing lifecycle configuration.

因此,首先使用 getBucketLifecycleConfiguration 获取所有生命周期规则,然后将新规则附加到该列表,然后使用 putBucketLifecycleConfiguration

注意:ID 应该是唯一的。