삭제 마커 관리

삭제 마커 관리 (Managing delete markers)

본문

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

만료된 객체 삭제 마커는 모든 객체 버전이 삭제되고 삭제 마커 하나만 남은 것을 말해요. 수명주기 구성이 현재 버전 삭제로 설정되어 있거나 ExpiredObjectDeleteMarker 작업이 명시적으로 설정되어 있으면, Amazon S3는 만료된 객체의 삭제 마커를 제거해요. 예시는 버전 관리 활성화 버킷에서 만료된 객체 삭제 마커 제거를 참고하세요.

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

버전 관리 활성화 버킷에서 객체를 삭제하면 모든 버전이 버킷에 남고 Amazon S3가 객체에 대한 삭제 마커를 만들어요. 객체를 삭제 취소하려면 이 삭제 마커를 삭제해야 해요. 버전 관리와 삭제 마커에 대한 자세한 내용은 S3 버전 관리를 사용한 객체의 여러 버전 유지를 참고하세요.

삭제 마커를 영구 삭제하려면 DeleteObject versionId 요청에 해당 버전 ID를 포함해야 해요. 다음 그림은 DeleteObject versionId 요청이 삭제 마커를 영구적으로 제거하는 방식을 보여줘요. 삭제 마커를 제거하면 간단한 GET 요청이 이제 객체의 현재 버전 ID(121212)를 검색하게 돼요.

참고 현재 버전이 삭제 마커인 경우 DeleteObject 요청(삭제 마커의 버전 ID를 지정하지 않음)을 사용하면 Amazon S3는 삭제 마커를 삭제하지 않고 대신 또 다른 삭제 마커를 PUT해요.

NULL 버전 ID를 가진 삭제 마커를 삭제하려면 DeleteObject 요청에 버전 ID로 NULL을 전달해야 해요. 다음 그림은 버전 ID 없이 보낸 간단한 DeleteObject 요청이, 현재 버전이 삭제 마커인 경우 아무것도 제거하지 않고 대신 고유한 버전 ID(7498372)를 가진 추가 삭제 마커를 추가하는 것을 보여줘요.

다음 단계에 따라 S3 버킷에서 폴더가 아닌 삭제된 객체(폴더 내부의 객체 포함)를 복구해요.

  1. AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
  2. Buckets 목록에서 원하는 버킷의 이름을 선택해요.
  3. 버킷의 객체 versions 목록을 보려면 List versions 스위치를 선택해요. 삭제된 객체의 삭제 마커를 볼 수 있어요.
  4. 객체를 삭제 취소하려면 삭제 마커를 삭제해야 해요. 복구할 객체의 delete marker 옆에 있는 확인란을 선택한 다음 Delete를 선택해요.
  5. Delete objects 페이지에서 삭제를 확인해요.
  6. **Permanently delete objects?**에 permanently delete를 입력해요.
  7. Delete objects를 선택해요.

참고 Amazon S3 콘솔로는 폴더를 삭제 취소할 수 없어요. AWS CLI 또는 SDK를 사용해야 해요. 예시는 AWS Knowledge Center의 버전 관리 활성화 버킷에서 삭제된 Amazon S3 객체를 어떻게 검색하나요?를 참고하세요.

삭제 마커를 영구 제거

  1. 제거하려는 삭제 마커의 버전 ID로 versionId를 설정해요.
  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 AKIAIO...RuU=

삭제 마커를 삭제하면 Amazon S3는 응답에 다음을 포함해요.

204 NoContent
x-amz-version-id: versionID

x-amz-delete-marker: true

다른 AWS SDK 사용에 대한 자세한 내용은 AWS Developer Center를 참고하세요.

Python

다음 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)

출처: 문서

더 알아보기