AWS S3版本控制 - 选择要还原的版本S3

时间:2017-02-14 02:51:27

标签: amazon-s3 versioning

目前,我正在使用S3版本控制,我每天都会将数据同步到S3存储桶。我的问题是如何将版本化的存储桶恢复到特定时间点?例如:我从星期一到星期六将数据同步到S3,星期六我想从星期二恢复整个文件夹,那么我怎样才能在cli中进行? 感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用 JobID JobName Elapsed NCPUS NTasks State ------------ ---------- ---------- ---------- -------- ---------- 12345 lengthy_name 00:00:01 4 1 FAILED

S3 Point in Time Restore是一个可以准确用于将存储桶或存储桶子集恢复到给定时间点的工具,如下所示:

s3-pit-restore

s3-pit-restore提供:

  • 恢复时间戳小于给定时间的所有文件
  • 恢复整个存储桶或存储桶前缀
  • 以极高的整体速度并行下载多个文件
  • 自定义并行工作计数以优化带宽使用
  • 从s3存储桶版本恢复,或从冰川恢复(如果已启用)

答案 1 :(得分:1)

我们在生产环境中使用了此功能,以在s3-pit-restore和AWS支持失败后清理一些文件。此python脚本永久在给定时间后删除所有版本的文件。

import os
from datetime import datetime
import boto3

bad_day = datetime.now()

s3 = boto3.resource(
    's3',
    aws_access_key_id=os.environ['AWS_ID'],
    aws_secret_access_key=os.environ['AWS_SECRET'])

key = ''
metadata = s3.meta.client.list_object_versions(Bucket=os.environ['AWS_BUCKET'], Prefix=key)

to_delete = []
for version in metadata['Versions']:
    if version['Size'] > 0:
        continue

    if version['LastModified'] > bad_day:
        to_delete.append({'Key': version['Key'], 'VersionId': version['VersionId']})

bucket = s3.Bucket(os.environ['AWS_BUCKET'])
# bucket.delete_objects(Delete={'Objects': to_delete})

在准备删除之前,请不要取消注释最后一行。