使用 boto3 创建 S3 生命周期策略时出现 Malformed XML 错误

Malformed XML error while creating the S3 life cycle policy using boto3

我正在尝试使用 boto3 将生命周期规则添加到 s3 存储桶。但遇到以下错误 “添加生命周期时出错发生错误(格式错误XML) 调用 PutBucketLifecycleConfiguration 操作时:您提供的 XML 格式不正确或未根据我们发布的模式进行验证。 知道为什么我会收到此错误吗?

这是我要创建的规则

s3 = boto3.resource("s3")
bucket_lifecycle_configuration = s3.BucketLifecycleConfiguration(bucket_name)
date = date.today()


response = bucket_lifecycle_configuration.put(
                LifecycleConfiguration={
                    'Rules': [
                        {
                            'Expiration': {
                                'Date': datetime(date.year, date.month, date.day),
                                 
                                'ExpiredObjectDeleteMarker': True
       
                                
                            },
                            'ID': 'Move unused bucket to Glacier',
                            'Prefix': '',
                            'Status': 'Enabled',
                            'Transitions': [
                                {
                                    'Date': datetime(date.year, date.month, date.day),
                                    'StorageClass': 'GLACIER'
                                }
                            ],
                            'NoncurrentVersionTransitions': [
                                {
                                    'NoncurrentDays': 123,
                                    'StorageClass': 'GLACIER'
                                }
                            ],
                            'NoncurrentVersionExpiration': {
                                'NoncurrentDays': 123
                            },
                            'AbortIncompleteMultipartUpload': {
                                'DaysAfterInitiation': 123
                            }
                        },
                    ]
                }
            )

这是因为 ExpiredObjectDeleteMarker 标志不能与 DatesDays 一起使用。这就是 MalformedXML 异常的原因。它在所附参考文献中有解释。

另请注意 NoncurrentVersionExpiration 日期不能与 NoncurrentVersionTransitions 日期相同。到期日期应在过渡日期之后。

参考: put_bucket_lifecycle_configuration