gpt4 book ai didi

python - Boto 找出何时使用 Restore() 将对象从 Glacier 恢复到 S3

转载 作者:行者123 更新时间:2023-12-01 04:36:19 27 4
gpt4 key购买 nike

我已在存储桶上配置生命周期策略。有些对象存储在 S3 中,有些对象存储在 Glacier 中。我现在正在尝试将该存储桶中的所有对象恢复到本地磁盘。

使用bucket.list()我得到对象列表。 Glacier 中的对象具有存储类“GLACIER”,因此我可以为这些对象调用 Restore()。到目前为止一切顺利..

但是..该类并不指示该对象是否需要恢复!根据https://docs.aws.amazon.com/AmazonS3/latest/dev/object-archival.html#restore-glacier-objects-concepts从 Glacier 恢复回 S3 的对象保留存储类别“GLACIER”。所以我不能用它来确定是否需要进行恢复。恢复的对象仍然具有 GLACIER 类。

我的问题:如何找出哪些对象仅位于 Glacier 中,因此需要首先恢复()。目前,在存储类“GLACIER”的情况下,我首先尝试 get_contents_to_filename(),如果失败,我调用 Restore() ..但这感觉不对。

最佳答案

当您启动恢复操作时,S3 在 HEAD 请求的 x-amz-restore 响应 header 中传回该恢复操作的状态。 Boto 会将该 header 的值转换为 Key 对象的 ongoing_restore 属性。如果该属性的值为 None,则表示尚未请求或正在进行恢复。如果值为True,则表示对象正在恢复过程中,但操作尚未完成。如果值为False,则表示恢复操作已完成。在这种情况下,Key 对象的 expiry_date 属性将填充恢复的对象到期并从 S3 中删除的时间戳。

您可以使用类似的方法来检查恢复操作的状态:

import boto

s3 = boto.connect_s3()
bucket = s3.get_bucket('mybucket')
for key in bucket:
if key.storage_class == 'GLACIER':
full_key = bucket.get_key(key.name)
if full_key.ongoing_restore is None:
print('Key %s is not being restored' % key.name)
elif full_key.ongoing_restore == True:
print('Key %s restore is in progress' % key.name)
else:
print('Key %s has been restored and will expire %s' % (key.name, key.expiry_date))

循环内的 get_key 调用对于强制向对象发出 HEAD 请求以获取元数据是必需的。否则,您只会得到 LIST 操作返回的数据,不包含对象元数据。

关于python - Boto 找出何时使用 Restore() 将对象从 Glacier 恢复到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31625224/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com