Boto 找出何时使用 restore() 将对象从 Glacier 恢复回 S3
Boto finding out when to use restore() to restore object from Glacier back to S3
我已经为存储桶配置了生命周期策略。有些对象存储在 S3 中,有些则存储在 Glacier 中。我现在正在尝试将该存储桶中的所有对象恢复到本地磁盘。
使用 bucket.list() 我得到对象列表。 Glacier 中的对象具有存储空间 class 'GLACIER',因此我可以为这些对象调用 restore()。到目前为止一切顺利..
但是.. class 并不表示对象是否需要恢复!根据 https://docs.aws.amazon.com/AmazonS3/latest/dev/object-archival.html#restore-glacier-objects-concepts 从 Glacier 恢复到 S3 的对象保持存储 class 'GLACIER'。所以我不能用它来确定是否需要进行恢复。恢复的对象仍然具有 class GLACIER。
我的问题:如何找出哪些对象仅在 Glacier 中,因此需要先恢复 ()。目前在存储 class 'GLACIER' 的情况下,我首先尝试 get_contents_to_filename(),如果失败,我调用 restore().. 但感觉不对。
当您启动恢复操作时,S3 在 HEAD
请求的 x-amz-restore
响应 header 中传回该恢复操作的状态。 Boto 会将 header 的值转换为 Key
object 的 ongoing_restore
属性。如果该属性的值为 None
,则表示没有请求恢复或正在进行恢复。如果值为 True
,则表示 object 正在恢复,但操作尚未完成。如果值为 False
,则表示还原操作已完成。在这种情况下,Key
object 的 expiry_date
属性将填充为恢复的 object 何时过期并从 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
调用对于在 object 上强制执行 HEAD 请求以获取元数据是必要的。否则,您只会得到不包含 object 元数据的 LIST 操作返回的数据。
我已经为存储桶配置了生命周期策略。有些对象存储在 S3 中,有些则存储在 Glacier 中。我现在正在尝试将该存储桶中的所有对象恢复到本地磁盘。
使用 bucket.list() 我得到对象列表。 Glacier 中的对象具有存储空间 class 'GLACIER',因此我可以为这些对象调用 restore()。到目前为止一切顺利..
但是.. class 并不表示对象是否需要恢复!根据 https://docs.aws.amazon.com/AmazonS3/latest/dev/object-archival.html#restore-glacier-objects-concepts 从 Glacier 恢复到 S3 的对象保持存储 class 'GLACIER'。所以我不能用它来确定是否需要进行恢复。恢复的对象仍然具有 class GLACIER。
我的问题:如何找出哪些对象仅在 Glacier 中,因此需要先恢复 ()。目前在存储 class 'GLACIER' 的情况下,我首先尝试 get_contents_to_filename(),如果失败,我调用 restore().. 但感觉不对。
当您启动恢复操作时,S3 在 HEAD
请求的 x-amz-restore
响应 header 中传回该恢复操作的状态。 Boto 会将 header 的值转换为 Key
object 的 ongoing_restore
属性。如果该属性的值为 None
,则表示没有请求恢复或正在进行恢复。如果值为 True
,则表示 object 正在恢复,但操作尚未完成。如果值为 False
,则表示还原操作已完成。在这种情况下,Key
object 的 expiry_date
属性将填充为恢复的 object 何时过期并从 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
调用对于在 object 上强制执行 HEAD 请求以获取元数据是必要的。否则,您只会得到不包含 object 元数据的 LIST 操作返回的数据。