还原早期版本 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

还原早期版本

您可以使用版本控制来检索对象的早期版本。有两种方法可执行该操作:

  • 将对象的早期版本复制到同一存储桶中。

    复制的对象将成为该对象的当前版本,且所有对象版本都保留。

  • 永久删除对象的当前版本。

    当您删除当前对象版本时,实际上会将先前版本转换为该对象的当前版本。

由于所有对象版本都保留,所以您可以通过将对象的特定版本复制到同一存储桶,使任何较早版本成为当前版本。在下图中,源对象 (ID = 111111) 已复制到同一存储桶中。Amazon S3 将提供一个新 ID (88778877),且它将成为该对象的当前版本。因此,该存储桶同时具有原始对象版本 (111111) 及其副本 (88778877)。有关获取先前版本,然后将其上传以使其成为当前版本的更多信息,请参阅从启用了版本控制的存储桶中检索对象版本上传对象

随后,GET 将检索版本 88778877。

下图显示了如何删除对象的当前版本 (121212),该操作保留早期版本 (111111) 作为当前版本。有关删除对象的更多信息,请参阅删除单个对象

随后,GET 将检索版本 111111。

还原以前的对象版本

有关使用其他 Amazon 开发工具包的信息,请参阅 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}.")