亚马逊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 的一部分:
顺便一提,向后引用链(Snap3 到 Snap1,或 Snap3 到 Snap2 再到 Snap1)被称为快照集的世系。
现在,我已经解释了所有内容,我还应该告诉您,您通常不需要了解这些,而是可以专注于创建、使用和删除快照!
但是…
访问快照内容
今天,我们推出了 EBS Direct API,如上所述,它们使您可以访问快照内容。这些 API 专为备份/恢复、灾难恢复以及数据管理产品和服务的开发人员设计,将使他们能够更快、更经济高效地交付成果。
新的 API 使用数据块索引(0、1、2 等)来标识快照中的具体 512K 数据块。索引以加密令牌的形式返回,这仅对 GetSnapshotBlock
API 有意义。我在下面将这些令牌表示为 T0
、 T1
等。这些 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 现已推出,美国东部(弗吉尼亚北部)、美国西部(俄勒冈),欧洲(爱尔兰)、欧洲(法兰克福)、亚太地区(新加坡)和亚太地区(东京)区域已能使用;未来数周内将推广到其余区域。调用 List
和 Get
API 需要付费,而当您调用 GetSnapshotBlock
访问作为加密快照一部分的数据块时,会收取普通 KMS 费用。
– Jeff;