

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# EBS direct API を使用して Amazon EBS スナップショットへ書き込む
<a name="writesnapshots"></a>

次の手順では、EBS direct API を使用して増分スナップショットを書き込む方法について説明します。

1. StartSnapshot アクションを使用して親スナップショット ID を指定し、既存のスナップショットの増分スナップショットとしてスナップショットを開始します。または、親スナップショット ID を省略して新しいスナップショットを開始します。このアクションは、保留状態にある新しいスナップショットの ID を返します。

1. PutSnapshotBlock アクションを使用し、保留中のスナップショットの ID を指定してデータを個別のブロックとして追加します。データのブロックを送信する際に、Base64 でエンコードした SHA256 チェックサムを指定する必要があります。サービスは、受信したデータのチェックサムを計算し、指定したチェックサムと照合してデータを検証します。チェックサムが一致しない場合、アクションは失敗します。

1. 保留中のスナップショットに対するデータの追加が完了したら、CompleteSnapshot アクションを使用して非同期ワークフローを開始し、スナップショットをシールして完了状態に移行させます。

上記の手順を繰り返し、以前に作成したスナップショットを親とする新しい増分スナップショットを作成します。

例えば、次の図のスナップショット A は、最初に開始した新しいスナップショットです。スナップショット A を親スナップショットとしてスナップショット B を開始します。スナップショット B を親スナップショットとしてスナップショット C を開始および作成します。スナップショット A、B、C は、増分スナップショットです。スナップショット A を使用して EBS ボリューム 1 を作成します。スナップショット D を EBS ボリューム 1 から作成します。スナップショット D は A の増分スナップショットであり、B または C の増分スナップショットではありません。

![EBS direct API を使用して増分スナップショットを作成します。](http://docs.aws.amazon.com/ja_jp/ebs/latest/userguide/images/ebs-apis-write.png)


次に、EBS direct API を使用しながらスナップショットに書き込む場合の例を示します。

**Topics**
+ [スナップショットの開始](#start-snapshot)
+ [スナップショットへのデータの書き込み](#put-data)
+ [スナップショットの完了](#complete-snapshot)

## スナップショットの開始
<a name="start-snapshot"></a>

------
#### [ AWS CLI ]

次の [start-snapshot](https://docs.aws.amazon.com/cli/latest/reference/ebs/start-snapshot.html) コマンドの例では、`8` を親スナップショットとして使用し、`snap-123EXAMPLE1234567` GiB スナップショットを開始します。新しいスナップショットは、親スナップショットの増分スナップショットになります。指定した `60` 分のタイムアウト期間内にスナップショットに対する書き込みリクエストまたは完了リクエストが行われない場合、スナップショットはエラー状態に移行します。`550e8400-e29b-41d4-a716-446655440000` クライアントトークンは、リクエストのべき等を保証します。クライアントトークンを省略すると、 AWS SDK によって自動的にクライアントトークンが生成されます。べき等の詳細については、[StartSnapshot API リクエストのべき等性を確保](ebs-direct-api-idempotency.md)を参照してください。

```
aws ebs start-snapshot --volume-size {{8}} --parent-snapshot {{snap-123EXAMPLE1234567}} --timeout {{60}} --client-token {{550e8400-e29b-41d4-a716-446655440000}}
```

前のコマンドに対する次のレスポンスの例は、スナップショット ID、 AWS アカウント ID、ステータス、ボリュームサイズ (GiB)、スナップショット内の各ブロックのサイズを示しています。スナップショットは `pending` 状態で開始されます。スナップショットにデータを書き込むには、後続の `put-snapshot-block` コマンドでスナップショット ID を指定します。次に `complete-snapshot` コマンドを使用してスナップショットを完了し、ステータスを `completed` に変更します。

```
{
    "SnapshotId": "snap-0aaEXAMPLEe306d62",
    "OwnerId": "111122223333",
    "Status": "pending",
    "VolumeSize": 8,
    "BlockSize": 524288
}
```

------
#### [ AWS API ]

次の [StartSnapshot](https://docs.aws.amazon.com/ebs/latest/APIReference/API_StartSnapshot.html) リクエストの例では、スナップショット `8` を親スナップショットとして使用し、`snap-123EXAMPLE1234567` GiB スナップショットを開始します。新しいスナップショットは、親スナップショットの増分スナップショットになります。指定した `60` 分のタイムアウト期間内にスナップショットに対する書き込みリクエストまたは完了リクエストが行われない場合、スナップショットはエラー状態に移行します。`550e8400-e29b-41d4-a716-446655440000` クライアントトークンは、リクエストのべき等を保証します。クライアントトークンを省略すると、 AWS SDK によって自動的にクライアントトークンが生成されます。べき等の詳細については、[StartSnapshot API リクエストのべき等性を確保](ebs-direct-api-idempotency.md)を参照してください。

```
POST /snapshots HTTP/1.1
Host: ebs.us-east-2.amazonaws.com
Accept-Encoding: identity
User-Agent: {{<User agent parameter>}}
X-Amz-Date: 20200618T040724Z
Authorization: {{<Authentication parameter>}}

{
    "VolumeSize": {{8}},
    "ParentSnapshot": {{snap-123EXAMPLE1234567}},
    "ClientToken": "{{550e8400-e29b-41d4-a716-446655440000}}",
    "Timeout": {{60}}
}
```

前のリクエストに対する次のレスポンスの例は、スナップショット ID、 AWS アカウント ID、ステータス、ボリュームサイズ (GiB)、スナップショット内の各ブロックのサイズを示しています。スナップショットは保留状態で開始されます。スナップショットにデータを書き込むには、後続の `PutSnapshotBlocks` リクエストでスナップショット ID を指定します。

```
HTTP/1.1 201 Created
x-amzn-RequestId: 929e6eb9-7183-405a-9502-5b7da37c1b18
Content-Type: application/json
Content-Length: 181
Date: Thu, 18 Jun 2020 04:07:29 GMT
Connection: keep-alive

{
    "BlockSize": 524288,
    "Description": null,
    "OwnerId": "138695307491",
    "Progress": null,
    "SnapshotId": "snap-052EXAMPLEc85d8dd",
    "StartTime": null,
    "Status": "pending",
    "Tags": null,
    "VolumeSize": 8
}
```

------

## スナップショットへのデータの書き込み
<a name="put-data"></a>

------
#### [ AWS CLI ]

次の [put-snapshot-block](https://docs.aws.amazon.com/cli/latest/reference/ebs/put-snapshot-block.html) コマンドの例では、`524288` バイトのデータをスナップショット `1000` のブロックインデックス `snap-0aaEXAMPLEe306d62` に書き込みます。Base64 でエンコードされた `QOD3gmEQOXATfJx2Aa34W4FU2nZGyXfqtsUuktOw8DM=` チェックサムが、`SHA256` アルゴリズムを使用して生成されています。送信されるデータは、`/tmp/data` ファイルにあります。

```
aws ebs put-snapshot-block --snapshot-id {{snap-0aaEXAMPLEe306d62}} --block-index {{1000}} --data-length {{524288}} --block-data {{/tmp/data}} --checksum {{QOD3gmEQOXATfJx2Aa34W4FU2nZGyXfqtsUuktOw8DM=}} --checksum-algorithm {{SHA256}}
```

前のコマンドに対する次のレスポンスの例では、サービスによって受信されたデータのデータ長、チェックサム、チェックサムアルゴリズムが返されます。

```
{
    "DataLength": "524288",
    "Checksum": "QOD3gmEQOXATfJx2Aa34W4FU2nZGyXfqtsUuktOw8DM=",
    "ChecksumAlgorithm": "SHA256"
}
```

------
#### [ AWS API ]

次の [PutSnapshot](https://docs.aws.amazon.com/ebs/latest/APIReference/API_PutSnapshotBlock.html) リクエストの例では、`524288` バイトのデータをスナップショット `1000` のブロックインデックス `snap-052EXAMPLEc85d8dd` に書き込みます。Base64 でエンコードされた `QOD3gmEQOXATfJx2Aa34W4FU2nZGyXfqtsUuktOw8DM=` チェックサムが、`SHA256` アルゴリズムを使用して生成されています。データは、リクエストの本文で送信され、次の例では {{BlockData}} として示されています。

```
PUT /snapshots/{{snap-052EXAMPLEc85d8dd}}/{{blocks}}/1000 HTTP/1.1
Host: ebs.us-east-2.amazonaws.com
Accept-Encoding: identity
x-amz-Data-Length: {{524288}}
x-amz-Checksum: {{QOD3gmEQOXATfJx2Aa34W4FU2nZGyXfqtsUuktOw8DM=}}
x-amz-Checksum-Algorithm: {{SHA256}}
User-Agent: {{<User agent parameter>}}
X-Amz-Date: 20200618T042215Z
X-Amz-Content-SHA256: UNSIGNED-PAYLOAD
Authorization: {{<Authentication parameter>}}
          
          {{BlockData}}
```

前のリクエストに対する次のレスポンスの例では、サービスが受信したデータのデータ長、チェックサム、チェックサムアルゴリズムが返されます。

```
HTTP/1.1 201 Created
x-amzn-RequestId: 643ac797-7e0c-4ad0-8417-97b77b43c57b
x-amz-Checksum: QOD3gmEQOXATfJx2Aa34W4FU2nZGyXfqtsUuktOw8DM=
x-amz-Checksum-Algorithm: SHA256
Content-Type: application/json
Content-Length: 2
Date: Thu, 18 Jun 2020 04:22:12 GMT
Connection: keep-alive

{}
```

------

## スナップショットの完了
<a name="complete-snapshot"></a>

------
#### [ AWS CLI ]

次の [complete-snapshot](https://docs.aws.amazon.com/cli/latest/reference/ebs/complete-snapshot.html) コマンドの例では、スナップショット `snap-0aaEXAMPLEe306d62` を完了します。このコマンドは、`5` ブロックをスナップショットに書き込むことを指定します。`6D3nmwi5f2F0wlh7xX8QprrJBFzDX8aacdOcA3KCM3c=` チェックサムは、スナップショットに書き込まれたデータセット全体のチェックサムを示します。チェックサムの詳細については、このガイドの前半にある[EBS direct API チェックサムを使用してスナップショットデータを検証](ebsapis-using-checksums.md)を参照してください。

```
aws ebs complete-snapshot --snapshot-id {{snap-0aaEXAMPLEe306d62}} --changed-blocks-count {{5}} --checksum {{6D3nmwi5f2F0wlh7xX8QprrJBFzDX8aacdOcA3KCM3c=}} --checksum-algorithm {{SHA256}} --checksum-aggregation-method {{LINEAR}}
```

前のコマンドに対するレスポンスの例を次に示します。

```
{
    "Status": "pending"
}
```

------
#### [ AWS API ]

次の [CompleteSnapshot](https://docs.aws.amazon.com/ebs/latest/APIReference/API_CompleteSnapshot.html) リクエストの例では、スナップショット `snap-052EXAMPLEc85d8dd` を完了します。このコマンドは、`5` ブロックをスナップショットに書き込むことを指定します。`6D3nmwi5f2F0wlh7xX8QprrJBFzDX8aacdOcA3KCM3c=` チェックサムは、スナップショットに書き込まれたデータセット全体のチェックサムを示します。

```
POST /snapshots/completion/{{snap-052EXAMPLEc85d8dd}} HTTP/1.1
Host: ebs.us-east-2.amazonaws.com
Accept-Encoding: identity
x-amz-ChangedBlocksCount: 5
x-amz-Checksum: {{6D3nmwi5f2F0wlh7xX8QprrJBFzDX8aacdOcA3KCM3c=}}
x-amz-Checksum-Algorithm: {{SHA256}}
x-amz-Checksum-Aggregation-Method: {{LINEAR}}
User-Agent: {{<User agent parameter>}}
X-Amz-Date: 20200618T043158Z
Authorization: {{<Authentication parameter>}}
```

前のリクエストに対するレスポンスの例を次に示します。

```
HTTP/1.1 202 Accepted
x-amzn-RequestId: 06cba5b5-b731-49de-af40-80333ac3a117
Content-Type: application/json
Content-Length: 20
Date: Thu, 18 Jun 2020 04:31:50 GMT
Connection: keep-alive

{"Status":"pending"}
```

------