本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 EBS direct API 写入 Amazon EBS 快照
以下步骤介绍了如何使用 EBS direct API 写入增量快照:
-
使用 StartSnapshot 操作并指定父快照 ID,可以启动一个快照作为现有快照的增量快照,忽略父快照 ID 可启动新快照。此操作返回处于“待处理”状态的新快照 ID。
-
使用 PutSnapshotBlock 操作并指定待处理快照的 ID,以便以单个数据块的形式向其添加数据。您必须为传输的数据块指定一个 Base64 编码的 SHA256 校验和。服务将计算接收到的数据的校验和,并使用您指定的校验和对其进行验证。如果校验和不匹配,则操作失败。
-
当您完成将数据添加到待处理快照的操作后,使用 CompleteSnapshot 操作启动一个异步工作流,用于密封快照并将其移动到已完成状态。
重复这些步骤,使用之前创建的快照作为父级创建新的增量快照。
例如,在下图中,快照 A 是启动的第一个新快照。快照 A 用作父快照来启动快照 B。快照 B 用作父快照来启动和创建快照 C。快照 A、B 和 C 均为增量快照。快照 A 用于创建 EBS 卷 1。快照 D 创建自 EBS 卷 1。快照 D 是 A 的增量快照;它不是 B 或 C 的增量快照。
以下示例显示如何使用 EBS 直接 API 写入快照。
启动快照
- AWS CLI
-
以下 start-snapshot 示例命令启动
8
GiB 快照,使用快照snap-123EXAMPLE1234567
作为父快照。新快照将是父快照的增量快照。如果在指定的60
分钟超时期限内,没有针对快照发出放置或完成请求,则快照将转为错误状态。550e8400-e29b-41d4-a716-446655440000
客户端令牌确保请求的幂等性。如果省略了客户端令牌,AWS 开发工具包会自动为您生成一个。有关幂等性的更多信息,请参阅 确保 StartSnapshot API 请求中的幂等性。aws ebs start-snapshot --volume-size
8
--parent-snapshotsnap-123EXAMPLE1234567
--timeout60
--client-token550e8400-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 示例请求启动
8
GiB 快照,使用快照snap-123EXAMPLE1234567
作为父快照。新快照将是父快照的增量快照。如果在指定的60
分钟超时期限内,没有针对快照发出放置或完成请求,则快照将转为错误状态。550e8400-e29b-41d4-a716-446655440000
客户端令牌确保请求的幂等性。如果省略了客户端令牌,AWS 开发工具包会自动为您生成一个。有关幂等性的更多信息,请参阅 确保 StartSnapshot API 请求中的幂等性。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 }
将数据放入快照
- AWS CLI
-
以下 put-snapshot 示例命令将
524288
字节的数据写入快照1000
上的数据块索引snap-0aaEXAMPLEe306d62
。Base64 编码的QOD3gmEQOXATfJx2Aa34W4FU2nZGyXfqtsUuktOw8DM=
校验和使用SHA256
算法生成。传输的数据位于/tmp/data
文件中。aws ebs put-snapshot-block --snapshot-id
snap-0aaEXAMPLEe306d62
--block-index1000
--data-length524288
--block-data/tmp/data
--checksumQOD3gmEQOXATfJx2Aa34W4FU2nZGyXfqtsUuktOw8DM=
--checksum-algorithmSHA256
以下为上一个命令的示例响应,其中确认服务接收的数据的数据长度、校验和以及校验和算法。
{ "DataLength": "524288", "Checksum": "QOD3gmEQOXATfJx2Aa34W4FU2nZGyXfqtsUuktOw8DM=", "ChecksumAlgorithm": "SHA256" }
- AWS API
-
以下 PutSnapshot 示例请求将
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 {}
完成快照
- AWS CLI
-
以下 complete-snapshot 示例命令完成快照
snap-0aaEXAMPLEe306d62
。该命令指定将5
数据块写入快照。6D3nmwi5f2F0wlh7xX8QprrJBFzDX8aacdOcA3KCM3c=
校验和表示写入快照的完整数据集的校验和。有关校验和的更多信息,请参阅本指南前文中的使用 EBS direct API 校验和来验证快照数据。aws ebs complete-snapshot --snapshot-id
snap-0aaEXAMPLEe306d62
--changed-blocks-count5
--checksum6D3nmwi5f2F0wlh7xX8QprrJBFzDX8aacdOcA3KCM3c=
--checksum-algorithmSHA256
--checksum-aggregation-methodLINEAR
以下为上一个命令的示例响应。
{ "Status": "pending" }
- AWS API
-
以下 CompleteSnapshot 示例请求完成快照
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"}