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-name
myvault
{ "location": "/123456789012/vaults/
myvault
" }
참고
모든 S3 Glacier 명령에는 계정 ID 파라미터가 필요합니다. 현재 계정을 사용하려면 하이픈 문자(--account-id -
)를 사용합니다.
파일 업로드 준비
테스트 업로드를 위한 파일을 생성합니다. 다음 명령은 3MiB의 임의 데이터를 포함하는 largefile
이라는 파일을 생성합니다.
Linux 또는 macOS
$
dd if=/dev/urandom of=
largefile
bs=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 createnew
largefile
3145728File C:\temp\largefile is created
그런 다음 파일 분할기를 사용하여 파일을 1MB(1,048,576바이트)의 청크로 분할합니다.
$
split -b 1048576 --verbose
largefile
chunkcreating 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 --body
chunkaa
--range 'bytes 0-1048575/*' --account-id - --vault-namemyvault
{ "checksum": "e1f2a7cd6e047fa606fe2f0280350f69b9f8cfa602097a9a026360a7edc1f553" }
$
aws glacier upload-multipart-part --upload-id $UPLOADID --body
chunkab
--range 'bytes 1048576-2097151/*' --account-id - --vault-namemyvault
{ "checksum": "e1f2a7cd6e047fa606fe2f0280350f69b9f8cfa602097a9a026360a7edc1f553" }
$
aws glacier upload-multipart-part --upload-id $UPLOADID --body
chunkac
--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 chunk
creating 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 hash123
SHA256(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 개발자 안내서의 볼트 작업