버전 관리 문제 해결 - Amazon Simple Storage Service

버전 관리 문제 해결

다음 주제는 몇 가지 일반적인 Amazon S3 버전 관리 문제를 해결하는 데 도움이 될 수 있습니다.

버전 관리를 활성화한 버킷에서 실수로 삭제된 객체를 복구하려고 합니다.

일반적으로 S3 버킷에서 객체 버전이 삭제되면 Amazon S3에서 복구할 방법이 없습니다. 하지만 S3 버킷에 S3 버전 관리를 활성화한 경우 버전 ID를 지정하지 않는 DELETE 요청은 객체를 영구적으로 삭제할 수 없습니다. 대신 삭제 마커가 자리 표시자로 추가됩니다. 이 삭제 마커가 객체의 최신 버전이 됩니다.

삭제된 객체가 영구적으로 삭제되었는지 아니면 일시적으로 삭제되었는지(삭제 마커로 대체됨) 확인하려면 다음을 수행하세요.

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

  2. 왼쪽 탐색 창에서 버킷(Buckets)을 선택합니다.

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

  4. 객체 목록에서 검색 창 오른쪽에 있는 버전 표시 토글을 켠 다음 검색 창에서 삭제된 객체를 검색합니다. 이 토글은 이전에 버킷에 버전 관리를 활성화한 경우에만 사용할 수 있습니다.

    S3 인벤토리를 사용하여 삭제된 객체를 검색할 수도 있습니다.

  5. 버전 표시 토글을 켜거나 인벤토리 보고서를 만든 후에도 객체를 찾을 수 없고 객체의 삭제 마커도 찾을 수 없는 경우 영구적으로 삭제된 것이며 객체를 복구할 수 없습니다.

AWS Command Line Interface(AWS CLI)의 HeadObject API 작업을 사용하여 삭제된 객체의 상태를 확인할 수도 있습니다. 이 방법을 사용하려면 다음 head-object 명령을 사용하되 user input placeholders를 실제 정보로 대체하세요.

aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html

현재 버전이 삭제 마커인 버전이 지정된 객체에 대한 head-object 명령을 실행하는 경우 404 찾을 수 없음 오류가 발생합니다. 예:

HeadObject 작업을 호출할 때 오류(404 찾을 수 없음)가 발생했습니다.

버전이 지정된 객체에서 head-object 명령을 실행하고 객체의 버전 ID를 제공하면 Amazon S3는 객체의 메타데이터를 검색하여 객체가 여전히 존재하며 영구적으로 삭제되지 않았음을 확인합니다.

aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html --version-id versionID

{
"AcceptRanges": "bytes",
"ContentType": "text/html",
"LastModified": "Thu, 16 Apr 2015 18:19:14 GMT",
"ContentLength": 77,
"VersionId": "Zg5HyL7m.eZU9iM7AVlJkrqAiE.0UG4q",
"ETag": "\"30a6ec7e1a9ad79c203d05a589c8b400\"",
"Metadata": {}
}

객체가 검색되고 최신 버전이 삭제 마커인 경우 객체의 이전 버전이 여전히 존재합니다. 삭제 마커가 객체의 현재 버전이므로 삭제 마커를 삭제하여 객체를 복구할 수 있습니다.

삭제 마커를 영구적으로 제거하면 바로 이전 버전의 객체가 객체의 현재 버전이 되어 객체를 다시 사용할 수 있게 됩니다. 객체 복구 방법을 시각적으로 확인하려면 삭제 마커 제거를 참조하세요.

객체의 지정된 버전을 제거하려면 사용자가 버킷 소유자여야 합니다. 삭제 마커를 영구적으로 삭제하려면 DeleteObject 요청에 삭제 마커의 버전 ID를 포함해야 합니다. 이 방법을 사용하려면 다음 명령을 사용하되 user input placeholders를 실제 정보로 대체하세요.

aws s3api delete-object --bucket amzn-s3-demo-bucket --key index.html --version-id versionID

delete-object 명령에 대한 자세한 내용은 AWS CLI 명령 참조의 delete-object 섹션을 참조하세요. 삭제 마커 영구 삭제에 대한 자세한 내용은 삭제 마커 관리 섹션을 참조하세요.

버전이 지정된 객체를 영구적으로 삭제하고 싶습니다.

버전 관리를 사용하는 버킷에서 버전 ID가 없는 DELETE 요청은 객체를 영구적으로 삭제할 수 없습니다. 대신 이러한 요청은 삭제 마커를 삽입합니다.

버전이 지정된 객체를 영구적으로 삭제하려면 다음 방법 중에서 선택할 수 있습니다.

  • S3 수명 주기 규칙을 생성하여 비최신 버전을 영구적으로 삭제합니다. 비최신 버전을 영구적으로 삭제하려면 객체의 비최신 버전 영구 삭제를 선택하고 다음 일수 이후 객체가 오래된 것으로 간주됨에 숫자를 입력합니다. Number of newer versions to retain(유지할 새 버전 수) 아래에 값을 입력하여 유지할 최신 버전 수를 선택적으로 지정할 수 있습니다. 이 규칙을 생성하는 방법에 대한 자세한 내용은 S3 수명 주기 구성 설정을 참조하세요.

  • DELETE 요청에 버전 ID를 포함하여 지정된 버전을 삭제합니다. 자세한 내용은 버전 지정된 객체를 영구적으로 삭제하는 방법을 참조하세요.

  • 현재 버전을 만료시키는 수명 주기 규칙을 생성합니다. 객체의 현재 버전을 만료시키려면 객체의 현재 버전 만료를 선택한 후 객체 생성 후 일수에 숫자를 입력합니다. 이 수명 주기 규칙을 생성하는 방법에 대한 자세한 내용은 S3 수명 주기 구성 설정을 참조하세요.

  • 버전이 지정된 모든 객체를 영구적으로 삭제하고 마커를 삭제하려면 두 개의 수명 주기 규칙을 만드세요. 하나는 현재 버전을 만료시키고 객체의 비최신 버전을 영구적으로 삭제하는 것이고 다른 하나는 만료된 객체 삭제 마커를 삭제하는 것입니다.

버전 관리를 사용하는 버킷에서 버전 ID를 지정하지 않은 DELETE 요청은 버전 ID가 NULL인 객체만 제거할 수 있습니다. 버전 관리가 활성화된 상태에서 객체를 업로드한 경우 버전 ID를 지정하지 않은 DELETE 요청은 해당 객체의 삭제 마커를 생성합니다.

참고

S3 객체 잠금이 활성화된 버킷의 경우 보호된 객체 버전 ID가 있는 DELETE 객체 요청은 403 액세스 거부 오류를 일으킵니다. 버전 ID가 없는 DELETE 객체 요청은 200 확인 응답과 함께 객체의 최신 버전으로 삭제 마커를 추가합니다. 객체 잠금으로 보호되는 객체는 보존 기간 및 법적 보존이 제거될 때까지 영구적으로 삭제할 수 없습니다. 자세한 내용은 S3 객체 잠금 작동 방식 단원을 참조하십시오.

버킷 버전 관리를 활성화한 후 성능 저하가 발생했습니다.

삭제 마커나 버전이 지정된 객체가 너무 많고 모범 사례를 따르지 않을 경우 버전 관리를 사용하는 버킷에서 성능 저하가 발생할 수 있습니다.

삭제 마커가 너무 많음

버킷에 버전 관리를 활성화한 후 버전 ID가 없이 객체에 수행된 DELETE 요청은 고유한 버전 ID를 가진 삭제 마커를 생성합니다. 객체의 현재 버전 만료만료 규칙이 포함된 수명 주기 구성은 모든 객체에 고유한 버전 ID가 있는 삭제 마커를 추가합니다. 삭제 마커가 너무 많으면 버킷의 성능이 저하될 수 있습니다.

버전 관리가 중단된 버킷의 경우 Amazon S3는 새로 생성된 객체에 버전 ID를 NULL로 표시합니다. 버전 관리가 일시 중지된 버킷에서는 만료 작업으로 인해 Amazon S3가 버전 ID가 NULL인 삭제 마커를 생성합니다. 버전 관리가 일시 중단된 버킷에서는 모든 삭제 요청에 대해 NULL 삭제 마커가 생성됩니다. 모든 객체 버전이 삭제되고 하나의 삭제 마커만 남은 경우 이러한 NULL 삭제 마커는 만료된 객체 삭제 마커라고도 합니다. NULL 삭제 마커가 너무 많이 누적되면 버킷의 성능이 저하됩니다.

버전이 지정된 객체가 너무 많음

버전 관리를 사용하는 버킷에 수백만 개의 버전이 있는 객체가 포함된 경우 503 서비스 사용 불가 오류가 증가할 수 있습니다. S3 버전 관리를 사용하는 버킷에 대한 PUT 또는 DELETE 객체 요청에서 받은 HTTP 503 서비스 사용 불가 응답의 횟수가 크게 증가한다면 버전이 수백만 개인 객체가 하나 이상의 버킷에 있을 것으로 추정됩니다. 객체에 수백만 개의 버전이 있을 경우 Amazon S3는 자동으로 해당 버킷에 대한 요청을 제한합니다. 요청을 제한하면 과도한 횟수의 요청 트래픽으로부터 버킷이 보호되어 같은 버킷에 대한 다른 요청을 지연시킬 가능성이 있습니다.

수백만 개의 버전이 있는 S3 객체를 파악하려면 S3 인벤토리 도구를 사용하세요. S3 인벤토리는 버킷에 있는 객체의 플랫 파일 목록을 제공하는 보고서를 생성합니다. 자세한 내용은 S3 Inventory를 사용한 데이터 카탈로그화 및 분석 단원을 참조하십시오.

버킷에 버전이 지정된 객체 수가 많은지 확인하려면 S3 스토리지 렌즈 지표를 사용하여 현재 버전 객체 수, 최신이 아닌 버전 객체 수삭제 마커 객체 수를 확인하세요. 스토리지 렌즈 지표에 대한 자세한 내용은 Amazon S3 스토리지 렌즈 지표 용어집 섹션을 참조하세요.

Amazon S3 팀은 같은 객체를 반복적으로 덮어써서 해당 객체에 수백만 개 버전이 생성될 가능성이 있는 애플리케이션을 조사할 것을 권장합니다. 조사를 통해 애플리케이션이 의도한 대로 작동하는지 판단할 수 있습니다. 예를 들어, 1주일 동안 1분마다 같은 객체를 덮어쓰는 애플리케이션은 1만 개 이상의 버전을 만들 수 있습니다. 각 객체에 대해 10만 개 미만의 버전을 저장하는 것이 좋습니다. 하나 이상의 객체에 수백만 개 버전이 필요한 사용 사례가 있는 경우, AWS Support 팀에 문의하여 보다 나은 솔루션을 찾는 데 도움을 받으세요.

모범 사례

버전 관리 관련 성능 저하 문제를 방지하려면 다음과 같은 모범 사례를 사용하는 것이 좋습니다.

  • 객체의 이전 버전을 만료시키는 수명 주기 규칙을 활성화합니다. 예를 들어, 객체가 이전 버전이 된 지 30일이 지나면 비최신 버전을 만료시키는 수명 주기 규칙을 만들 수 있습니다. 모든 버전을 삭제하지 않고 싶다면 비최신 버전 여러 개를 보존할 수도 있습니다. 자세한 내용은 S3 수명 주기 구성 설정을 참조하세요.

  • 버킷에 관련된 데이터 객체가 없는 경우 만료된 객체 삭제 마커를 삭제하는 수명 주기 규칙을 활성화합니다. 자세한 내용은 만료된 객체 삭제 마커 제거를 참조하세요.

추가 Amazon S3 성능 최적화 모범 사례는 모범 사례 설계 패턴을 참조하세요.