Amazon S3의 버전 관리를 활성화하면 버킷에 저장되 모든 버전의 객체들을 보존하고, 검색 및 복원할 수 있다. 나도 이걸 알고싶었던건 아닌데...이번에 회사에서 오래된 객체 삭제 관련 테스트를 하다 실수로 파일을 날려버리는 바람에...ㅋㅋㅋㅋㅋ 원전 사고 직후가 이런 모습이었을까? 정말 순간적으로 머리가 새하얘졌는데 버전 관리 덕분에 파일을 복구할 수 있었다.
버전 관리를 활성화하면, S3는 저장되는 객체에 대해서 고유한 버전 ID를 자동으로 생성한다. 사진처럼 photo.gif
를 덮어썼다면, 동일한 키인 photo.gif
에 대해서 버전 ID가 다른 2개의 객체가 관리된다.
이를 S3에서 확인하려면 "버전 표시" 토글을 켜주면된다.
삭제는 저장되어있는 객체를 다 날려버리는 걸까? 결론부터 말하자면, 아니다. 객체를 정말 버킷에서 삭제해버리는 대신에 S3는 "삭제 마커(DeleteMarker)"를 해당 객체의 최신버전으로 설정한다. 삭제 마커도 다른 버전들과 마찬가지로 버전 ID를 가지고 있다. 최신 버전이 삭제 마커일때 이 객체에 대한 요청을 수행하면 404 Not Found
오류가 반환된다.
하지만 버전 ID를 직접 설정하여 제거요청을 하게되면 실제로 해당 버전의 객체가 삭제된다. 앞에서 삭제 마커 역시도 버전 ID가 있다고했는데, 삭제 마커를 삭제하면 가장 최신버전으로 객체가 복구된다.
삭제해버린 객체를 복구하기
그렇다면 실수로 S3에서 객체를 삭제 해버렸을 경우, 삭제 마커에 대한 버전 ID를 가져와서, 해당 버전을 삭제해주는 작업이 필요하다. 다음은 AWS CLI에서 2024년 11월 27일 UTC 5시 7분 이후로 수정된 삭제마커에 대한 객체 정보를 가져오는 명령어다.
aws s3api list-object-versions \
--bucket <bucket> \
--prefix <prefix> \
--query 'DeleteMarkers[?IsLatest==`true` && LastModified>=`2024-11-27T05:07:00`]'
실행시켜보면 이렇게 결과가 나온다.
[
{
"Owner": {
"ID": "4443af660482536a65d6b7977fa75a5c61deb42d9e81516b188b35eb072d66df"
},
"Key": "__achivement/01-1.png",
"VersionId": "Hmq1TfsZ0fQGzhBn4ar1OQKj10bXO8rn",
"IsLatest": true,
"LastModified": "2024-11-27T05:07:28+00:00"
},
{
"Owner": {
"ID": "4443af660482536a65d6b7977fa75a5c61deb42d9e81516b188b35eb072d66df"
},
"Key": "__achivement/02-1.png",
"VersionId": "zxjmwRBBu0KzygR4xdSXMTEfCTBjQuB7",
"IsLatest": true,
"LastModified": "2024-11-27T05:07:28+00:00"
}
]
버전 ID를 얻었으니 삭제 명령을 해주면된다.
aws s3api delete-object --bucket <bucket> --key <key> --version-id <version_id>
반복 작업은 실수도 많고 귀찮으니 간단히 python script를 짰다.
'프로그래밍 > General' 카테고리의 다른 글
Bruno > Postman Collection Import시 한글 깨짐 해결방법 (3) | 2024.10.12 |
---|---|
유한상태머신(FSM)으로 텍스트 젤다의 전설 만들기 (1) | 2024.02.04 |
Android Studio Custom Shortcuts (0) | 2024.01.07 |
[VideoJS] 영상 타임라인에 프리뷰를 표시하는 방법 (1) | 2023.12.03 |
홈서버 설치과정 요약 (0) | 2023.10.28 |