亚马逊AWS官方博客

新增功能 – EBS Direct API – 以编程方式访问 EBS 快照内容

EBS 快照酷极了! 您可以从 AWS 管理控制台以交互方式创建它们:

您可以使用命令行 (create-snapshot) 或调用 CreateSnapshot 函数来创建它们,并且可以使用 Data Lifecycle Manager (DLM) 来设置自动快照管理

关于快照的种种

快照存储在 Amazon Simple Storage Service (S3) 中,可根据需要用于快速创建新的 EBS 卷。卷的第一个快照包含该卷上每个 512K 数据块的副本。后续快照仅包含自上一个快照后发生更改的数据块。快照的增量性质使它们具有很高的成本效益,因为(从统计意义上来说)EBS 卷上的许多数据块不会经常更改。

我们来看一个简单的示例。假设我以 8 个数据块(这小于允许的最小大小,但毕竟这只是个例子)创建和格式化 EBS 卷,并向其中复制一些文件,然后创建我的第一个快照 (Snap1)。快照包含所有数据块,大体如下:

然后我添加更多文件,删除一个文件,创建第二个快照 (Snap2)。快照仅包含我创建第一个快照后修改的数据块,如下所示:

我进行了一些更改,并创建了第三个快照 (Snap3):

请记住,目录、文件和基础数据块之间的关系由文件系统控制,并且在实际情况下通常非常复杂。

好的,现在我有了三个快照,并希望使用它们创建一个新卷。每次创建 EBS 卷的快照时,都会创建对先前快照的内部引用。这样,CreateVolume 可以查找每个数据块的最新副本,如下所示:

EBS 在后台为我管理所有细节。例如,如果我删除 Snap2,则快照中数据块 0 的副本也会被删除,因为 Snap3 中的副本较新,但是 Snap2 中数据块 4 的副本会成为 Snap3 的一部分:

顺便一提,向后引用链(Snap3Snap1,或 Snap3Snap2 再到 Snap1)被称为快照集的世系

现在,我已经解释了所有内容,我还应该告诉您,您通常不需要了解这些,而是可以专注于创建、使用和删除快照!

但是…

访问快照内容

今天,我们推出了 EBS Direct API,如上所述,它们使您可以访问快照内容。这些 API 专为备份/恢复、灾难恢复以及数据管理产品和服务的开发人员设计,将使他们能够更快、更经济高效地交付成果。

新的 API 使用数据块索引(0、1、2 等)来标识快照中的具体 512K 数据块。索引以加密令牌的形式返回,这仅对 GetSnapshotBlock API 有意义。我在下面将这些令牌表示为 T0T1 等。这些 API 当前可处理 512K 字节的数据块,并计划在将来支持更多的块大小。

此类 API 包括:

ListSnapshotBlocks – 将给定快照中的所有数据块标识为加密令牌。对于 Snap1,它将返回 [T0, T1, T2, T3, T4, T5, T6, T7];对于 Snap2,它将返回 [T0, T4]

GetSnapshotBlock – 返回数据块的内容。如果该数据块是加密快照的一部分,它将以解密形式返回。

ListChangedBlocks – 返回同世系的两个快照之间发生更改的数据块的列表,作为加密令牌。对于 Snap2,它将返回 [T0, T4];对于 Snap3,它将返回 [T0, T5]

就像我说的那样,这些 API 是为解决一个特殊但非常重要的用例而构建的。话虽如此,我现在非常有信心,48 小时内会有意想不到的新消息弹出(请随时与我分享)!

现已推出

EBS Direct API 现已推出,美国东部(弗吉尼亚北部)美国西部(俄勒冈)欧洲(爱尔兰)欧洲(法兰克福)亚太地区(新加坡)亚太地区(东京)区域已能使用;未来数周内将推广到其余区域。调用 ListGet API 需要付费,而当您调用 GetSnapshotBlock 访问作为加密快照一部分的数据块时,会收取普通 KMS 费用。

Jeff
 

本篇作者

Jeff Barr

AWS 首席布道师; 2004年开始发布博客,此后便笔耕不辍。