버전 관리 문제 해결
버전 관리 문제 해결 (Troubleshooting versioning)
다음 주제는 Amazon S3 버전 관리의 일반적인 문제를 진단하는 데 도움이 돼요.
주제
- 버전 관리 활성화 버킷에서 실수로 삭제된 객체를 복구하고 싶어요
- 버전 관리 객체를 영구 삭제하고 싶어요
- 버킷 버전 관리 활성화 후 성능 저하가 발생해요
본문
버전 관리 활성화 버킷에서 실수로 삭제된 객체를 복구하고 싶어요
일반적으로 객체 버전이 S3 버킷에서 삭제되면 Amazon S3가 이를 복구할 방법이 없어요. 그러나 S3 버킷에서 S3 버전 관리를 활성화했다면, 버전 ID를 지정하지 않은 DELETE 요청은 객체를 영구 삭제할 수 없어요. 대신 자리 표시자로 삭제 마커가 추가돼요. 이 삭제 마커가 객체의 현재 버전이 돼요.
삭제된 객체가 영구 삭제되었는지 일시 삭제(그 자리에 삭제 마커가 있는지)되었는지 확인하려면 다음을 수행해요.
- AWS Management Console에 로그인하고 https://console.aws.amazon.com/s3/ 에서 Amazon S3 콘솔을 열어요.
- 왼쪽 탐색 창에서 Buckets를 선택해요.
- Buckets 목록에서 객체가 포함된 버킷의 이름을 선택해요.
- Objects 목록에서 검색 창 오른쪽의 Show versions 토글을 켠 다음 검색 창에서 삭제된 객체를 검색해요. 이 토글은 버킷에서 버전 관리를 이전에 활성화한 경우에만 사용할 수 있어요.
- S3 Inventory를 사용해 삭제된 객체를 검색할 수도 있어요.
- Show versions를 토글하거나 인벤토리 보고서를 만든 후에도 객체를 찾을 수 없고, 객체의 삭제 마커도 찾을 수 없다면 삭제는 영구적이며 객체를 복구할 수 없어요.
삭제된 객체의 상태를 AWS Command Line Interface(AWS CLI)의 HeadObject API 작업으로 확인할 수도 있어요. 그러려면 다음 head-object 명령을 사용하고 user input 자리 표시자를 자신의 정보로 바꿔요.
aws s3api head-object --bucket amzn-s3-demo-bucket --key index.html
현재 버전이 삭제 마커인 버전 관리 객체에 head-object 명령을 실행하면 404 Not Found 오류를 받아요. 예:
An error occurred (404) when calling the HeadObject operation: Not Found
버전 관리 객체에 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 자리 표시자를 자신의 정보로 바꿔요.
aws s3api delete-object --bucket amzn-s3-demo-bucket --key index.html --version-id versionID
delete-object 명령에 대한 자세한 내용은 AWS CLI Command Reference의 delete-object를 참고하세요. 삭제 마커 영구 삭제에 대한 자세한 내용은 삭제 마커 관리를 참고하세요.
버전 관리 객체를 영구 삭제하고 싶어요
버전 관리 활성화 버킷에서 버전 ID 없이 보낸 DELETE 요청은 객체를 영구 삭제할 수 없어요. 대신 그러한 요청은 삭제 마커를 삽입해요.
버전 관리 객체를 영구 삭제하려면 다음 방법 중에서 선택할 수 있어요.
- 비현재 버전을 영구 삭제하는 S3 Lifecycle 규칙을 만들어요. 비현재 버전을 영구 삭제하려면 Permanently delete noncurrent versions of objects를 선택한 다음 Days after objects become noncurrent에 숫자를 입력해요. Number of newer versions to retain에 값을 입력해 유지할 새 버전 수를 선택적으로 지정할 수 있어요. 이 규칙 만들기에 대한 자세한 내용은 S3 Lifecycle 구성 설정을 참고하세요.
DELETE요청에 버전 ID를 포함해 지정된 버전을 삭제해요. 자세한 내용은 버전 관리 객체를 영구 삭제하는 방법을 참고하세요.- 현재 버전을 만료시키는 수명주기 규칙을 만들어요. 객체의 현재 버전을 만료시키려면 Expire current versions of objects를 선택한 다음 Days after object creation에 숫자를 추가해요. 이 수명주기 규칙 만들기에 대한 자세한 내용은 S3 Lifecycle 구성 설정을 참고하세요.
모든 버전 관리 객체와 삭제 마커를 영구 삭제하려면 수명주기 규칙 두 개를 만들어요. 하나는 현재 버전을 만료시키고 객체의 비현재 버전을 영구 삭제하는 규칙, 다른 하나는 만료된 객체 삭제 마커를 삭제하는 규칙이에요.
버전 관리 활성화 버킷에서 버전 ID를 지정하지 않은 DELETE 요청은 NULL 버전 ID를 가진 객체만 제거할 수 있어요. 버전 관리가 활성화된 상태에서 객체가 업로드되었다면, 버전 ID를 지정하지 않은 DELETE 요청은 해당 객체의 삭제 마커를 만들어요.
참고 S3 Object Lock가 활성화된 버킷의 경우, 보호된 객체 버전 ID가 있는
DELETE객체 요청은 403 Access Denied 오류를 발생시켜요. 버전 ID 없이DELETE객체 요청을 하면 200 OK 응답과 함께 객체의 가장 새로운 버전으로 삭제 마커가 추가돼요. Object Lock로 보호된 객체는 보존 기간과 법적 보존이 제거될 때까지 영구 삭제할 수 없어요. 자세한 내용은 S3 Object Lock 작동 방식을 참고하세요.
버킷 버전 관리 활성화 후 성능 저하가 발생해요
삭제 마커나 버전 관리 객체가 너무 많고 모범 사례를 따르지 않으면 버전 관리 활성화 버킷에서 성능 저하가 발생할 수 있어요.
삭제 마커가 너무 많은 경우
버킷에서 버전 관리를 활성화한 후, 객체에 대한 버전 ID 없는 DELETE 요청은 고유한 버전 ID를 가진 삭제 마커를 만들어요. Expire current versions of objects 규칙이 있는 수명주기 구성은 모든 객체에 고유한 버전 ID를 가진 삭제 마커를 추가해요. 과도한 삭제 마커는 버킷의 성능을 저하시킬 수 있어요.
버킷에서 버전 관리가 일시 중단되면 Amazon S3는 새로 생성된 객체의 버전 ID를 NULL로 표시해요. 버전 관리 일시 중단 버킷의 만료 작업은 Amazon S3가 버전 ID가 NULL인 삭제 마커를 만들게 해요. 버전 관리 일시 중단 버킷에서는 모든 삭제 요청에 대해 NULL 삭제 마커가 생성돼요. 이러한 NULL 삭제 마커는 모든 객체 버전이 삭제되고 삭제 마커 하나만 남을 때 만료된 객체 삭제 마커라고도 해요. 너무 많은 NULL 삭제 마커가 축적되면 버킷에서 성능 저하가 발생해요.
버전 관리 객체가 너무 많은 경우
버전 관리 활성화 버킷에 수백만 개의 버전이 있는 객체가 포함되어 있으면 503 Service Unavailable 오류가 증가할 수 있어요. 버전 관리 활성화 버킷에 대한 PUT 또는 DELETE 객체 요청에서 수신되는 HTTP 503 Service Unavailable 응답 수가 크게 증가하는 것을 발견하면, 버킷에 수백만 개의 버전이 있는 객체가 하나 이상 있을 수 있어요. 수백만 개의 버전이 있는 객체가 있으면 Amazon S3는 버킷에 대한 요청을 자동으로 제한(throttle)해요. 요청을 제한하면 동일한 버킷에 대한 다른 요청을 방해할 수 있는 과도한 요청 트래픽으로부터 버킷을 보호해요.
수백만 개의 버전이 있는 객체를 확인하려면 S3 Inventory를 사용해요. S3 Inventory는 버킷의 객체 플랫 파일 목록을 제공하는 보고서를 생성해요. 자세한 내용은 S3 Inventory로 데이터 카탈로그 작성 및 분석을 참고하세요. 버킷에 버전 관리 객체가 많은지 확인하려면 S3 Storage Lens 지표를 사용해 Current version object count, Noncurrent version object count, Delete marker object count를 확인해요. Storage Lens 지표에 대한 자세한 내용은 Amazon S3 Storage Lens 지표 용어집을 참고하세요.
Amazon S3 팀은 동일한 객체를 반복적으로 덮어써 잠재적으로 수백만 개의 버전을 만드는 애플리케이션을 조사해 애플리케이션이 의도대로 작동하는지 확인할 것을 권장해요. 예를 들어 1주일 동안 매분마다 동일한 객체를 덮어쓰는 애플리케이션은 만 개가 넘는 버전을 만들 수 있어요. 각 객체에 대해 십만 개 미만의 버전을 저장할 것을 권장해요. 하나 이상의 객체에 수백만 개의 버전이 필요한 사용 사례가 있다면 AWS Support 팀에 연락해 더 나은 솔루션을 찾는 데 도움을 받아요.
모범 사례
버전 관리 관련 성능 저하 문제를 방지하려면 다음 모범 사례를 적용할 것을 권장해요.
- 객체의 이전 버전을 만료시키는 수명주기 규칙을 활성화해요. 예를 들어 객체가 비현재 상태가 된 지 30일 후 비현재 버전을 만료시키는 수명주기 규칙을 만들 수 있어요. 모두 삭제하고 싶지 않다면 비현재 버전을 여러 개 유지할 수도 있어요. 자세한 내용은 S3 Lifecycle 구성 설정을 참고하세요.
- 버킷에 연결된 데이터 객체가 없는 만료된 객체 삭제 마커를 삭제하는 수명주기 규칙을 활성화해요. 자세한 내용은 만료된 객체 삭제 마커 제거를 참고하세요.
- 추가 Amazon S3 성능 최적화 모범 사례는 모범 사례 설계 패턴을 참고하세요.
출처: 문서