끄적이는 보송

[AWS] S3 Glacier 객체 복원하기 본문

STUDY/AWS

[AWS] S3 Glacier 객체 복원하기

끄적이는 보송 2022. 9. 16. 17:47
반응형

Amazon S3 Glacier는 콜드 스토리지처럼 저렴하게 장기간 스토리지를 보관할 수 있는 서비스이다. 자주 액세스 하지 않으며 싸게 싸게 오랫동안 보관할꺼라면 이점이 있는 서비스다. 이번에 S3 Glacier Deep Archive의 객체 복원을 다룰일이 생겨 S3 Glacier Deep Archive 기준으로 관련하여 정리할 겸 글을 써볼까 한다. 우선 복원하기 전에 S3 객체를 Glacier에 넣는 것부터 시작한다.

 

Glacier Deep Archive로 객체 Storage Class 변경하기

S3 객체 스토리지 Class를 Glacier Deep Archive로 변경하는 것은 어렵지 않다. S3 콘솔 환경에서 객체를 선택하고 Storage Class를 'Glacier Deep Archive'를 선택하면 된다. 객체를 Glacier로 옮길 때는 아래 그림처럼 폴더째로 다수의 객체를 한 번에 선택해 변경할 수 있으며, 바로바로 옮겨진다.

 

 

Glacier Deep Archive로 객체 복원(Restore)하기

Glacier에 있는 객체를 다시 가져오려면 먼저 '복원(Restore)' 이란 것을 해야 한다. 복원 자체를 수행하는 일은 크게 어렵지 않다. 복원하고자 하는 객체를 선택하여 'Action'에 'Initiate restore'에 접근하여 필요 값을 입력해주면 끝이다. 입력해줘야 하는 값은 'Number of days that the restored copy is available'와 'Retrieval tier'가 끝이다.

'Number of days that the restored copy is available'
: 복원될 객체의 유효기간을 의미하며, 지정된 값 동안 복원된 데이터가 유지되었다가 만료가 되면 다시 사라진다. 다만 Glacier에 있는 객체는 그대로 유지되며, 복원된 객체는 그 유효기간 일반 Standard Storage Class의 비용이 과금된다.

참고로 객체가 복원되었다면 유효기간이 만료되기 전에 언제든지 그 기간을 늘릴 수도 줄일 수도 있다. 다만 유기기간 설정 입력값이 1부터이며, 당일 만료되도록 설정은 불가능하다. 설정은 콘솔 환경에서도 가능하고 아래 CLI 명령어를 통해 수행할 수 있다.

$ aws s3api restore-object --bucket <my-glacier-bucket> --key <file.txt> --restore-request Days=<number_of_days>

[+] https://docs.aws.amazon.com/cli/latest/reference/s3api/restore-object.html
[+] Restoring an archived object - https://docs.aws.amazon.com/AmazonS3/latest/userguide/restoring-objects.html

 

'Retrieval tier'
: 얼마나 빠르게 객체를 복원할지를 의미한다. Standard와  Bulk를 선택할 수 있으며, Standard는 최대 12시간 안에, Bulk는 최대 48시간 안에 객체가 복원된다. 가격적인 측면에도 Bulk가 훨씬 더 싸니 급할 거 없으면 Bulk로 하면 된다.

복원 신청을 성공적으로 완료하면 객체마다 아래처럼 복원이 진행 중이라는 화면이 출력된다. 

 

 

왜 이렇게 오래 시간이 소요되는 걸까?

Standard는 12시간, Bulk는 48시간 안에 복원된다고 AWS에선 안내하고 있다. 실제로는 이것보다 좀 더 빠르지만 그래도 여전히 느린 것은 사실이다. 왜 이렇게 느린 걸까? 이유는 단순하게 Glacier는 그렇게 생겨먹도록 태어났기 때문이다. Glacier의 주목적은 장기적인 데이터 보관과 저(低) 비용 저(低) 액세스에 있다. 물론 급하다면 더 웃돈을 주고 비교적 빠르게 데이터를 불러올 수도 있다.

이것만으로는 납득하기 어려울 것이다. AWS에서 직접적으로 언급한 내용은 없지만 Glacier는 테이프 드라이브가 아닌가 하는 소문(?)은 있다. 그 이유는 Glacier 서비스를 다른 경쟁사의 테이프 백업 서비스(Dropbox라던가)를 직접적인 경쟁자로 포지셔닝했기 때문에 Glacier 스토리지에 사용되는 기본 하드웨어는 테이브 기반이라는 이야기가 있다.

만약 이게 사실이라면 테이프 기반 스토리지를 사용하는 Glacier에서 S3의 Standard Class(EBS 볼륨 기반 스토리지를 사용하는...)로 끄집어내기 때문에 물리적인 작업 혹은 시간이 걸리는 작업이 있어 그렇게 오랜 기간이 소요되는 게 아닌가라는 생각이 든다. 하지만 이는 어디까지나 추측일 뿐이다.

 

 

복원 중인 객체의 Retrieval Tier 변경하기

Bulk로 복원 중인 객체를 도중에 더 빠른 Standard로 변경할 수 있다. 콘솔 환경에서 방법은 간단하게 객체에 접근해 아래 그림의 'Upgrade retrieval tier'를 클릭하여 변경해주면 된다.

다만 여기서 주의할 점이 있다. 만약 내가 처음 복원했을 때 'Number of days that the restored copy is available'을 예를 들어 2일로 설정했다면, Retrieval Tier 변경할 때도 2일로 입력해야 한다. 아래 그림처럼 14일을 넣어버리면, "Object restore is already in progress"라는 에러를 뱉어내니 참고하자.

관련하여 내용을 찾아보니 아래 공식 도큐먼트에도 변경하면 안 된다는 내용으로 보이는 글이 보인다. 

[+] https://docs.aws.amazon.com/AmazonS3/latest/userguide/restoring-objects-retrieval-options.html#restoring-objects-upgrade-tier

 

Archive retrieval options - Amazon Simple Storage Service

Standard and bulk restores for S3 Intelligent-Tiering are free of charge. However, subsequent restore requests called on an object that is already being restored are billed as a GET request.

docs.aws.amazon.com

 

 

Glacier 객체를 복원하여 영구히 유지하고 싶다면?

Glacier 객체를 성공적으로 복원됐고 객체에 접근해보면 그 유지기간과 함께 아래와 같이 복원이 되었다는 메시지가 콘솔 환경에 출력된다. 그리고 이 유지기간이 끝나면 객체는 다시 삭제된다. (이 부분을 정확히 짚고 넘어가자면 복원된 객체는 '접근할 수 있도록 Glacier에 있는 객체를 임시적으로 생성한 카피본'이라고 생각하면 된다.) 그렇다면 Glacier의 객체를 영구히 밖으로 꺼내 Standard Class로 유지하고 싶다면? 복원 시 따로 제공하는 옵션이 있을까?

결론부터 말하자면 없다. 영구 복원을 원한다면 Glacier객체를 복원하여 객체에 접근할 수 있는 환경을 만들고, 그 객체를 Copy 하여 원하는 것에 붙여 넣는 수밖에 없다. 혹시 몰라 Global Support에도 문의해보았지만 같은 답변을 받았다. [+] https://docs.aws.amazon.com/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html#supported-lifecycle-transitions
[+] 
https://aws.amazon.com/premiumsupport/knowledge-center/restore-s3-object-glacier-storage-class/ [+] https://aws.amazon.com/ko/s3/faqs/

 

 

Glacier 비용 관련하여 고래해야 할 부분은?

- Glacier 객체 보관 및 조기 삭제 관련 비용: 일단 당연하게 Glacier에 보관하는 객체 비용이다. 단, Glacier Deep Archive 기준으로 객체를 보관하면 180일간의 보관 비용은 확정된다. 즉, 한번 Glacier Deep Archive에 올린 객체는 180일 전에 삭제를 하건 말건 일단 180일 치의 비용은 과금된다는 이야기다.

- Retrival 비용: Standard와 Bulk, 그리고 이 포스팅에 다루진 않았지만 Expedited가 있다. 속도는 Expedited > Standard > Bulk 순으로 빠르며, 비용도 빠른 순서대로 높다. 자세한 비용은 공식 문서를 참고할 수 있다. 
[+] https://aws.amazon.com/ko/s3/glacier/pricing/

- Data Trasfer 비용: Glacier에로 데이터를 넣는 것은 무료다. 그리고 같은 Region에서 EC2와 Glacier 사이의 Data Trasfer 발생 비용도 무료다. 하지만 반대로 Glacier에서 꺼내는 것은 유료이다.

- 그 외에도 기타등등

 

 

정리

  •  Glacier 비용 + 복원 작업 비용 + 유효기간 동안 유지될 복원 객체 유지비용 + API Call 등을 고려하자
  • 복원 중인 객체의 유효기간은 변경할 수 없다.
  • 복원한 객체의 유효기간은 변경할 수 있다. (빠르게 바로바로)
  • 복원 중인 객체의 Retrieval tier은 Bulk에서 Standard로 변경할 수 있지만, 그 반대는 안된다.
  • Retrieval tier 변경 시, 유효기간 날짜는 반드시 동일해야 한다.
  • 만약 복원한 객체를 영구히 유지하고 싶다면, 복원된 객체를 따로 복붙 해주자
반응형
Comments