aws-cli 实战:使用aws ce get-tags检索成本分配标签键与值
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
导读
本文围绕 aws-cli 仓库中 get-tags.rst 这一官方示例文档,系统讲解 AWS Cost Explorer 服务中aws ce get-tags命令的完整用法:如何在指定时间周期内检索成本分配标签(cost allocation tag)的可用键与值、如何通过搜索串与标签键精确过滤、如何解读返回结果。读完本文,你将掌握该命令的全部核心参数、输出字段语义、分页与排序等进阶用法,并能从 service-2.json 的服务模型中理解其底层请求/响应结构与约束。
一、命令背景:为什么需要检索成本分配标签
在 AWS 成本管理(AWS Cost Management)体系中,成本分配标签是组织账单、按项目或部门归集费用的核心手段。当一个账号下存在大量标签时,团队经常需要回答这类问题:
- 当前账单周期内,哪些标签键(Tag Key)实际存在?
- 某个标签键下,用户实际用了哪些标签值(Tag Value)?
- 能否按模糊关键字筛选出关心的那部分标签?
aws ce get-tags正是为此设计:它在服务模型中的定位是 "Queries for available tag keys and tag values for a specified period. You can search the tag values for an arbitrary string."(见 service-2.json),即查询指定周期内可用的标签键与标签值,并支持对标签值做任意字符串搜索。
二、命令格式与参数详解
get-tags在服务模型中对应POST /请求(见 service-2.json),CLI 层面的调用格式为:
aws ce get-tags [options]2.1 参数总览(来自 GetTagsRequest)
根据 GetTagsRequest 定义,请求参数如下:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
--time-period | DateInterval(Start/End) | 是 | 检索维度值的时间范围。开始日期包含,结束日期排他 |
--search-string | string(0~1024 字符) | 否 | 要对标签值进行匹配的任意搜索串,可视为“包含匹配”过滤 |
--tag-key | string(0~1024 字符) | 否 | 指定标签键,返回该键下的标签值 |
--filter | Expression | 否 | 复合条件过滤,可基于维度/标签组合条件 |
--sort-by | SortDefinitions | 否 | 按成本/用量指标排序,如BlendedCost、UnblendedCost等 |
--max-results | integer | 否 | 仅在与--sort-by联用时生效,上限 1000,缺省返回 1000 条 |
--next-page-token | string | 否 | 分页令牌,用于获取下一页结果 |
--billing-view-arn | string | 否 | 指定 Billing View 的 ARN(通过 ListBillingViews 获取) |
其中TimePeriod的起止日期语义非常关键:Start是包含的,End是排他的。例如Start=2017-01-01, End=2017-05-18表示检索从 2017-01-01 起、至 2017-05-17(含)为止的数据(见 DateInterval 定义)。
2.2 参数类型约束(来自服务模型)
从服务模型可以看到两个重要约束:
SearchString与TagKey均为 string 类型,max: 1024, min: 0(见 SearchString 与 TagKey),即最长不超过 1024 字符;MaxResults对GetTags有 1000 条的上限配额,若未指定SortBy则该字段不生效。
三、官方示例:检索 "Project" 键下包含 "secretProject" 的标签值
原示例文档 get-tags.rst 给出了最典型的使用场景:检索键为 "Project"、且值中包含 "secretProject" 的所有成本分配标签。
3.1 完整命令
aws ce get-tags \ --search-string secretProject \ --time-period Start=2017-01-01,End=2017-05-18 \ --tag-key Project各参数在这一场景中的含义:
--tag-key Project:锁定标签键为Project,此时返回的是该键下的标签值;--search-string secretProject:对标签值做包含匹配,只返回值中包含子串secretProject的条目;--time-period Start=2017-01-01,End=2017-05-18:限定统计窗口为 2017-01-01 至 2017-05-17(含)。
3.2 官方返回结果
{ "ReturnSize": 2, "Tags": [ "secretProject1", "secretProject2" ], "TotalSize": 2 }返回结果三个字段的含义(见 GetTagsResponse 定义):
| 字段 | 类型 | 含义 |
|---|---|---|
Tags | TagList(字符串列表) | 与请求匹配的标签键或标签值列表 |
ReturnSize | integer | 本次请求实际返回的结果条数 |
TotalSize | integer | 符合条件的结果总条数 |
在本例中,Project键下恰好有两个值(secretProject1、secretProject2)包含secretProject,因此ReturnSize与TotalSize均为 2。当结果被分页截断时,ReturnSize会小于TotalSize,此时需要借助分页令牌继续拉取。
四、进阶用法与实战扩展
4.1 不指定标签键:枚举全部标签键
省略--tag-key时,get-tags返回的是账单周期内出现的所有标签键。这一用法非常适合先盘点“账上到底有哪些成本分配标签”,再据此决定后续按哪个键聚合:
aws ce get-tags \ --time-period Start=2024-01-01,End=2024-02-014.2 排序:按成本指标排列标签
通过--sort-by可以让结果按成本或用量指标排序,服务模型支持以下指标(见 GetTagsRequest 文档):
BlendedCost(混合成本)UnblendedCost(未混合成本)AmortizedCost(摊销成本)NetAmortizedCost(净摊销成本)NetUnblendedCost(净未混合成本)UsageQuantity(用量)NormalizedUsageAmount(标准化用量)
排序方向由SortOrder指定,取值为ASCENDING或DESCENDING。CLI 中的典型写法:
aws ce get-tags \ --time-period Start=2024-01-01,End=2024-02-01 \ --sort-by Key=BlendedCost,SortOrder=DESCENDING \ --max-results 20需要特别注意的是(源码文档明确说明):一旦使用SortBy,NextPageToken与SearchString将不再被支持。因此排序与字符串搜索是互斥的两种查询路径,应根据实际需求二选一。
4.3 分页拉取全部结果
当TotalSize大于单页返回量时,响应中会带有NextPageToken,将其作为下一轮请求的--next-page-token即可持续翻页:
aws ce get-tags \ --time-period Start=2024-01-01,End=2024-02-01 \ --next-page-token "ABCEXAMPLE123"4.4 使用 Billing View 限定数据范围
如果账号配置了 Billing View(账单视图),可先通过 ListBillingViews 获取视图 ARN,再用--billing-view-arn限定查询范围,使结果只反映该视图对应的账单口径。
五、与get-dimension-values的边界对照
仓库中 get-dimension-values.rst 展示了同族的另一个命令aws ce get-dimension-values,两者常被混淆,其差异在于:
get-dimension-values:按任意维度(如SERVICE、AZ、INSTANCE_TYPE等)检索取值,返回结构为DimensionValues对象列表(每个对象含Value与Attributes);get-tags:专门面向标签维度,返回结构为扁平字符串列表Tags。
例如 get-dimension-values 文档中按SERVICE维度搜索 "Elastic",会返回Amazon ElastiCache、EC2 - Other、Amazon Elastic Compute Cloud - Compute等服务名称列表;而get-tags只会返回标签键/值本身。若目标是标签筛选与成本归集,应优先使用get-tags。
六、从源码理解其底层实现
在 aws-cli 仓库中,该命令的参数定义与序列化完全由 service-2.json 驱动:CLI 通过服务模型自动生成命令与参数解析器,因此--search-string、--tag-key等参数会按下划线命名自动映射为SearchString、TagKey等 API 字段,并通过POST /发送到 Cost Explorer 端点。这一机制意味着:
- 所有参数类型、长度限制(如 1024 字符)、必填项(
TimePeriod)均由模型声明,CLI 层无需额外硬编码; - 服务端可能返回的错误(如
LimitExceededException、DataUnavailableException、InvalidNextTokenException、RequestChangedException、ResourceNotFoundException等,见 GetTags 错误列表)也会由 CLI 统一处理并给出可读错误信息。
从仓库结构看,ce服务数据位于 awscli/botocore/data/ce/2017-10-25/,其中service-2.json定义 API 模型,paginators-1.json定义分页行为,endpoint-rule-set-1.json定义端点解析规则,共同构成该命令在 CLI 中的完整行为契约。
七、使用注意事项
- 时间周期必须提供:
TimePeriod为必填参数,且Start必须不晚于当前日期,否则会触发校验错误; - 理解“包含/排他”边界:
End日期本身的数据不会被包含,规划月报(如查 2024-01 整月)时应写Start=2024-01-01,End=2024-02-01而非 01-31; - 搜索串是包含匹配:
SearchString在服务模型中是 0~1024 字符的任意串,语义为“值中包含该串”即命中,注意不要误以为是精确匹配或正则匹配; - 排序与搜索互斥:
SortBy模式下不支持SearchString与NextPageToken,需要权衡使用; - 关注配额:
MaxResults对GetTags上限为 1000,超出部分依赖翻页获取。
结语
aws ce get-tags是成本管理与账单归集中高频使用的查询命令。通过本文对官方示例 get-tags.rst 的完整展开,结合 service-2.json 的模型级证据,你可以准确掌握其参数语义、输出结构、排序分页与边界约束,直接将其落地到标签盘点、账单归集与成本分析的实际工作中。
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考