このドキュメントはバージョン 1 の AWS CLI のみを対象としています。AWS CLI のバージョン 2 に関連するドキュメントについては、バージョン 2 用ユーザーガイドを参照してください。
Using Amazon S3 Glacier in the AWS CLI
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 のインストール、更新、アンインストールおよびAuthentication and access credentials for the 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 -
)。
ファイルのアップロードの準備
テストアップロード用のファイルを作成します。以下のコマンドは、ちょうど 3 MiB のランダムデータを含む 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
次に、ファイルスプリッタを使用してファイルを 1 MiB (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 では、マルチパートアップロードを設定するために各パートのサイズ (バイト) (この例では 1 MiB)、ボールト名、アカウント ID が必要です。オペレーションが完了すると、AWS CLI によってアップロード ID が出力されます。後で使用できるように、アップロード ID をシェル変数に保存します。
Linux または macOS
$
UPLOADID="
19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ
"
Windows
C:\>
set UPLOADID="
19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ
"
次に、upload-multipart-part
コマンドを使用して 3 つのパートをそれぞれアップロードします。
$
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 バイトであるため、1 番目の部分は 0-1048575、2 番目は 1048576-2097151、3 番目は 2097152-3145727 に配置されます。
アップロードの完了
Amazon S3 Glacier では、アップロードされたすべてのパーツが完全な状態で AWS に到達したことを確認するために、元のファイルの木構造ハッシュが必要になります。
木構造ハッシュを計算するには、ファイルを 1 MiB のパーツに分割し、各部分のバイナリ SHA-256 ハッシュを計算する必要があります。次に、ハッシュのリストをペアに分割し、各ペアの 2 つのバイナリハッシュを結合して、結果のハッシュを取得します。ハッシュが 1 つだけになるまでこのプロセスを繰り返します。レベルのいずれかに奇数のハッシュがある場合は、変更せずに次のレベルに昇格させます。
コマンドラインユーティリティを使用して木構造ハッシュを正しく計算するために重要なことは、各ハッシュをバイナリ形式で保存し、最後のステップでのみ 16 進数に変換することです。木構造で 16 進数バージョンのハッシュを結合またはハッシュすると、正しい結果を得ることができません。
注記
Windows ユーザーは、type
の代わりに cat
コマンドを使用できます。Windows 用の OpenSSL は OpenSSL.org
木構造ハッシュを計算するには
-
元のファイルを分割していない場合は、1 MiB のパーツに分割します。
$
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" }
注記
ボールトのステータスは約 1 日 1 回更新されます。詳細については、「Glacier のボールトに関する各種操作」を参照してください。
これで、作成したチャンクおよびハッシュファイルを安全に削除できます。
$
rm chunk* hash*
マルチパートアップロードの詳細については、Amazon S3 Glacier デベロッパーガイドの「 パート単位での大きなアーカイブのアップロード」および「チェックサムの計算」を参照してください。
リソース
AWS CLI リファレンス:
サービスリファレンス:
-
Amazon S3 Glacier デベロッパーガイド、「パート単位での大きなアーカイブのアップロード」
-
Amazon S3 Glacier デベロッパーガイド、「チェックサムの計算」
-
Amazon S3 Glacier デベロッパーガイド、「ボールトに関する各種操作」