aws-cli 实战:使用 `aws ce get-tags` 检索成本分配标签键与值
2026/9/15 18:09:21 网站建设 项目流程

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-periodDateInterval(Start/End)检索维度值的时间范围。开始日期包含,结束日期排他
--search-stringstring(0~1024 字符)要对标签值进行匹配的任意搜索串,可视为“包含匹配”过滤
--tag-keystring(0~1024 字符)指定标签键,返回该键下的标签值
--filterExpression复合条件过滤,可基于维度/标签组合条件
--sort-bySortDefinitions按成本/用量指标排序,如BlendedCostUnblendedCost
--max-resultsinteger仅在与--sort-by联用时生效,上限 1000,缺省返回 1000 条
--next-page-tokenstring分页令牌,用于获取下一页结果
--billing-view-arnstring指定 Billing View 的 ARN(通过 ListBillingViews 获取)

其中TimePeriod的起止日期语义非常关键:Start包含的,End排他的。例如Start=2017-01-01, End=2017-05-18表示检索从 2017-01-01 起、至 2017-05-17(含)为止的数据(见 DateInterval 定义)。

2.2 参数类型约束(来自服务模型)

从服务模型可以看到两个重要约束:

  • SearchStringTagKey均为 string 类型,max: 1024, min: 0(见 SearchString 与 TagKey),即最长不超过 1024 字符;
  • MaxResultsGetTags有 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 定义):

字段类型含义
TagsTagList(字符串列表)与请求匹配的标签键或标签值列表
ReturnSizeinteger本次请求实际返回的结果条数
TotalSizeinteger符合条件的结果总条数

在本例中,Project键下恰好有两个值(secretProject1secretProject2)包含secretProject,因此ReturnSizeTotalSize均为 2。当结果被分页截断时,ReturnSize会小于TotalSize,此时需要借助分页令牌继续拉取。

四、进阶用法与实战扩展

4.1 不指定标签键:枚举全部标签键

省略--tag-key时,get-tags返回的是账单周期内出现的所有标签键。这一用法非常适合先盘点“账上到底有哪些成本分配标签”,再据此决定后续按哪个键聚合:

aws ce get-tags \ --time-period Start=2024-01-01,End=2024-02-01

4.2 排序:按成本指标排列标签

通过--sort-by可以让结果按成本或用量指标排序,服务模型支持以下指标(见 GetTagsRequest 文档):

  • BlendedCost(混合成本)
  • UnblendedCost(未混合成本)
  • AmortizedCost(摊销成本)
  • NetAmortizedCost(净摊销成本)
  • NetUnblendedCost(净未混合成本)
  • UsageQuantity(用量)
  • NormalizedUsageAmount(标准化用量)

排序方向由SortOrder指定,取值为ASCENDINGDESCENDING。CLI 中的典型写法:

aws ce get-tags \ --time-period Start=2024-01-01,End=2024-02-01 \ --sort-by Key=BlendedCost,SortOrder=DESCENDING \ --max-results 20

需要特别注意的是(源码文档明确说明):一旦使用SortByNextPageTokenSearchString将不再被支持。因此排序与字符串搜索是互斥的两种查询路径,应根据实际需求二选一。

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:按任意维度(如SERVICEAZINSTANCE_TYPE等)检索取值,返回结构为DimensionValues对象列表(每个对象含ValueAttributes);
  • get-tags:专门面向标签维度,返回结构为扁平字符串列表Tags

例如 get-dimension-values 文档中按SERVICE维度搜索 "Elastic",会返回Amazon ElastiCacheEC2 - OtherAmazon Elastic Compute Cloud - Compute等服务名称列表;而get-tags只会返回标签键/值本身。若目标是标签筛选与成本归集,应优先使用get-tags

六、从源码理解其底层实现

在 aws-cli 仓库中,该命令的参数定义与序列化完全由 service-2.json 驱动:CLI 通过服务模型自动生成命令与参数解析器,因此--search-string--tag-key等参数会按下划线命名自动映射为SearchStringTagKey等 API 字段,并通过POST /发送到 Cost Explorer 端点。这一机制意味着:

  • 所有参数类型、长度限制(如 1024 字符)、必填项(TimePeriod)均由模型声明,CLI 层无需额外硬编码;
  • 服务端可能返回的错误(如LimitExceededExceptionDataUnavailableExceptionInvalidNextTokenExceptionRequestChangedExceptionResourceNotFoundException等,见 GetTags 错误列表)也会由 CLI 统一处理并给出可读错误信息。

从仓库结构看,ce服务数据位于 awscli/botocore/data/ce/2017-10-25/,其中service-2.json定义 API 模型,paginators-1.json定义分页行为,endpoint-rule-set-1.json定义端点解析规则,共同构成该命令在 CLI 中的完整行为契约。

七、使用注意事项

  1. 时间周期必须提供TimePeriod为必填参数,且Start必须不晚于当前日期,否则会触发校验错误;
  2. 理解“包含/排他”边界End日期本身的数据不会被包含,规划月报(如查 2024-01 整月)时应写Start=2024-01-01,End=2024-02-01而非 01-31;
  3. 搜索串是包含匹配SearchString在服务模型中是 0~1024 字符的任意串,语义为“值中包含该串”即命中,注意不要误以为是精确匹配或正则匹配;
  4. 排序与搜索互斥SortBy模式下不支持SearchStringNextPageToken,需要权衡使用;
  5. 关注配额MaxResultsGetTags上限为 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询