이전 버전 복원 - Amazon Simple Storage Service

이전 버전 복원

버전 관리를 사용하여 객체의 이전 버전을 검색할 수 있습니다. 이를 수행하기 위한 접근 방식으로 다음 두 가지가 있습니다.

  • 이전 버전의 객체를 동일한 버킷으로 복사합니다.

    복사된 객체는 해당 객체의 현재 버전이 되고 모든 객체 버전은 유지됩니다.

  • 객체의 현재 버전 영구 삭제

    현재 객체 버전을 삭제하는 것은 실제로 해당 객체의 이전 버전을 현재 버전으로 만드는 것과 같습니다.

전체 객체 버전이 유지되므로 특정 버전의 객체를 동일 버킷에 복사하여 현재 버전보다 이전의 버전을 만들 수 있습니다. 다음 그림에서 원본 객체(ID = 111111)는 동일한 버킷에 복사됩니다. Amazon S3에서는 새 ID(88778877)를 제공하며 이것이 객체의 현재 버전이 됩니다. 따라서 버킷에는 원래 객체 버전(111111)과 그 사본(88778877)이 모두 들어 있습니다. 이전 버전을 가져온 후 업로드하여 최신 버전으로 만드는 방법에 대한 자세한 내용은 versioning-enabled 버킷에서 객체 버전 검색객체 업로드를 참조하세요.

후속 GET에서는 88778877을 검색합니다.

다음 그림은 현재 객체로 이전 버전(111111)을 남겨 둔 채로 객체의 현재 버전(121212)을 삭제하는 과정을 보여줍니다. 객체 삭제에 대한 자세한 내용은 단일 객체 삭제를 참조하세요.

후속 GET에서는 111111을 검색합니다.

이전 객체 버전을 복원하는 방법

다른 AWS SDK 사용에 대한 자세한 내용은 AWS 개발자 센터를 참조하세요.

Python

실제 예제를 작성하여 테스트하는 방법에 대한 자세한 내용은 AWS SDK for Python (Boto) 사용 섹션을 참조하세요.

다음 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}.")