Создать / добавить конфигурацию lifecylce для отдельного объекта - PullRequest
0 голосов
/ 06 апреля 2020

Я хочу установить другую дату окончания срока действия для некоторого объекта в корзине S3, используя aws -sdk Node Js. Я использовал putBucketLifecycleConfiguration и putBucketLifecycle для этой цели. Насколько я знаю, я использовал другой префикс (= имя объекта), чтобы установить срок действия для другого объекта. Но этот метод вместо создания нового жизненного цикла заменяет существующий.

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

Написано " Создает новую конфигурацию жизненного цикла для корзины или заменяет существующую конфигурацию жизненного цикла ». Итак, мы не можем создать / добавить lifecylce для отдельного объекта?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Вы пытаетесь дождаться 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()

В соответствии с документацией ниже, это создаст новый ведро жизненный цикл если там его еще нет, замените существующий. Так что это работает, как и ожидалось.

Насколько я знаю, вам нужно добавить еще одно правило

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putBucketLifecycleConfiguration -свойство

0 голосов
/ 10 апреля 2020

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

Итак, сначала извлеките все правила жизненного цикла, используя getBucketLifecycleConfiguration, а затем добавьте новое правило в этот список и затем используйте putBucketLifecycleConfiguration.

Примечание: ID должен быть уникальным.

...