이전 버전 복원

이전 버전 복원 (Restoring previous versions)

버전 관리를 사용해 객체의 이전 버전을 검색할 수 있어요. 이렇게 하는 방법은 두 가지예요.

  • 객체의 이전 버전을 같은 버킷에 복사해요. 복사된 객체가 객체의 현재 버전이 되고 모든 객체 버전이 보존돼요.
  • 객체의 현재 버전을 영구 삭제해요. 현재 객체 버전을 삭제하면 사실상 이전 버전이 객체의 현재 버전이 돼요.

모든 객체 버전이 보존되므로, 객체의 특정 버전을 같은 버킷에 복사해 이전 버전 중 아무 버전이든 현재 버전으로 만들 수 있어요. 다음 그림에서 원본 객체(ID = 111111)가 같은 버킷에 복사돼요. Amazon S3는 새 ID(88778877)를 제공하고 그것이 객체의 현재 버전이 돼요. 따라서 버킷에는 원래 객체 버전(111111)과 그 복사본(88778877)이 모두 있어요. 이전 버전을 가져온 다음 업로드해 현재 버전으로 만드는 방법에 대한 자세한 내용은 버전 관리 활성화 버킷에서 객체 버전 검색과 객체 업로드를 참고하세요.

이후의 GET은 버전 88778877을 검색해요.

다음 그림은 객체의 현재 버전(121212)을 삭제하면 이전 버전(111111)이 현재 객체로 남는 방식을 보여줘요. 객체 삭제에 대한 자세한 내용은 단일 객체 삭제를 참고하세요. 이후의 GET은 버전 111111을 검색해요.

참고 객체 버전을 일괄 복원하려면 CopyObject 작업을 사용할 수 있어요. CopyObject 작업은 매니페스트에 지정된 각 객체를 복사해요. 그러나 객체가 매니페스트에 나타난 순서와 같은 순서로 복사되지는 않을 수 있어요. 버전 관리 버킷에서 현재/비현재 버전 순서를 보존하는 것이 중요하다면, 먼저 모든 비현재 버전을 복사해야 해요. 그런 다음 첫 번째 작업이 완료된 후 후속 작업에서 현재 버전을 복사해요.

본문

이전 객체 버전 복원

삭제된 객체 복원에 대한 더 자세한 지침은 AWS re:Post Knowledge Center의 버전 관리 활성화 버킷에서 삭제된 Amazon S3 객체를 어떻게 검색하나요?를 참고하세요.

Amazon S3 콘솔에서 현재 버전을 삭제해 객체의 이전 버전을 복원할 수 있어요. 현재 버전을 삭제하면 이전 버전이 새 현재 버전이 돼요.

현재 버전을 삭제해 이전 버전 복원

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
  2. Buckets 목록에서 객체가 포함된 버킷의 이름을 선택해요.
  3. Objects 목록에서 객체의 이름을 선택해요.
  4. Versions를 선택해요. Amazon S3가 객체의 모든 버전을 보여줘요.
  5. 삭제하려는 현재(최신) 버전의 Version ID 옆에 있는 확인란을 선택해요.
  6. Delete를 선택해요.
  7. Delete objects 대화 상자에 permanently delete를 입력한 다음 Delete objects를 선택해요.
  8. 현재 버전을 삭제하면 이전 버전이 현재 버전이 돼요.

이전 버전 다운로드

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
  2. Buckets 목록에서 객체가 포함된 버킷의 이름을 선택해요.
  3. Objects 목록에서 객체의 이름을 선택해요.
  4. Versions를 선택해요. Amazon S3가 객체의 모든 버전을 보여줘요.
  5. 검색할 버전의 Version ID 옆에 있는 확인란을 선택해요.
  6. Actions, Download를 선택하고 객체를 저장해요.

객체 개요 패널에서 객체 버전을 보고, 다운로드하고, 삭제할 수도 있어요. 자세한 내용은 Amazon S3 콘솔에서 객체 속성 보기를 참고하세요.

참고 이전 버전을 제자리에 복사(새 현재 버전으로 만들기)하려면 AWS CLI 또는 AWS SDK를 사용해요. 이 방법은 Amazon S3 콘솔에서는 사용할 수 없어요. 예시는 AWS CLI 탭을 참고하세요.

중요 객체가 최신(현재) 버전으로 삭제된 경우에만 객체를 삭제 취소할 수 있어요. 삭제된 객체의 이전 버전은 삭제 취소할 수 없어요. 자세한 내용은 S3 버전 관리를 사용한 객체의 여러 버전 유지를 참고하세요.

이전 버전을 제자리에 복사해 복원하려면 copy-object 명령을 사용해요. --copy-source 파라미터에는 복원하려는 이전 버전의 버전 ID를 지정해요.

aws s3api copy-object \
--bucket amzn-s3-demo-bucket \
--key my-object.jpg \
--copy-source amzn-s3-demo-bucket/my-object.jpg?versionId=previous-version-id

이 명령은 지정된 이전 버전의 내용으로 객체의 새 현재 버전을 만들어요. Amazon S3는 모든 기존 버전을 보존해요. 다른 AWS SDK 사용에 대한 자세한 내용은 AWS Developer Center를 참고하세요.

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

출처: 문서

더 알아보기