본문 바로가기

Migration

[실습] AWS Snowball 이용하여 대규모 데이터를 AWS로 이관하기

반응형

안녕하세요 서후아빠입니다. ^_^

이번 세션은 On-premise에서 AWS로 대규모 데이터를 이관할 때 사용되는 Snowball에 대해서 알아보도록 하겠습니다.

우리가 대규모 데이터를 전용선이나 VPN으로 옯길 경우, 비용과 시간이 어마 무시하게 발생하게 됩니다. 

때문에 Snowball이라는 이동 장비를 통해서 데이터를 이관하게 됩니다. 


개념도

Snowball device

구분 Snowone Snowball edge storage optimized Snowmobile
외관
마이그레이션 규모 Up to 24 TB, online and offline Up to petabytes, offline Up to exabytes, offline
배송 일반 배송 일반 배송 컨테이너 사이즈로 예약배송
보안 256비트 암호화, 변조 감지 256비트 암호화, 변조 감지 암호화, 보안 직원, GPS 추적, 비디오 감시, 경보
스토리지 용량 8 TB usable 80 TB usable <100 PB
무선 Wi-Fi N/A N/A
이동성 배터리 구동식 N/A N/A
네트워크 인터페이스 1/10Gbit RJ45 10Gbit RJ45, 25Gbit SFP+, 100Gbit QSFP28 40Gbit
단순하게 데이터 전송용으로만 선택할 경우는 Snowball Edge Storage Optimized(데이터 전송용)을 선택합니다.
아래 예시는 Snowball Edge Storage Optimized(데이터 전송용)를 수령하여 진행한 것입니다.

1단계 : Snowball Device 주문

AWS 관리 콘솔 >  AWS Snow Family > Order an AWS Snow family device

Plan your job Snow job assistance Shipping address Choose your job details Choose your security preferences
Choose a Snow job type : Import into Amazon S3 I acknowledge I have read the information above : check Shipping address : Add a new address 선택, 이름, 회사, 주소 입력
Shipping speed : Standard Shipping (or Express Shipping)
Job name : DataTrasferJob
Choose your Snow device : Snowball Edge Compute Optimized
Choose your pricing option : On-demand, per day pricing
Choose your S3 storage : 업로드할 버킷 선택
암호화 기본값 유지
Province에 서울이 없기 때문에 Gyeonggi-do로 선택합니다.
배송에서 Express Shipping과 Standard Shipping에 대한 비용 비교는 없습니다.
Standard Shipping로 진행할 경우 대략 2~3일만에 물건을 받았습니다.
S3 bucket 선택하는 부분
 - Snowball로 데이터를 모두 옮긴 후, AWS로 Appliance device가 반송되면 지정한 S3 bucket에 데이터를 모두 업로드됩니다.
 - 동일한 bucket 내 세부 경로는 추후에 prefix를 추가하여 업로드 가능합니다. 

Job Status가 “Job Created” 상태에서만 취소 가능합니다. (Job 신청후 1시간 이내)

10일 무료 기간은 AWS Snowball Edge 디바이스가 고객센터에 머무는 날로 수령일과 발송일은 제외합니다.

2단계 : Snowball Device 수령, IP 설정

Device 뒷면 RJ-45에 라인 연결 > 전면 LCD 패널에서 IP(1개만 설정 가능) 설정

RJ-45 포트 : 1개는 1G 지원, 다른 1개는 10G 지원
DHCP 지원한다고 합니다.
구성 : SnowBall device <-> 중계서버 <-> 데이터파일 있는 Target

3단계 : Snowball Device Unlocking

Unlocking : 소유한 AWS 계정이 장비에 접근하여 데이터를 넣을 수 있도록 잠금해제되고 Access key를 발급받는 과정

AWS OpsHub 이용한 Unlocking
  - OpsHub : Windows, Mac, Ubuntu에 설치되고, GUI가 있는 프로그램으로써 이 프로그램을 이용하여 Snowball device에 접근 후, Unlocking 및 데이터 전송

  - 중계서버는 OpsHub를 설치하지 못하다 보니, Unlocking 용도로만 사용 가능
  - AWS 참고 URL : https://aws.amazon.com/ko/blogs/storage/customization-and-field-maintenance-with-aws-snowball-edge-sideloading-amis/ > 7번 항목

Snowball Edge Client 이용한 Unlocking

OpsHub, Snowball Edge Client 다운로드 URL : https://aws.amazon.com/ko/snowball/resources/
Snowball Device로 데이터 전송 관련 메뉴얼 URL : https://aws.amazon.com/ko/premiumsupport/knowledge-center/snowball-edge-device-transfer-data/

4단계 : 중계서버 설정, Snowball Device로 데이터 전송

중계서버 : Snowball Device와 데이터 파일이 있는 Target 사이에서 중계역할 하는 서버
중계서버는 데이터 파일을 전송받아 압축 후, Snowball Device로 전송하는 작업이 위주이기 때문에 메모리 많이 필요하므로 최소 64G 이상 권고합니다.

AWS 관리 콘솔 >  AWS Snow Family > 진행 중인 Job 선택 > Get Credentials > Credentials (tab) > Client unlock code 확인(25자리), Download manifest

중계서버에서 unlick 진행하면서 Access_key / secret_key 확인

# 중계서버에서 unlock 진행
snowballEdge unlock-device --endpoint https:x.x.x.x:8080 --manifest-file 다운받은_manifest_file_경로 --unlock-code 확인한_25자리_code

# 중계서버에서 access-key 확인
snowballEdge list-access-keys

# 중계서버에서 access-key를 이용해서 secret key 확인
snowballEdge get-secret-access-key --access-key-id 확인한-access-key값

중계서버에서 Access_key / secret_key를 이용하여 credential 설정하여 aws configure로 등록 > aws cli 명령어 사용 가능

미설정하고 아래 s3booster 스크립트 동작시키면 "botocore.exceptions.NoCredentialsError: Unable to locate credentials" 에러팝업됩니다.

max_concurrent_requests, max_queue_size, multipart_threshold, multipart_chunksize, max_bandwidh 등 aws config 값에 설정하여 전송간 최적화 실행합니다.

전송하는 방법은 주로 큰 파일 전송하는 경우와 주로 작은(1MB 이하) 파일 전송하는 경우 2가지가 있습니다.
아래 내용은 주로 작은 파일 전송하는 경우로 작성되었습니다.

전송하는 방법은 2가지가 있습니다.
  - AWS API인 s3 cp 나 s3 sync로 전송하는 방법 : 사용은 편리하나, 전송 도중 끊어질 위험
  - 작은 파일을 압축하여 전송하는 방법 : tar로 파일 압축하여 snwoball 장비로 전송, s3booster라는 스크립트 코드 사용
    (참고 URL : https://github.com/aws-samples/s3booster-snowball)
# s3booster 스크립트 코드
python3 s3booster-snowball-v2.py --bucket_name your-own-bucket --src_dir /data/fs1/ --endpoint https://s3.ap-northeast-2.amazonaws.com --profile_name sbe1 --prefix_root fs3/ --max_process 5 --max_tarfile_size $((1*(1024**3))) --symlink no

 // buekct_name : Snowball device로 옮겨질 위치
 // src_dir : Source file 위치
 // endpoint : Snowball device에서 확인 가능한 데이터파일이 있는 로컬 IP
 // max_process : default 5, 5로 작업할 경우 메모리 초과 에러 발생 가능성, 에러 발생 시 적절한 값으로 조정
 // max_tarfile-size : default 1G (1Gb씩 tar로 압축 전송)
 // no_extract : no (tar로 압축된 파일을 S3로 업로드 시 자동 압축 해제하는 옵션)
 
# s3booster Error Log 설명
error_~ 로 시작하는 파일 : 파일전송 시 실패한 파일경로에 대한 값 확인 가능, 확인된 파일은 s3 cp 명령어로 재전송
success~로 시작하는 파일 : 파일전송 성공한 파일
filelist~로 시작하는 파일 : tar 압축 시작/성공/종료 등 info 로그, 해당 로그가 방대하게 커질 경우 용량 부족 발생 우려, cat /dev/null > fillist-yyyymmdd_@@@.log (yyyymmdd는 작업당일 생성되는 로그 파일명) 이용하여 로그 비우기
파일 전송 작업 모니터링 시 사용할 명령어 : dstat, iotop, top

5단계 : Snowball Device로 전송된 파일 검증 (개수, 크기)

리눅스ls 명령어로 확인 가능한 파일 개수는 max 1000이므로 aws s3 ls로 확인 불가능하므로 S3 API로 아래처럼 확인

# S3 bucket 전체 갯수, 용량 확인
aws s3api list-objects --bucket "your-own-bucket" --endpoint http://x.x.x.x:8080 --output json --query "[sum(Contents[].Size), length(Contents[])]"
 // buekct : Snowball device로 옮겨진 위치 
 // endpoint : Snowball device에서 확인 가능한 데이터파일이 있는 로컬 IP

# S3 bucket 내 특정 경로 하위의 파일 갯수 및 용량 확인 (ex : images 하위)
aws s3api list-objects --bucket "your-own-bucket" --endpoint http://x.x.x.x:8080 --prefix "images" --output json --query "[sum(Contents[].Size), length(Contents[])]"

# 명령어 정상 실행 시 (용량, 갯수)
[
    22310015,
    45
]
S3 API 참고 URL : https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/index.html

6단계 : Snowball Device를 AWS로 반송

Snowball Device LCD 디스플레이 위에 있는 전원 버튼을 눌러 전원 OFF (20초 정도 소요)

전원케이블을 상단 커버에 넣고 도어 닫음(총 3군데)

Snowball 팀으로 메일 전송

# 메일 예시 

수신자 : snowball-shipping@amazon.com
내용 
I would return request for Genie Music SnowballEdge 1 node. 
Please return it. Thank you. 

- JOBID : JOBID 입력
- Address : 수신자 정보(업체명, 담당자, 주소)를 영문으로 입력
- Pickup Date : YYYY/MM/DD
- Cell Phone : 수신자 전화번호

장비를 잘 포장해서 AWS로 반송하면 AWS에서 1단계에 설정한 S3 bucket으로 데이터를 업로드

반응형

'Migration' 카테고리의 다른 글

[실습] AWS MPA (Migration Portfolio Assessment) 실습하기  (2) 2023.04.17