본문 바로가기
CSP (Cloud Service Provider)/AWS

[AWS] AWS S3 버킷의 수명 주기(Lifecycle)와 버전관리

by BTC_SUU 2023. 7. 4.

베하! 안녕하세요~!

BTC_수신자표시제한 입니다.

오늘은 AWS S3 버킷의 Lifecycle과 버전관리에 대해 알아보겠습니다.


AWS S3는 버킷에 저장된 객체의 수명주기를 관리할 수 있는 기능이 있습니다.

이 기능은 일정 시간이 지났을 때, 사용되지 않는 파일을 삭제하거나 다른 곳에 백업하여 s3 저장 공간을 절약할 수 있는 비용 효율적인 방법입니다.

s3 수명주기 구성은 다른 스토리지 클래스로 전환할 시기를 정하는 전환 작업과, 객체가 만료되는 시기를 정의하는 만료작업이 있습니다. (여기서 만료는 삭제를 의미합니다!)

1. 수명 주기 생성

AWS S3 수명 주기는 해당 버킷 -> 관리에 들어가면 확인할 수 있습니다.

여기서 수명 주기 규칙 생성을 누르게 되면 수명 주기 규칙을 만들 수 있습니다.

 

2. 수명 주기 설정

수명 주기 규칙 생성에 필요한 설정값들을 확인해보겠습니다.

  • 수명 주기 규칙 이름 : 버킷 내에서 고유한 이름으로 설정해야 합니다.
  • 규칙 범위 선택 : 특정 접두사나 태그가 있는 객체에 수명 주기 규칙을 적용하려면 하나 이상의 필터를 적용하여 이 규칙의 범위 제한을 선택합니다. 버킷의 모든 객체에 수명 주기 규칙을 적용하려면 버킷의 모든 객체에 적용을 선택하면 됩니다.
  • 필터 유형  
    • 접두사(Prefix) : 접두사에는 버킷 이름을 제외한 경로만 지정가능합니다. 예를 들어, 버킷에 A, B, C 라는 폴더가 있고 그 중 A의 폴더에만 수명 주기 규칙을 적용하고 싶다면 A/ 로 입력하면 됩니다. A 폴더 안 의 a의 폴더에만 적용하고 싶다면 마찬가지고 A/a/로 입력하면 됩니다. 참고로 접두사 필터의 끝에 / 문자를 꼭 지정해야 합니다.
    • 태그 추가(Add tag) : 태그 키와 값을 입력합니다.
  • 객체 크기 : 객체 크기별로 규칙을 필터링하려면 최소 객체 크기 지정, 최대 객체 크기 지정 또는 두 옵션을 모두 선택할 수 있습니다.
    • 최소 객체 크기 또는 최대 객체 크기를 지정할 때 값은 0바이트보다 크고 최대 5TB여야 합니다. 이 값을 바이트, KB, MB 또는 GB 단위로 지정할 수 있습니다.
    • 둘 다 지정하는 경우 최대 객체 크기가 최소 객체 크기보다 커야 합니다.

  • 수명 주기 규칙 작업
    • 스토리지 클래스 간에 객체의 현재 버전 이동
    • 스토리지 클래스 간에 객체의 이전 버전 이동 
    • 객체의 현재 버전 만료
    • 객체의 이전 버전 영구 삭제
    • 만료된 객체 삭제 마커 또는 완료되지 않은 멀티파트 업로드 삭제 

 

스토리지 클래스간의 전환작업과
객체가 만료에 대한 만료작업은 앞서 말씀드렸는데

그렇다면 여기서 나오는 현재 버전과 이전 버전이 무엇일까요?
그리고 삭제 마커가 무엇인지 알아보겠습니다!

 

3. 버킷의 버전 관리

현재 버전과 이전 버전에 대해 설명하려면 버킷의 버전 관리를 먼저 설명해야 합니다.

 

간단하게 설명드리겠습니다!

 

S3의 버전 관리동일 버킷 내에 여러 개의 객체 변형을 보유하는 수단입니다. S3 버전 관리를 사용하면 버킷에 저장된 모든 버전의 객체를 모두 보존, 검색 및 복원할 수 있으며, 의도치 않은 사용자 작업 및 애플리케이션 장애로부터 더 쉽게 복구할 수 있습니다. 

 

즉, 버전 관리가 활성화된 경우, S3 버킷에 업로드된 객체의 버전이 업데이트될 때마다 새로운 버전이 생성되고 기존의 최신 버전은 이전 버전으로 유지되는 것입니다. 객체 버전은 독립적으로 저장되며, 변경되거나 삭제되어도 해당 버전은 보존되며, 객체의 변경 이력을 보존하고 필요한 경우 이전 버전으로 복원할 수 있는 유연성을 제공하는 것이 S3 버킷 버전 관리의 역할입니다.

 

따라서 현재 버전은 가장 최신의 업데이트된 객체에 대한 데이터를 담고 있는 버전이고, 이전 버전은 현재 버전을 제외한 현재 버전의 이전 버전을 말하는 것입니다.

 

아래에서 추가적으로 말씀드리겠습니다 :)

 

4. 버전 관리 워크플로우

버전 관리 워크플로우를 통해 현재버전, 이전버전에 대한 추가 설명 및 삭제마커에 대해 설명드리겠습니다.

 

우선 버킷에 대한 버전 관리를 사용 설정하면 S3는 저장되는 객체에 대해 고유한 버전 ID를 자동으로 생성합니다.

예를 들어, photo.gif(버전 111111) 및 photo.gif(버전 121212)와 같이 하나의 버킷에서 키(객체 이름)는 동일하지만 버전 ID가 다른 두 개의 객체를 보유할 수 있습니다. 

즉, 하나의 객체가 여러 개의 버전 ID를 가지고, 객체 자체는 동일하며 각 버전은 해당 객체의 특정 시점의 상태를 나타내는 버전 ID를 가지게 되는 것입니다.

 

이제 버전 관리 워크플로우를 설명드리겠습니다.

 

1. 객체의 PUT 요청

  • 버전 관리를 사용하는 버킷에 객체를 PUT할 때 덮어쓰기를 하는 것이 아니라 최신 버전의 객체를 버킷에 추가합니다.
  • 원래 객체(ID = 111111)는 버킷에 남아있는 상태에서 새 버전 ID(ID = 121212)를 할당받은 객체가 추가되는 것입니다.

2. 객체 DELETE

  • 객체를 DELETE하면 버킷에 모든 버전은 유지된 상태에서 삭제 마커가 삽입됩니다.
  • 삭제 마커는 단순히 DELETE 요청이 들어왔음을 표시하는 용도로 사용됩니다. 버전 관리가 활성화된 버킷에서 DELETE 요청이 발생하면 S3는 해당 객체를 즉시 영구적으로 삭제하지 않고 대신 삭제 마커를 버킷에 삽입합니다.
  • 그렇기 떄문에 가장 최신 버전이 삭제 마커가 됩니다.

3. 삭제 마커가 추가된 상태에서 GET 요청

  • GET 요청은 기본적으로 가장 최신에 저장된 버전을 검색합니다.
  • 가장 최신 버전이 삭제마커일 때 GET 요청을 수행하면 404 오류가 반환됩니다.
  • 즉, 버전관리가 작동하고 있는 버킷에서 삭제 요청이 들어가면 객체를 바로 영구삭제하는게 아니라, 해당 버킷에 삭제표시를 해놓고 GET 요청을 보낼 때 지워진것처럼 동작하지만 객체는 보존되어 있는 것입니다.

4. 버전 ID에 대한 GET & DELETE

  • 위와 같은 이유때문에 객체를 삭제하고 싶을 때에는 객체에 대한 DELETE가 아닌 버전 ID 값에 DELETE 요청을 보내야합니다.
  • 버전 ID를 지정하여 최신 버전이 아닌 특정 버전에 대한 객체에 대해 GET을 실행할 수 있습니다.  

  • 삭제하고자 하는 버전 ID을 지정하여 DELETE 요청을 보내게 되면, 삭제 마커가 삽입되는 것이 아닌 객체를 영구적으로 삭제할 수 있습니다.

 

여기까지 버킷 버전과 워크플로우를 설명하면서 삭제마커까지 설명드렸습니다.
이제 다시 한번 수명 주기 규칙 작업에 대한 옵션을 보겠습니다!

 

버킷에 대한 버전 관리를 공부하고 나서 해당 옵션들을 다시보면 바로 이해가 가능합니다!

  • 수명 주기 규칙 작업
    • 스토리지 클래스 간에 객체의 현재 버전 이동 : 현재 버전에 대한 전환 작업 
    • 스토리지 클래스 간에 객체의 이전 버전 이동 : 이전 버전에 대한 전환 작업
    • 객체의 현재 버전 만료 :현재 버전에 대한 만료 작업 
    • 객체의 이전 버전 영구 삭제 : 이전 버전을 영구적으로 삭제
    • 만료된 객체 삭제 마커 또는 완료되지 않은 멀티파트 업로드 삭제 

그리고 나서는 선택한 작업에 따라 다른 옵션들이 추가적으로 나타납니다.

  • 스토리지 클래스 간에 객체의 현재 버전을 이전하려면 스토리지 클래스 간에 객체의 현재 버전 이전에서 다음을 수행합니다.
    스토리지 클래스 이전에서 다음으로 이전할 스토리지 클래스를 선택합니다.
    객체 생성일 후 일수에 생성일 후 객체를 이전할 일수를 입력합니다.

  • 스토리지 클래스 간에최신이 아닌객체 버전을 이전하려면스토리지 클래스 간에 최신이 아닌 객체 버전 이전에서 다음을 수행합니다.
    스토리지 클래스 이전에서 다음으로 이전할 스토리지 클래스를 선택합니다.
    객체가 최신 버전이 아니게 된 후의 일수에 생성일 후 객체를 이전할 일수를 입력합니다.

  • 객체의현재 버전을 만료하려면객체의 현재 버전 만료에서 객체 생성 후 일 수에 일 수를 입력합니다.
    버전 관리를 사용하지 않는 버킷에서 만료 작업을 수행하면 Amazon S3에서는 객체를 영구적으로 제거합니다. 

  • 이전 객체 버전을 영구적으로 삭제하려면 이전 객체 버전 영구 삭제 아래의 객체가 이전 버전이 된 후 일수에 일수를 입력합니다. 유지할 새 버전 수 아래에 값을 입력하여 유지할 최신 버전 수를 선택적으로 지정할 수 있습니다.

  • 만료된 삭제 마커 또는 불완전한 멀티파트 업로드 삭제에서 만료된 객체 삭제 마커 삭제 불완전한 멀티파트 업로드 삭제를 선택합니다. 그런 다음 멀티파트 업로드 시작일 이후 불완전한 멀티파트 업로드를 종료하고 정리하고자 하는 일수를 입력합니다.

이렇게 하면 수명 주기 규칙 설정이 끝납니다!!!!

 


여기까지 AWS S3 버킷의 수명 주기(Lifecycle)와 버전관리에 대해 알아보았습니다! 
도움이 되셨으면 좋겠습니다😊

다음에 만나요 👋👋

댓글