我以编程方式创建和设置带有版本控制和生命周期规则的boto(2.28.0)的s3存储桶,自动删除N天之后文件的非当前版本。
按照此处的示例:
我有类似的东西,效果很好。
# Connect to s3.
conn = S3Connection(aws_access_key, aws_secret_key)
# Create bucket.
bucket = conn.create_bucket('example_bucket_name')
# Turn on versioning for this bucket.
bucket.configure_versioning(True)
# Add a lifecycle rules.
to_glacier = Transition(days=30, storage_class='GLACIER')
rule = Rule('ruleid', 'logs/', 'Enabled', transition=to_glacier)
lifecycle = Lifecycle()
lifecycle.append(rule)
# Configure the bucket.
bucket.configure_lifecycle(lifecycle)
但似乎并没有支持版本化的存储桶规则,如下所述:
http://docs.aws.amazon.com/AmazonS3/latest/dev/intro-lifecycle-rules.html
基本上NoncurrentDays
和NoncurrentVersionExpiration
规则不能用boto定义。如果我通过控制台配置一个带有这些规则的存储桶,我可以通过获取生命周期来查看它们,并且生命周期具有可以检查的NoncurrentDays和NoncurrentVersionExpiration属性。
lifecycle = bucket.get_lifecycle_config()
lifecycle[0].temp.NoncurrentDays
但是,似乎不支持将这些规则添加到另一个存储桶中。
有没有人知道是否有解决方法?我假设有一种方法可以手动构建和附加xml文件,但我没有在任何地方看到它的文档。
答案 0 :(得分:0)
我不相信boto版本(截至2014 / 2.32之后......)支持非当前属性的设置。 boto中的lifecycle.py代码仅讨论前缀,状态和到期时间。
def __init__(self, id=None, prefix=None, status=None, expiration=None):
self.id = id
self.prefix = prefix
self.status = status
self.expiration = expiration
虽然不是您直接问题的答案 - 对于那些寻找解决方案的人来说,awscli工具(至少版本1.6+)支持如下方法: {
aws s3api put-bucket-lifecycle --bucket bucket-name-dev --lifecycle-configuration '{"Rules": [{"Status": "Enabled","Prefix": "","NoncurrentVersionExpiration": {"NoncurrentDays": 15}, "ID": "del_versions_15d"}]}'
(注意json对象作为字符串传递)