首页 > 解决方案 > 使用 boto3 创建 S3 生命周期策略时出现格式错误的 XML 错误

问题描述

我正在尝试使用 boto3 将生命周期规则添加到 s3 存储桶。但是遇到了以下错误“在调用 PutBucketLifecycleConfiguration 操作时发生错误 (MalformedXML):您提供的 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
                            }
                        },
                    ]
                }
            )

标签: amazon-web-servicesamazon-s3amazon-glaciers3-lifecycle-policy

解决方案


这是因为ExpiredObjectDeleteMarker标志不能与Datesor一起使用Days。这就是MalformedXML异常的原因。在随附的参考资料中对此进行了解释。

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

参考: put_bucket_lifecycle_configuration


推荐阅读