使用 EBS 直接 API 写入快照 - Amazon Elastic Compute Cloud

使用 EBS 直接 API 写入快照

以下步骤介绍了如何使用 EBS direct API 写入增量快照:

  1. 使用 StartSnapshot 操作并指定父快照 ID,可以启动一个快照作为现有快照的增量快照,忽略父快照 ID 可启动新快照。此操作返回处于“待处理”状态的新快照 ID。

  2. 使用 PutSnapshotBlock 操作并指定待处理快照的 ID,以便以单个数据块的形式向其添加数据。您必须为传输的数据块指定一个 Base64 编码的 SHA256 校验和。服务将计算接收到的数据的校验和,并使用您指定的校验和对其进行验证。如果校验和不匹配,则操作失败。

  3. 当您完成将数据添加到待处理快照的操作后,使用 CompleteSnapshot 操作启动一个异步工作流,用于密封快照并将其移动到已完成状态。

重复这些步骤,使用之前创建的快照作为父级创建新的增量快照。

例如,在下图中,快照 A 是启动的第一个新快照。快照 A 用作父快照来启动快照 B。快照 B 用作父快照来启动和创建快照 C。快照 A、B 和 C 均为增量快照。快照 A 用于创建 EBS 卷 1。快照 D 创建自 EBS 卷 1。快照 D 是 A 的增量快照;它不是 B 或 C 的增量快照。


        使用 EBS direct API 创建增量快照。

以下示例显示如何使用 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-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 示例请求启动 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-index 1000 --data-length 524288 --block-data /tmp/data --checksum QOD3gmEQOXATfJx2Aa34W4FU2nZGyXfqtsUuktOw8DM= --checksum-algorithm SHA256

以下为上一个命令的示例响应,其中确认服务接收的数据的数据长度、校验和以及校验和算法。

{ "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= 校验和表示写入快照的完整数据集的校验和。有关校验和的更多信息,请参阅本指南前文中的使用校验和

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 示例请求完成快照 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"}