请考虑以下几点:
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
中的每一项都有一个生命周期规则,但实际上,数组中的最后一项只有一个规则。
有谁能解释一下原因吗?每次迭代的ID都是不同的。
发布于 2021-02-09 06:01:57
这是因为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存储桶>管理)
https://stackoverflow.com/questions/66107067
复制相似问题