

# Using Amazon Glacier in the AWS CLI
<a name="cli-services-glacier"></a>


| Amazon Glacier について | 
| --- | 
|    | 

このトピックでは、Amazon Glacier の一般的なタスクを実行する AWS CLI コマンドの例について説明します。これらの例は、AWS CLI を使用して大きなファイルを Amazon Glacier にアップロードする方法を示しています。これは、ファイルを小さなパーツに分割し、コマンドラインからアップロードすることで実行されます。

AWS Command Line Interface (AWS CLI) を使用して、Amazon Glacier の機能にアクセスできます。Amazon Glacier 用の AWS CLI コマンドを一覧表示するには、次のコマンドを使用します。

```
aws glacier help
```

**注記**  
コマンドリファレンスおよびその他の例については、「*AWS CLI リファレンスガイド*」の「`[aws glacier](https://docs.aws.amazon.com/cli/latest/reference/glacier/index.html)`」を参照してください。

**Topics**
+ [前提条件](#cli-services-glacier-prereqs)
+ [Amazon Glacier ボールトを作成します。](#cli-services-glacier-vault)
+ [ファイルのアップロードの準備](#cli-services-glacier-prep)
+ [マルチパートアップロードの開始とファイルのアップロード](#cli-services-glacier-initiate)
+ [アップロードの完了](#cli-services-glacier-complete)
+ [リソース](#cli-services-glacier-resources)

## 前提条件
<a name="cli-services-glacier-prereqs"></a>

`glacier` コマンドを実行するには、次のことが必要です。
+ AWS CLI をインストールして設定します。詳細については、「[AWS CLI の最新バージョンのインストールまたは更新](getting-started-install.md)」および「」を参照してください。[Authentication and access credentials for the AWS CLI](cli-chap-authentication.md)
+ このチュートリアルでは、Linux や macOS など、Unix 互換オペレーティングシステムに通常プリインストールされている、いくつかのコマンドラインツールを使用します。Windows ユーザーは、[Cygwin](https://www.cygwin.com/) をインストールし、Cygwin ターミナルからコマンドを実行することで、同じツールを使用できます。同じ機能を実行する Windows のネイティブコマンドとユーティリティはそのように注記されています。

## Amazon Glacier ボールトを作成します。
<a name="cli-services-glacier-vault"></a>

`[create-vault](https://docs.aws.amazon.com/cli/latest/reference/glacier/create-vault.html)` コマンドを使用してボールトを作成します。

```
$ aws glacier create-vault --account-id - --vault-name myvault
{
    "location": "/123456789012/vaults/myvault"
}
```

**注記**  
すべての Amazon Glacier コマンドではアカウント ID をパラメータが必須です。現在のアカウントを使用するには、ハイフン文字を使用します (`--account-id -`)。

## ファイルのアップロードの準備
<a name="cli-services-glacier-prep"></a>

テストアップロード用のファイルを作成します。以下のコマンドは、ちょうど 3 MiB のランダムデータを含む *largefile* という名前のファイルを作成します。

**Linux または macOS**

```
$ dd if=/dev/urandom of=largefile bs=3145728 count=1
1+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 3145728
File C:\temp\largefile is created
```

次に、ファイルスプリッタを使用してファイルを 1 MiB (1,048,576 バイト) のチャンクに分割します。

```
$ split -b 1048576 --verbose largefile chunk
creating file `chunkaa'
creating file `chunkab'
creating file `chunkac'
```

## マルチパートアップロードの開始とファイルのアップロード
<a name="cli-services-glacier-initiate"></a>

`[initiate-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/glacier/initiate-multipart-upload.html)` コマンドを使用して、Amazon Glacier でマルチパートアップロードを作成します。

```
$ aws glacier initiate-multipart-upload --account-id - --archive-description "multipart upload test" --part-size 1048576 --vault-name myvault
{
    "uploadId": "19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ",
    "location": "/123456789012/vaults/myvault/multipart-uploads/19gaRezEXAMPLES6Ry5YYdqthHOC_kGRCT03L9yetr220UmPtBYKk-OssZtLqyFu7sY1_lR7vgFuJV6NtcV5zpsJ"
}
```

Amazon 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](https://docs.aws.amazon.com/cli/latest/reference/glacier/upload-multipart-part.html)` コマンドを使用して 3 つのパートをそれぞれアップロードします。

```
$ aws glacier upload-multipart-part --upload-id $UPLOADID --body chunkaa --range 'bytes 0-1048575/*' --account-id - --vault-name myvault
{
    "checksum": "e1f2a7cd6e047fa606fe2f0280350f69b9f8cfa602097a9a026360a7edc1f553"
}
$ aws glacier upload-multipart-part --upload-id $UPLOADID --body chunkab --range 'bytes 1048576-2097151/*' --account-id - --vault-name myvault
{
    "checksum": "e1f2a7cd6e047fa606fe2f0280350f69b9f8cfa602097a9a026360a7edc1f553"
}
$ aws glacier upload-multipart-part --upload-id $UPLOADID --body chunkac --range 'bytes 2097152-3145727/*' --account-id - --vault-name myvault
{
    "checksum": "e1f2a7cd6e047fa606fe2f0280350f69b9f8cfa602097a9a026360a7edc1f553"
}
```

**注記**  
前の例では、ドル記号 (`$`) を使用して Linux の `UPLOADID` シェル変数の内容を参照しています。Windows コマンドラインでは、変数名の両側にパーセント記号 (%) を使用します (例:`%UPLOADID%`)。

Amazon Glacier によって正しい順序で再構成されるように、アップロード時には各パートのバイト範囲を指定する必要があります。各部分は 1,048,576 バイトであるため、1 番目の部分は 0-1048575、2 番目は 1048576-2097151、3 番目は 2097152-3145727 に配置されます。

## アップロードの完了
<a name="cli-services-glacier-complete"></a>

Amazon Glacier では、アップロードされたすべてのパーツが完全な状態で AWS に到達したことを確認するために、元のファイルの木構造ハッシュが必要になります。

木構造ハッシュを計算するには、ファイルを 1 MiB のパーツに分割し、各部分のバイナリ SHA-256 ハッシュを計算する必要があります。次に、ハッシュのリストをペアに分割し、各ペアの 2 つのバイナリハッシュを結合して、結果のハッシュを取得します。ハッシュが 1 つだけになるまでこのプロセスを繰り返します。レベルのいずれかに奇数のハッシュがある場合は、変更せずに次のレベルに昇格させます。

コマンドラインユーティリティを使用して木構造ハッシュを正しく計算するために重要なことは、各ハッシュをバイナリ形式で保存し、最後のステップでのみ 16 進数に変換することです。木構造で 16 進数バージョンのハッシュを結合またはハッシュすると、正しい結果を得ることができません。

**注記**  
Windows ユーザーは、`type` の代わりに `cat` コマンドを使用できます。Windows 用の OpenSSL は [OpenSSL.org](https://www.openssl.org/source/) で入手できます。

**木構造ハッシュを計算するには**

1. 元のファイルを分割していない場合は、1 MiB のパーツに分割します。

   ```
   $ split --bytes=1048576 --verbose largefile chunk
   creating file `chunkaa'
   creating file `chunkab'
   creating file `chunkac'
   ```

1. 各チャンクのバイナリ SHA-256 ハッシュを計算して保存します。

   ```
   $ openssl dgst -sha256 -binary chunkaa > hash1
   $ openssl dgst -sha256 -binary chunkab > hash2
   $ openssl dgst -sha256 -binary chunkac > hash3
   ```

1. 最初の 2 つのハッシュ結合を実行し、結果のバイナリハッシュを取得します。

   ```
   $ cat hash1 hash2 > hash12
   $ openssl dgst -sha256 -binary hash12 > hash12hash
   ```

1. チャンク `aa` および `ab` の親ハッシュをチャンク `ac` のハッシュと結合して結果をハッシュします。今回は 16 進数で出力します。シェル変数に結果を保存します。

   ```
   $ cat hash12hash hash3 > hash123
   $ openssl dgst -sha256 hash123
   SHA256(hash123)= 9628195fcdbcbbe76cdde932d4646fa7de5f219fb39823836d81f0cc0e18aa67
   $ TREEHASH=9628195fcdbcbbe76cdde932d4646fa7de5f219fb39823836d81f0cc0e18aa67
   ```

最後に、`[complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/glacier/complete-multipart-upload.html)` コマンドを使用してアップロードを完了します。このコマンドは、元のファイルのサイズ (バイト単位)、最終的な 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](https://docs.aws.amazon.com/cli/latest/reference/glacier/describe-vault.html)` コマンドを使用して、ボールトのステータスを確認することもできます。

```
$ 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 のボールトに関する各種操作](https://docs.aws.amazon.com/amazonglacier/latest/dev/working-with-vaults.html)」を参照してください。

これで、作成したチャンクおよびハッシュファイルを安全に削除できます。

```
$ rm chunk* hash*
```

マルチパートアップロードの詳細については、「[Amazon Glacier デベロッパーガイド](https://docs.aws.amazon.com/amazonglacier/latest/dev/uploading-archive-mpu.html)」の「[パート単位での大きなアーカイブのアップロード](https://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html)」および「*チェックサムの計算*」を参照してください。

## リソース
<a name="cli-services-glacier-resources"></a>

**AWS CLI リファレンス:**
+ `[aws glacier](https://docs.aws.amazon.com/cli/latest/reference/glacier/index.html)`
+ `[aws glacier complete-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/glacier/complete-multipart-upload.html)`
+ `[aws glacier create-vault](https://docs.aws.amazon.com/cli/latest/reference/glacier/create-vault.html)`
+ `[aws glacier describe-vault](https://docs.aws.amazon.com/cli/latest/reference/glacier/describe-vault.html)`
+ `[aws glacier initiate-multipart-upload](https://docs.aws.amazon.com/cli/latest/reference/glacier/initiate-multipart-upload.html)`

**サービスリファレンス:**
+ [Amazon Glacier デベロッパーガイド](https://docs.aws.amazon.com/amazonglacier/latest/dev/)
+ Amazon Glacier デベロッパーガイド、「[パート単位での大きなアーカイブのアップロード](https://docs.aws.amazon.com/amazonglacier/latest/dev/uploading-archive-mpu.html)」
+ Amazon Glacier デベロッパーガイド、「[チェックサムの計算](https://docs.aws.amazon.com/amazonglacier/latest/dev/checksum-calculations.html)」
+ Amazon Glacier デベロッパーガイド、「[ボールトに関する各種操作](https://docs.aws.amazon.com/amazonglacier/latest/dev/working-with-vaults.html)」