amazon-s3 - AWS S3 putBucketLifecycleConfiguration overwiting
问题描述
请考虑以下几点:
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 都不同。
解决方案
这是因为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();
推荐阅读
- c++ - 不明白为什么会出现异常:访问冲突读取位置 0x00000000
- html - HTML 重叠 div 元素
- wpf - WPF 工具包颜色选择器在工具栏内的显示问题
- r - 根据分隔符拆分列并创建新列
- c# - 简化正则表达式分组
- javascript - 如何在 React/Recharts.js 中手动触发散点上的点击事件
- c# - 如何将 DateTimePicker 的数据保存到数据库中
- c# - .NET LINQ 查询准备问题
- c++ - function(char *something) 和 function(char &something) 有何不同?
- javascript - 在 NodeJs 中呈现 jquery POST 请求的响应