如何在Ruby中为S3生命周期配置设置前缀与多标签组合过滤规则
问题原因
你使用的 aws-sdk-s3 v1.103.0 版本在序列化生命周期规则时,对AND过滤器下的多标签参数格式有特殊要求,你当前使用的复数键 tags 会生成不符合S3 Schema规范的XML结构,因此触发格式校验错误。
解决方法
将规则中and下的复数键 tags 改为单数的 tag 即可,修改后的规则代码如下:
aws_s3_backup_prefix = "production_backup" # 实际使用时从环境变量中读取 rule_expire_yearly_after_10y = { id: "Expire 1 January backups after 10 years", filter: { and: { prefix: aws_s3_backup_prefix, # 仅修改此处的键名即可,标签数组内容保持不变 tag: [ { key: 'date-month-day', value: '1'}, { key: 'date-month-num', value: '1'} ] } }, status: 'Enabled', expiration: { days: 3650 } }
原理说明
旧版本Ruby S3 SDK序列化Hash为XML时,复数键tags会额外生成一层<Tags>包裹节点,但S3官方的生命周期规则Schema要求<And>节点下直接放置多个<Tag>子节点,不需要外层的包裹节点,因此会返回XML格式错误。
该单数tag的写法在新版SDK中也可以正常兼容,如果你后续升级SDK到最新版本,也可以切换回官方文档标注的tags写法。
内容的提问来源于stack exchange,提问作者aenw
相关产品推荐
相关产品推荐

