태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Amazon glacier ... 를 쓸 뻔 했던 이야기

Tech 2012.08.23 23:03

오늘은 평소에 삽질하던거랑 상관 없는 단독삽질. Amazon glacier를 써본다.

1. What is glacier?
아마존의 Archiving storage service. 저장 용량에 비해 매우 싼 대신, 트래픽 비용이 있고 꺼내오는 것도 실시간이 아니다.

참고자료:
http://www.zdnet.co.kr/news/news_view.asp?artice_id=20120822145556
http://aws.amazon.com/ko/glacier/

내가 개인 서버를 꾸려서 archive 디렉토리에 넣어둔 데이터가 대략 200G 정도 되는데, 이걸 glacier에 던져두고 싶다.
요금은 한달에 3천원 정도 예상한다. (미국 동부 0.01 USD/GB/MONTH 기준)

2. Create a vault
Amazon AWS 계정이 필요하다. 웹 콘솔에서 Services -> Glacier 를 클릭하면 결제정보가 없는 경우 payment method 를 확인한다고 뜨고, 결제 정보가 잘 들어가 있는 경우 Create vault 버튼이 덩그라니 보인다.
Vault 는 아카이브를 모으는 창고 같은 개념이다. 난 DGoonStorage 라는 이름의 vault 를 만들었다.
왼쪽 위 Region 에서 적절한 장소를 고르는걸 잊지 말자. 난 제일 싼 미국 동부(…)로 했다.
귀찮으니 Notification 설정 따위는 그냥 다 스킵.
Vault를 생성하고 나면 뭔가 보인다 …
하지만 여기서 바로 업로드를 할 수는 없다. Glacier는 콘솔에서 Vault생성/리스트업 이외의 작업이 불가하다.
파일을 업로드/다운로드하는 것 모두 "프로그래밍" 이 필요하다. 그게 내가 이런 쓰잘데기 없는 문서를 쓰는 이유이기도 하고…

3. Unit
Glacier에 저장되는 단위는 위에서 생성한 Vault, 그리고 Archive, 마지막으로 File 이 있다.

Archive는 하나 혹은 여러개의 File을 묶는 단위이다. Archive에는 Unique identifier가 발급되며 업로드/다운로드의 단위가 된다.
한 번의 업로드 요청으로 업로드 가능한 것은 4GB 까지. Archive 하나의 최대 용량은 40TB.
큰 Archive는 Multipart 요청으로 여러개의 조각으로 쪼개서 올려야 한다는 것.
그리고 Archive는 일단 정해지면 추가나 덮어쓰기가 불가하다. 삭제하고 다시 올리는 수 밖에 없다.
+ 올리고 3개월 이내, 혹은 업로드 중에 그만두고 삭제하면 '삭제비용'이 따로 든다!

Vault는 여러개의 Archive를 묶는 단위이다. Upto 1000 vaults per account per region 이라고 한다.
Archive가 하나도 없는 Vault만이 삭제가 가능하므로 Vault를 지우려면 안에 있는 Archive를 먼저 지워야 한다.

4. Amazon API
Python Boto 라는 훌륭한 라이브러리가 있다. 예전에 API 세팅할 때에는 자바로 삽질하느라 짜증났는데, 세상 좋아졌다.
하지만 Glacier는 비교적 최신에 릴리즈된 서비스라서 아직 boto 에 구현이 되어 있지 않다.

BOTO 관련 링크:
https://github.com/boto/boto
http://docs.pythonboto.org/en/latest/index.html

하지만 boto 베이스로 glacier upload/download 를 구현한 코드들이 gist 어딘가를 떠돌고 있으니(https://gist.github.com/3426839, https://gist.github.com/3424129), 조만간에 boto 에서 지원하리라 생각한다.
boto 설정을 위해서는 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY 두 개가 필요하다. 이것은 웹 콘솔에서

Security credentials -> Access Keys

에서 보거나 생성할 수 있다. 이걸 boto 라이브러리에게 전달하는 방법은 설정파일, 환경변수, connect 할때 직접 등 여러가지가 있다.
나는 ~/.boto 파일에

[Credentials]
aws_access_key_id = <MY_ACCESS_KEY>
aws_secret_access_key = <MY_SECRET_KEY>

이렇게 적어넣는 방법을 사용했다. boto 라이브러리는 pip install boto 로 설치 가능하다.



나도 일단 boto 위에 만들어보려고 하는데, glacier api reference 찾는게 좀 어렵다. 검색해도 잘 안나오네. 검색해서 찾는데 30분이나 걸렸다.

Developer guide: http://docs.amazonwebservices.com/amazonglacier/latest/dev/
API Ref for glacier: http://docs.amazonwebservices.com/amazonglacier/latest/dev/amazon-glacier-api.html

금방 될 줄 알았는데, 일단 문서를 읽어봐야 할테니 시간 좀 걸리겠네 …
boto 에 추가될때까지 기다리는게 더 빠를지도!



5. Epilogue

잠시 검색 후: issue 를 보니,

https://github.com/boto/boto/issues/929
https://github.com/boto/boto/tree/glacier

이렇게 벌써 브랜치가 생겨있다. 빠르네 ㅋㅋㅋ

아, 회사 일 할게 많아서 오늘은 삽질을 별로 못했다. 남은 시간은 boto 라이브러리(와 glacier 브랜치) 코드나 읽으며 보내야겠다. boto는 회사일에도 유용할 듯. 자바 껒여.



'Tech' 카테고리의 다른 글

Amazon glacier ... 를 쓸 뻔 했던 이야기  (0) 2012.08.23
회사일 하면서 삽질하거나 느낀거 끄적  (2) 2012.08.10
D2, array.reverse property has a side-effect. orz  (45) 2011.07.12
Thrift in D  (6) 2011.05.15
fix: ugly gitweb page  (3) 2010.12.12
(1/2) Programming in clojure  (4) 2010.08.08
Trackbacks 0 : Comments 0