【问题标题】:Create / Add lifecylce configuration for individual object为单个对象创建/添加生命周期配置
【发布时间】:2020-07-18 19:28:54
【问题描述】:

我想使用 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

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

【问题讨论】:

  • 这就是你所有的代码吗?你从哪里得到fullPathOfObject
  • 这是我从参数传递的。完整路径是对象的位置。我们可以给前缀起任何名字。

标签: node.js amazon-web-services amazon-s3 aws-sdk


【解决方案1】:

您正在尝试等待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

【讨论】:

  • 由于我的代码,已设置对象的到期日期。我当时正在等待对象删除。之后我会应用你的代码。
  • 不,它不工作,它取代了以前的。但我可以使用 aws 网站添加新的生命周期。
  • 你添加了额外的规则吗?
  • 这是一个put操作,所以你需要同时添加两个策略,否则它会覆盖之前的......
  • 是的 Razki,现在它正在工作。我首先使用 getlifecycle 配置获取所有生命周期规则,然后将新规则附加到该列表,然后使用 putbucketlifecycleconfiguration。
【解决方案2】:

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

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

注意:ID 应该是唯一的。

【讨论】:

    猜你喜欢
    • 2016-07-31
    • 2014-12-22
    • 2021-06-14
    • 2021-05-23
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    相关资源
    最近更新 更多