EC2 API 中对卷和卷快照的支持标签

https://blueprints.launchpad.net/nova/+spec/ec2-volume-and-snapshot-tags

将卷和卷快照元数据作为 EC2 标签在 EC2 API 中暴露。

问题描述

OpenStack 的 EC2 API 对“标签”(资源元数据)的支持有限。只有实例元数据在 EC2 API 中暴露,因此用户只能创建、删除和列出实例元数据。OpenStack Cinder API 也支持卷和卷快照的元数据,我们只需要将其暴露到 EC2 API 中即可。此蓝图旨在实现这一点。

提议的变更

  • EC2 API 的“CreateTags”方法最初仅用于创建实例资源的标签。在此补丁之后,用户也将能够为卷和卷快照资源创建标签。

  • 用户可以调用“DeleteTags”API 来删除与卷或卷快照关联的任何标签。

  • 在调用“DescribeTags”API 时,卷和卷快照的标签将与实例标签一起列出(前提是这些资源的标签存在,显而易见)。

  • 在调用“DescribeTags”时,添加了支持指定卷和卷快照 ID,以及将“volume”和“snapshot”作为资源参数的功能。

  • 由于这是标签支持的资源数量首次变为复数,因此代码被设计得更加通用,以便更容易添加进一步的资源。

  • 实现细节:在 DescribeInstances API 中,用户可以指定资源 ID 和资源类型作为过滤器。如果查询同时过滤资源 ID(vol-00000001 和 ami-00000001)和资源类型(实例和卷),当前的实现方式是获取资源的交集(在本例中为卷),然后检查这些资源是否已实现。

备选方案

另一种方案是:使用作用域键使 EC2 标签与卷标签不同。因此,用户在 EC2 API 中创建的标签 stack=beta,在 Cinder API 中将显示为 EC2:stack=beta。这样,使用 Cinder API 的用户可以清楚地看到哪些元数据条目是使用 EC2 API 创建的,哪些是使用 OpenStack API 创建的。

我认为保持 EC2 API 层尽可能透明是合理的。这意味着不采用上述替代方案。这与我们目前实例元数据的方式一致。

关于上述实现细节,另一种方案是:不允许在同一个查询中同时指定资源 ID 和资源类型。

没有 AWS 文档表明这种 API 调用是不允许的(至少我找不到)。这种实现更简单,但 IMO 目前的实现方式提供了更好的用户体验。如果我们要从查询中删除资源 ID 或资源类型,记录可能会有所帮助。

数据模型影响

REST API 影响

只有 EC2 API 会受到影响。受影响的 API 调用是:CreateTags、DeleteTags DescribeTags。

安全影响

通知影响

其他最终用户影响

性能影响

影响较小。请注意,对于 DescribeTags,随着我们不断添加资源,每次发出 DescribeTags 调用时,都会向所有资源(例如 Glance、Cinder 等)发出 API 调用,而没有指定资源类型。

其他部署者影响

开发人员影响

实现

负责人

主要负责人

rushiagr (Rushi Agrawal)

工作项

  • 实现对卷和快照标签的支持。

依赖项

测试

将编写全面的单元测试来测试该功能。

文档影响

EC2 API 文档应更新以反映此蓝图对 EC2 API 所做的更改。

参考资料

EC2 API 参考:* CreateTags http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-CreateTags.html * DeleteTags http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DeleteTags.html * DescribeTags http://docs.aws.amazon.com/AWSEC2/latest/APIReference/ApiReference-query-DescribeTags.html