AWS CLI에서 Amazon S3 Glacier 사용
| Amazon S3 Glacier 소개 |
|---|
|
|
이 주제에서는 S3 Glacier에 대한 일반적인 태스크를 수행하는 AWS CLI 명령의 예제를 보여줍니다. 이 예제는 AWS CLI를 사용하여 대용량 파일을 분할하고 명령줄에서 업로드하여 S3 Glacier로 업로드 방법을 보여줍니다.
AWS Command Line Interface(AWS CLI)를 사용하여 Amazon S3 Glacier의 기능에 액세스할 수 있습니다. S3 Glacier에 대한 AWS CLI 명령을 나열하려면 다음 명령을 사용합니다.
aws glacier help
참고
명령 참조 및 추가 예제는 AWS CLI 명령 참조의 aws glacier 섹션을 참조하세요.
사전 조건
glacier 명령을 실행하려면 다음을 수행해야 합니다.
AWS CLI를 설치하고 구성합니다. 자세한 내용은 최신 버전의 AWS CLI 설치 또는 업데이트 및 AWS CLI에 대한 인증 및 액세스 보안 인증(을)를 참조하세요.
-
이 자습서에서는 Linux 및 macOS를 비롯한 UNIX 계열 운영 체제에 일반적으로 사전 설치된 몇 가지 명령줄 도구를 사용합니다. Windows 사용자는 Cygwin
을 설치하고 Cygwin 터미널에서 명령을 실행하여 동일한 도구를 사용할 수 있습니다. 동일한 기능을 수행하는 Windows 기본 명령 및 유틸리티가 표시되어 있습니다(사용 가능한 경우).
Amazon S3 Glacier 볼트 생성
create-vault 명령을 사용하여 볼트를 생성합니다.
$aws glacier create-vault --account-id - --vault-namemyvault{ "location": "/123456789012/vaults/myvault" }
참고
모든 S3 Glacier 명령에는 계정 ID 파라미터가 필요합니다. 현재 계정을 사용하려면 하이픈 문자(--account-id -)를 사용합니다.
파일 업로드 준비
테스트 업로드를 위한 파일을 생성합니다. 다음 명령은 3MiB의 임의 데이터를 포함하는 largefile이라는 파일을 생성합니다.
Linux 또는 macOS
$dd if=/dev/urandom of=largefilebs=3145728 count=11+0 records in 1+0 records out 3145728 bytes (3.1 MB) copied, 0.205813 s, 15.3 MB/s
dd는 입력 파일에서 출력 파일로 많은 바이트를 복사하는 유틸리티입니다. 앞의 예제에서는 시스템 디바이스 파일 /dev/urandom을 임의 데이터 소스로 사용합니다. fsutil은 Windows에서 유사한 함수를 수행합니다.
Windows
C:\>fsutil file createnewlargefile3145728File C:\temp\largefile is created
그런 다음 파일 분할기를 사용하여 파일을 1MB(1,048,576바이트)의 청크로 분할합니다.
$split -b 1048576 --verboselargefilechunkcreating file `chunkaa' creating file `chunkab' creating file `chunkac'
멀티파트 업로드 및 파일 업로드 시작
initiate-multipart-upload 명령을 사용하여 Amazon S3 Glacier에서 멀티파트 업로드를 생성합니다.
$aws glacier initiate-multipart-upload --account-id - --archive-description "multipart upload test" --part-size 1048576 --vault-namemyvault{ "uploadId": "19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ", "location": "/123456789012/vaults/myvault/multipart-uploads/19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ" }
S3 Glacier에서 멀티파트 업로드를 구성하려면 각 파트의 크기(바이트, 이 예제에서는 1MiB), 볼트 이름 및 계정 ID가 필요합니다. 작업이 완료되면 AWS CLI에서 업로드 ID를 출력합니다. 나중에 사용하기 위해 업로드 ID를 셸 변수에 저장합니다.
Linux 또는 macOS
$UPLOADID="19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ"
Windows
C:\>set UPLOADID="19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ"
그런 다음 upload-multipart-part 명령을 사용하여 세 개의 파트를 각각 업로드합니다.
$aws glacier upload-multipart-part --upload-id $UPLOADID --bodychunkaa--range 'bytes 0-1048575/*' --account-id - --vault-namemyvault{ "checksum": "e1f2a7cd6e047fa606fe2f0280350f69b9f8cfa602097a9a026360a7edc1f553" }$aws glacier upload-multipart-part --upload-id $UPLOADID --bodychunkab--range 'bytes 1048576-2097151/*' --account-id - --vault-namemyvault{ "checksum": "e1f2a7cd6e047fa606fe2f0280350f69b9f8cfa602097a9a026360a7edc1f553" }$aws glacier upload-multipart-part --upload-id $UPLOADID --bodychunkac--range 'bytes 2097152-3145727/*' --account-id - --vault-namemyvault{ "checksum": "e1f2a7cd6e047fa606fe2f0280350f69b9f8cfa602097a9a026360a7edc1f553" }
참고
앞의 예에서는 Linux에서 달러 기호($)를 사용하여 UPLOADID 셸 변수의 내용을 참조합니다. Windows 명령줄에서는 변수 이름의 양쪽에 퍼센트 기호(%)를 사용합니다(예: %UPLOADID%).
S3 Glacier에서 올바른 순서로 다시 수집할 수 있도록 각 파트를 업로드할 때 각 파트의 바이트 범위를 지정해야 합니다. 각 조각은 1,048,576바이트입니다. 따라서 첫 번째 조각은 0-1048575바이트, 두 번째 조각은 1048576-2097151바이트, 세 번째 조각은 2097152-3145727바이트를 차지합니다.
업로드 완료
Amazon S3 Glacier에서 업로드된 모든 조각이 AWS에 도달했는지 확인하려면 원본 파일의 트리 해시가 필요합니다.
트리 해시를 계산하려면 파일을 1MiB 파트로 분할하고 각 조각의 이진 SHA-256 해시를 계산합니다. 그런 다음 해시 목록을 쌍으로 분할하고, 2개의 이진 해시를 각 쌍으로 결합하며, 결과의 해시를 가져옵니다. 하나의 해시만 남을 때까지 이 프로세스를 반복합니다. 임의 레벨에서 홀수 해시가 있을 경우 수정하지 않고 다음 레벨로 승격시킵니다.
명령줄 유틸리티를 사용할 때 트리 해시를 올바로 계산하는 핵심은 각 해시를 이진 형식으로 저장하고 마지막 단계에서만 16진수로 변환하는 것입니다. 트리의 16진수 버전 해시를 결합하거나 해시할 경우 잘못된 결과가 발생할 수 있습니다.
참고
Windows 사용자는 type 대신 cat 명령을 사용할 수 있습니다. OpenSSL은 OpenSSL.org
트리 해시를 계산하려면
-
아직 분할하지 않은 경우, 원본 파일을 1MiB로 분할합니다.
$split --bytes=1048576 --verbose largefile chunkcreating file `chunkaa' creating file `chunkab' creating file `chunkac' -
각 청크의 이진 SHA-256 해시를 계산 및 저장합니다.
$openssl dgst -sha256 -binary chunkaa >hash1$openssl dgst -sha256 -binary chunkab >hash2$openssl dgst -sha256 -binary chunkac >hash3 -
처음 2개 해시를 결합하고 결과의 이진 해시를 가져옵니다.
$cat hash1 hash2 > hash12$openssl dgst -sha256 -binary hash12 > hash12hash -
청크
aa및ab의 상위 해시를 청크ac의 해시와 결합하고 결과를 해시합니다. 이때는 16진수가 출력됩니다. 결과를 셸 변수에 저장합니다.$cat hash12hash hash3 > hash123$openssl dgst -sha256 hash123SHA256(hash123)= 9628195fcdbcbbe76cdde932d4646fa7de5f219fb39823836d81f0cc0e18aa67$TREEHASH=9628195fcdbcbbe76cdde932d4646fa7de5f219fb39823836d81f0cc0e18aa67
마지막으로 complete-multipart-upload 명령을 사용하여 업로드를 완료합니다. 이 명령에서는 원본 파일의 크기(바이트), 최종 트리 해시 값(16진수) 및 계정 ID와 볼트 이름을 사용합니다.
$aws glacier complete-multipart-upload --checksum $TREEHASH --archive-size 3145728 --upload-id $UPLOADID --account-id - --vault-name myvault{ "archiveId": "d3AbWhE0YE1m6f_fI1jPG82F8xzbMEEZmrAlLGAAONJAzo5QdP-N83MKqd96Unspoa5H5lItWX-sK8-QS0ZhwsyGiu9-R-kwWUyS1dSBlmgPPWkEbeFfqDSav053rU7FvVLHfRc6hg", "checksum": "9628195fcdbcbbe76cdde932d4646fa7de5f219fb39823836d81f0cc0e18aa67", "location": "/123456789012/vaults/myvault/archives/d3AbWhE0YE1m6f_fI1jPG82F8xzbMEEZmrAlLGAAONJAzo5QdP-N83MKqd96Unspoa5H5lItWX-sK8-QS0ZhwsyGiu9-R-kwWUyS1dSBlmgPPWkEbeFfqDSav053rU7FvVLHfRc6hg" }
describe-vault 명령을 사용하여 볼트 상태를 확인할 수도 있습니다.
$aws glacier describe-vault --account-id - --vault-name myvault{ "SizeInBytes": 3178496, "VaultARN": "arn:aws:glacier:us-west-2:123456789012:vaults/myvault", "LastInventoryDate": "2018-12-07T00:26:19.028Z", "NumberOfArchives": 1, "CreationDate": "2018-12-06T21:23:45.708Z", "VaultName": "myvault" }
참고
볼트 상태는 매일 한 번 정도 업데이트됩니다. 자세한 내용은 볼트 작업을 참조하세요.
이제 생성한 청크 및 해시 파일을 안전하게 제거할 수 있습니다.
$rm chunk* hash*
멀티파트 업로드에 대한 자세한 내용은 Amazon S3 Glacier 개발자 안내서에서 파트로 대용량 아카이브 업로드 및 체크섬 컴퓨팅을 참조하세요.
리소스
AWS CLI 참조:
서비스 참조:
-
Amazon S3 Glacier 개발자 안내서의 대용량 아카이브를 여러 부분으로 나누어 업로드
-
Amazon S3 Glacier 개발자 안내서의 체크섬 계산
-
Amazon S3 Glacier 개발자 안내서의 볼트 작업