Boto使用版本控制和生命周期配置s3存储桶

时间:2014-05-29 00:17:01

标签: amazon-s3 boto

我以编程方式创建和设置带有版本控制和生命周期规则的boto(2.28.0)的s3存储桶,自动删除N天之后文件的非当前版本。

按照此处的示例:

  

http://boto.readthedocs.org/en/latest/s3_tut.html

我有类似的东西,效果很好。

# 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

基本上NoncurrentDaysNoncurrentVersionExpiration规则不能用boto定义。如果我通过控制台配置一个带有这些规则的存储桶,我可以通过获取生命周期来查看它们,并且生命周期具有可以检查的NoncurrentDays和NoncurrentVersionExpiration属性。

lifecycle = bucket.get_lifecycle_config()
lifecycle[0].temp.NoncurrentDays

但是,似乎不支持将这些规则添加到另一个存储桶中。

有没有人知道是否有解决方法?我假设有一种方法可以手动构建和附加xml文件,但我没有在任何地方看到它的文档。

1 个答案:

答案 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对象作为字符串传递)