배경

AWS S3 bucket에 파일을 클렌징하는 작업이 들어왔다. 구체적으로는 S3 버킷에 존재하는 고아 데이터를 제거해달라는 요청이다.
기존에 운영되고 있던 서비스에 ISMS 심사 대응으로 추가된 작업이라, S3 객체를 잘 못 지웠을 때 복원할 수 있는 수단이 필요하다고 판단했다. (mysql에서 작업했다면 테이블을 clone 따 두고 작업했을 것이다.) 그래서 S3에는 soft delete 기능이 없는지 찾아보았고, 아니나 다를까 당연히 있었다. 나처럼 S3 객체 삭제가 두려운 사람들을 위해 내가 설정한 방법을 공유하도록 하겠다 😄

버킷 버전 관리

이 설정은 s3 객체 삭제 시, 같은 파일이름(key)으로 삭제 마커 를 붙여서 새로운 버전으로 객체를 생성한다. 이 설정을 on 하고 SDK로 객체를 삭제하면 삭제 마커가 붙은 새로운 객체가 생성되고, SDK로 getObject를 하게 되면 KeyNotFound 가 발생한다.

여기서 의문점은 결국 새로운 버전의 객체가 만들어지는 것이고, SDK에서도 조회가 안되는거면 삭제된거 아닌가? 라는 것이다.

 

당연히 아니다(AWS 선생님을 무시하지 말도록).

 

객체의 삭제마커 이전 버전을 조회할 수도 있고, 복원할수도 있다. 버전 관리라서 조금 더 복잡한 기능으로 사용할 수 있어 보이지만, 나는 이 설정을 soft delete로 사용하였다.

 

그럼 삭제마커가 붙은 애들은 어떻게 영구삭제 할 수 있는가?

 

수명 주기 규칙 생성하기

버킷 설정에서 수명주기 규칙을 추가함으로써 삭제 마커가 붙은 객체들을 자동으로 삭제할 수 있다. 하나씩 설정 값을 확인해보자.

 

접두사

접두사에 맞는 key를 찾아 해당 규칙을 적용한다. 만약 directory로 경로를 구분하고 있다면 / 구분자까지 넣는걸 추천한다.

 

수명 주기 규칙 작업

  • 객체의 이전 버전 영구 삭제
    최신이 아닌 객체, 즉 최신 버전이 아닌 파일을 제거하는 설정이다. 객체를 삭제하면 원본 객체가 최신이 아닌 객체가 되기 때문에, 이에 해당한다.
  • 객체가 최신이 아닌 상태로 전환된 후 경과 일수
    객체의 버전이 바뀐 뒤 만료(삭제) 까지의 기간이다. soft delete 되고 난 후 며칠동안 보관할 것인지에 대한 설정이다.
  • 보관할 새 버전 수
    최신 몇 개의 버전까지 삭제하지 않을 것인지에 대한 설정이다. 0으로 설정하면 삭제 마커만 남게 되고, 1개로 설정하면 삭제마커와 객체 1개를 유지하게 된다. 우리는 자동으로 soft delete 된 객체를 지우는 것을 원하기 때문에 0으로 설정하면 된다.

예를 들어 위와 같이 설정하면, 객체를 삭제했을 때 soft delete가 되어 언제든 복원할 수 있는 상태가 되고, 1일 뒤 실제 객체가 삭제되는 것이다.

  • 만료된 객체 삭제마커 또는 완료되지 않은 멀티파트 업로드 삭제
    만료된 삭제 마커란, 모든 객체 버전이 삭제되고 삭제 마커만 남아있는 객체를 뜻한다. 이 설정을 활성화하면 soft delete된 객체(이전 버전으로 원본이 살아있는 객체)는 삭제되지 않고, 원본이 삭제된 객체만 제거된다. 이 설정은 꼭 필요하진 않지만 굳이 불필요한 삭제 마커를 남길 필요는 없고, s3 설정에서도 제거하여 성능을 개선할 수 있다고 하니 활성화하는 것을 추천한다.

그럼 설정한 S3 객체의 수명주기를 다이어그램으로 간략화하면 다음과 같다.

주의할 점

S3의 lifecycle 적용 시간은 UTC 기준 00:00이다. 객체마다 별도로 관리하는 것이 아닌, UTC 기준 00:00에 일괄 적용이라는 의미이다.

S3는 해당 규칙의 일수(days)를 객체 생성시간에 더하고 결과값을 다음날 자정(UTC 기준)으로 반올림하여 시간을 계산한다. 예를 들어 객체가 2014년 1월 15일 오전 10시 30분(UTC)에 생성되고, 수명주기 설정에 3일을 지정하면, 객체의 전환 날짜는 2014년 1월 19일 00:00 UTC로 계산된다.

 

객체 삭제 시점이 예상과 다를 수 있으니, 확인하면 좋을듯 하다.

참고 문서

삭제 마커 관리 AWS 공식 문서
Lifecycle Rules AWS 공식 문서

'AWS' 카테고리의 다른 글

말썽꾸러기 Kafka  (1) 2024.06.26

+ Recent posts