이전 버전 복원 - Amazon Simple Storage Service

이전 버전 복원

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

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

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

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

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

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

객체의 특정 버전을 동일한 버킷에 복사하여 최신 버전으로 만드는 것을 보여 주는 그림.

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

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

객체의 현재 버전을 삭제하면 이전 버전이 현재 객체가 된다는 것을 보여 주는 그림.

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

참고

객체 버전을 일괄적으로 복원하려면 CopyObject 작업을 사용할 수 있습니다. CopyObject 작업은 매니페스트에 지정된 각 객체를 복사합니다. 그러나 객체가 매니페스트에 나타나는 것과 반드시 동일한 순서로 복사되는 것은 아니라는 점을 유의하세요. 버전이 지정된 버킷에서 최신/이전 버전 순서를 유지하는 것이 중요한 경우 모든 이전 버전을 먼저 복사해야 합니다. 그런 다음 첫 번째 작업이 완료된 후 후속 작업에서 현재 버전을 복사합니다.

이전 객체 버전 복원

  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. 버킷 목록에서 객체가 포함된 버킷의 이름을 선택합니다.

  3. 객체 목록에서 객체의 이름을 선택합니다.

  4. 버전을 선택합니다.

    Amazon S3가 객체의 모든 버전을 표시합니다.

  5. 검색할 버전의 [버전 ID(Version ID)] 옆에 있는 확인란을 선택합니다.

  6. [작업(Actions)]을 선택하고 [다운로드(Download)]를 선택한 다음 객체를 저장합니다.

또한 객체 개요 패널에서 객체 버전의 보기, 다운로드 및 삭제도 가능합니다. 자세한 내용은 Amazon S3 콘솔에서 객체 개요 보기 섹션을 참조하세요.

중요

객체는 최신 버전으로 삭제한 경우에만 삭제를 취소할 수 있습니다. 삭제했던 객체의 이전 버전은 삭제를 취소할 수 없습니다. 자세한 내용은 S3 버킷에서 버전 관리 사용 섹션을 참조하세요.

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

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