AWS:Boto3配置存储桶生命周期 - XML格式错误

7
以下代码应该在一个存储桶/存储桶列表上启用版本控制,然后设置生命周期配置。请参考lifecycle configuration
import boto3

# Create session
s3 = boto3.resource('s3')
s3Client = boto3.client('s3')

# Bucket list
buckets = ['BUCKETNAMEHERE']

# iterate through list of buckets
for bucket in buckets:
    # Enable Versioning
    bucketVersioning = s3.BucketVersioning(bucket)
    bucketVersioning.enable()

    # Configure Lifecycle
    s3Client.put_bucket_lifecycle_configuration(
        Bucket=bucket,
        LifecycleConfiguration={
            'Rules': [
                {
                    'Status': 'Enabled',
                    'NoncurrentVersionTransitions': [
                        {
                            'NoncurrentDays': 7,
                            'StorageClass': 'GLACIER'
                        },
                    ],
                    'NoncurrentVersionExpiration': {
                        'NoncurrentDays': 30
                    }
                },
            ]
        }
    )

print "Versioning and lifecycle have been enabled for buckets."

然而,每当我运行它时,都会出现以下错误:
  File "putVersioning.py", line 42, in <module>
    'NoncurrentDays': 30
  File "/home/user/.local/lib/python2.7/site-packages/botocore/client.py", line 253, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/home/user/.local/lib/python2.7/site-packages/botocore/client.py", line 557, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (MalformedXML) when calling the PutBucketLifecycleConfiguration operation: The XML you provided was not well-formed or did not validate against our published schema

据我所知,一切看起来都是正确的吗?
2个回答

10
根据这里的文档,需要添加Filter元素,这是亚马逊API要求的,但令人困惑的是,boto并不需要它。我添加了已弃用的Prefix参数,而不是Filter,似乎也可以正常工作。

哈哈!谢谢。我很确定我的语法是正确的。感谢你的帮助! - flyingcars34

2

这个对我有效:

        client.put_bucket_lifecycle_configuration(
            Bucket=s3_bucket,
            LifecycleConfiguration={
                'Rules': [
                    {
                        'Expiration': {'Days': 5},
                        'Filter': {'Prefix': 'folder1/'},
                        'ID': 'id',
                        'Status': 'Enabled'
                    }
                ]
            })

要查看实际模式,请在S3中创建一个新规则,然后使用client.get_bucket_lifecycle_configuration(Bucket=s3_bucket)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接