Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门。还原早期版本
您可以使用版本控制来检索对象的早期版本。有两种方法可执行该操作:
由于所有对象版本都保留,所以您可以通过将对象的特定版本复制到同一存储桶,使任何较早版本成为当前版本。在下图中,源对象 (ID = 111111) 已复制到同一存储桶中。Amazon S3 将提供一个新 ID (88778877),且它将成为该对象的当前版本。因此,该存储桶同时具有原始对象版本 (111111) 及其副本 (88778877)。有关获取先前版本,然后将其上传以使其成为当前版本的更多信息,请参阅从启用了版本控制的存储桶中检索对象版本和上传对象。
随后,GET 将检索版本 88778877。
下图显示了如何删除对象的当前版本 (121212),该操作保留早期版本 (111111) 作为当前版本。有关删除对象的更多信息,请参阅删除单个对象。
随后,GET 将检索版本 111111。
还原以前的对象版本
登录到 Amazon Web Services Management Console,然后通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/。
-
在 Bucket(存储桶)列表中,请选择包含对象的存储桶的名称。
-
在 Objects(对象)列表中,请选择对象的名称。
-
请选择 Versions(版本)。
Amazon S3 显示了对象的所有版本。
-
选中要检索的版本的 Version ID(版本 ID)旁的复选框。
-
依次选择 Actions(操作)、Download(下载),然后保存对象。
您也可以在对象概述面板中查看、下载和删除对象版本。有关更多信息,请参阅 在 Amazon S3 控制台中查看对象概述。
仅当对象已作为最新 (当前) 版本删除时,您才能取消删除它。您无法取消删除已删除对象的早期版本。有关更多信息,请参阅 在 S3 存储桶中使用版本控制。
有关使用其他 Amazon SDK 的信息,请参阅 Amazon 开发人员中心。
- Python
-
以下 Python 代码示例通过删除指定回滚版本之后的所有版本,来还原版本控制对象的以前版本。
def rollback_object(bucket, object_key, version_id):
"""
Rolls back an object to an earlier version by deleting all versions that
occurred after the specified rollback version.
Usage is shown in the usage_demo_single_object function at the end of this module.
:param bucket: The bucket that holds the object to roll back.
:param object_key: The object to roll back.
:param version_id: The version ID to roll back to.
"""
# Versions must be sorted by last_modified date because delete markers are
# at the end of the list even when they are interspersed in time.
versions = sorted(bucket.object_versions.filter(Prefix=object_key),
key=attrgetter('last_modified'), reverse=True)
logger.debug(
"Got versions:\n%s",
'\n'.join([f"\t{version.version_id}, last modified {version.last_modified}"
for version in versions]))
if version_id in [ver.version_id for ver in versions]:
print(f"Rolling back to version {version_id}")
for version in versions:
if version.version_id != version_id:
version.delete()
print(f"Deleted version {version.version_id}")
else:
break
print(f"Active version is now {bucket.Object(object_key).version_id}")
else:
raise KeyError(f"{version_id} was not found in the list of versions for "
f"{object_key}.")