삭제 마커 관리 - Amazon Simple Storage Service

삭제 마커 관리

만료된 삭제 마커를 자동으로 정리하는 수명 주기 구성

만료된 객체 삭제 마커는 모든 객체 버전이 삭제되고 하나의 삭제 마커만 남은 마커입니다. 수명 주기 정책이 현재 버전을 삭제하도록 설정되어 있거나 ExpiredObjectDeleteMarker 작업이 명시적으로 설정된 경우 Amazon S3는 만료된 객체의 삭제 마커를 제거합니다. 관련 예제는 예제 7: 만료된 객체 삭제 마커의 제거 섹션을 참조하세요

이전 버전을 현재 버전으로 만들기 위해 삭제 마커 제거

버전 관리가 활성화된 버킷에서 한 객체를 삭제하면 모든 버전이 버킷에 그대로 유지되며 Amazon S3는 해당 객체에 대한 삭제 마커를 생성합니다. 객체 삭제를 취소하려면 이 삭제 마커를 삭제해야 합니다. 버전 관리와 삭제 마커에 대한 자세한 정보는 S3 버킷에서 버전 관리 사용을 참조하세요.

삭제 마커를 영구적으로 삭제하려면 DeleteObject versionId 요청에 삭제 마커의 버전 ID를 포함해야 합니다. 다음 그림은 DeleteObject versionId 요청이 어떻게 삭제 마커를 영구적으로 제거하는지를 보여 줍니다.

삭제 마커 제거의 영향으로 단순 GET 요청은 이제 현재 버전 ID(121212)의 객체를 가져옵니다.

참고

현재 버전이 삭제 마커인 DeleteObject 요청을 사용하는 경우(삭제 마커의 버전 ID 지정 없이) Amazon S3은 삭제 마커를 삭제하지 않고 그 대신 다른 삭제 마커를 넣습니다(PUTs).

NULL 버전 ID를 사용해 삭제 마커를 삭제하려면 DeleteObject 요청에서 버전 ID로 NULL을 전달해야 합니다. 다음 그림은 버전 ID 없이 이루어진 단순 DeleteObject 요청(현재 버전이 삭제 마커임)으로 아무것도 제거되지 않고, 그 대신 고유한 버전 ID(7498372)의 추가적인 삭제 마커가 추가되는 과정을 보여주고 있습니다.

다음 단계를 사용하여 S3 버킷의 폴더가 아닌 S3 버킷에서 삭제된 객체(해당 폴더 내에 있는 객체 포함)를 복원할 수 있습니다.

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

  2. 버킷(Buckets) 목록에서 원하는 버킷의 이름을 선택합니다.

  3. 버킷에 있는 객체 버전 목록을 확인하려면 [버전 나열(List versions)] 스위치를 선택합니다. 삭제된 객체들에 대한 삭제 마커를 볼 수 있습니다.

  4. 어떤 객체의 삭제를 취소하려면 삭제 마커를 삭제해야 합니다. 복원할 객체의 삭제 마커 옆에 있는 확인란을 선택한 후, 삭제(Delete)를 선택합니다.

  5. 객체 삭제(Delete objects) 페이지에서 삭제를 확인합니다.

    1. [객체를 영구적으로 삭제하시겠습니까?(Permanently delete objects?)]에 permanently delete를 입력합니다.

    2. 객체 삭제(Delete objects)를 선택합니다.

참고

Amazon S3 콘솔을 사용하여 폴더의 삭제를 취소할 수 없습니다. AWS CLI 또는 SDK를 사용해야 합니다. 예를 들어 AWS 지식 센터에서 버전 관리 지원 버킷에서 삭제된 Amazon S3 객체를 검색하려면 어떻게 해야 합니까?를 참조하세요.

삭제 마커를 영구적으로 제거하려면

  1. versionId를 제거하려는 삭제 마커의 버전 ID에 설정합니다.

  2. DELETE Object versionId 요청을 보냅니다.

예 - 삭제 마커 제거

다음 예제에서는 photo.gif 버전 4857693에 대한 삭제 마커를 제거합니다.

DELETE /photo.gif?versionId=4857693 HTTP/1.1 Host: bucket.s3.amazonaws.com Date: Wed, 28 Oct 2009 22:32:00 GMT Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU=

삭제 마커를 삭제하는 경우 Amazon S3에서는 응답에 다음을 포함합니다.

204 NoContent x-amz-version-id: versionID x-amz-delete-marker: true

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

Python

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

다음 Python 코드 예제에서는 객체에서 삭제 마커를 제거하여 현재 버전이 아닌 최신 버전을 객체의 현재 버전으로 만드는 방법을 보여 줍니다.

def revive_object(bucket, object_key): """ Revives a versioned object that was deleted by removing the object's active delete marker. A versioned object presents as deleted when its latest version is a delete marker. By removing the delete marker, we make the previous version the latest version and the object then presents as *not* deleted. Usage is shown in the usage_demo_single_object function at the end of this module. :param bucket: The bucket that contains the object. :param object_key: The object to revive. """ # Get the latest version for the object. response = s3.meta.client.list_object_versions( Bucket=bucket.name, Prefix=object_key, MaxKeys=1) if 'DeleteMarkers' in response: latest_version = response['DeleteMarkers'][0] if latest_version['IsLatest']: logger.info("Object %s was indeed deleted on %s. Let's revive it.", object_key, latest_version['LastModified']) obj = bucket.Object(object_key) obj.Version(latest_version['VersionId']).delete() logger.info("Revived %s, active version is now %s with body '%s'", object_key, obj.version_id, obj.get()['Body'].read()) else: logger.warning("Delete marker is not the latest version for %s!", object_key) elif 'Versions' in response: logger.warning("Got an active version for %s, nothing to do.", object_key) else: logger.error("Couldn't get any version info for %s.", object_key)