#amazon-s3 #aws-lambda
#amazon-s3 #aws-lambda
Вопрос:
Пожалуйста, примите во внимание следующее:
const prefixes = ['prefix1', 'prefix2']
for (let documentPrefix of prefixes) {
const params = {
Bucket: process.env.DOCUMENT_BUCKET,
LifecycleConfiguration: {
Rules: [
{
Expiration: { Days: process.env.NUMBER_OF_DAYS },
ID: documentPrefix,
Status: 'Enabled',
Filter: {
Prefix: `${documentPrefix}/`,
},
NoncurrentVersionExpiration: {
NoncurrentDays: process.env.NUMBER_OF_DAYS,
},
},
],
},
};
console.log(`Creating lifecycle rule with params: ${JSON.stringify(params)}`);
await s3.putBucketLifecycleConfiguration(params).promise();
}
Я бы ожидал, что в моем ведре будет правило жизненного цикла для каждого элемента моего массива prefixes
, но вместо этого существует только одно правило для последнего элемента в массиве.
Кто-нибудь может объяснить почему? Идентификатор отличается для каждой итерации.
Ответ №1:
Это потому, что putBucketLifecycleConfiguration — это операция PUT, которая перезаписывает предыдущие настройки жизненного цикла путем создания новой конфигурации.
Итак, исправление заключается в том, чтобы отправить все необходимые правила сразу
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
const prefixes = ['prefix1', 'prefix2'];
const rules = prefixes.map(documentPrefix => {
return {
Expiration: { Days: process.env.NUMBER_OF_DAYS },
ID: documentPrefix,
Status: 'Enabled',
Filter: {
Prefix: `${documentPrefix}`,
},
NoncurrentVersionExpiration: {
NoncurrentDays: process.env.NUMBER_OF_DAYS,
}
}
});
async function run() {
const params = {
Bucket: process.env.DOCUMENT_BUCKET,
LifecycleConfiguration: {
Rules: rules
},
};
console.log(`Creating lifecycle rule with params: ${JSON.stringify(params)}`);
await s3.putBucketLifecycleConfiguration(params).promise();
}
run();
В результате, наконец, применяются два правила (сегмент s3> управление)
Комментарии:
1. Спасибо, это идеальный ответ! Я думал, что каждая конфигурация жизненного цикла может иметь несколько правил.