AWS CLI 使用 Application Signals untag-resource 删除 SLO 资源标签的完整指南
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
本文为 AWS CLI(aws-cli)中application-signals服务的untag-resource子命令技术指南,覆盖命令语法、必填参数取值规则、ARN 格式说明、无输出的行为约定,以及与之配套的tag-resource/list-tags-for-resource标签管理闭环;读完后你可以基于 aws-cli 仓库内置的 API 模型(service-2.json)确认参数约束与错误码,独立完成 CloudWatch Application Signals 服务下 SLO(Service Level Objective)资源的标签删除操作。
1. 命令作用与原始示例
untag-resource用于从指定的 CloudWatch Application Signals 资源(典型场景是 SLO)上删除一个或多个标签。aws-cli 仓库中的官方示例文件 untag-resource.rst 给出的完整调用如下:
aws application-signals untag-resource \ --resource-arn "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName" \ --tag-keys "test"示例说明:
--resource-arn指定目标资源的 ARN。示例中使用的格式为arn:aws:application-signals:<region>:<account-id>:slo/<slo-name>,其中示例值us-east-1、123456789101、SLOName均为占位内容,实际执行时请替换为你自己账号中 SLO 的真实 ARN;--tag-keys是要移除的标签键,"test"即删除键为test的标签(连同其对应的值一起移除);- 原文档明确指出:该命令执行成功后不产生任何输出。因此判断执行结果主要依据退出码与终端是否有错误信息,而不是解析返回体。
该示例对应的 AWS 文档主题是 CloudWatch 用户指南中的 Application Signals 部分,aws-cli 仅作为其命令行入口。
2. 参数规格:来自 API 模型文件的权威依据
aws application-signals在 aws-cli 仓库中没有单独的定制 Python 模块(customizations 目录下无对应条目),其命令行参数完全由 botocore 内置的 API 模型驱动。Application Signals 的模型文件位于 service-2.json(API 版本2024-04-15,serviceId 为Application Signals),其中对UntagResource操作及其请求形状(shape)的定义给出了精确的参数约束:
2.1 请求结构UntagResourceRequest
| 参数 | CLI 名称 | 类型 | 必填 | 约束 | 说明 |
|---|---|---|---|---|---|
ResourceArn | --resource-arn | string(AmazonResourceName) | 是 | 长度 1–1024 字符 | 要删除标签的 CloudWatch 资源 ARN |
TagKeys | --tag-keys | list of string(TagKeyList) | 是 | 列表元素最多 200 个;单个键长 1–128 字符 | 要从资源上移除的标签键列表 |
要点解读:
两个参数缺一不可。模型中
required字段为["ResourceArn", "TagKeys"],缺少任一项时 CLI 会在本地参数校验阶段直接报错,不会发出 HTTP 请求;--tag-keys本质是列表。虽然原始示例只传了一个值"test",但从源码结构看它接受多个标签键——一次调用即可批量删除,例如:aws application-signals untag-resource \ --resource-arn "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName" \ --tag-keys test owner team-abc在 aws-cli 中,列表参数既可以按上例以空格分隔逐项传入,也可以使用 JSON 列表形式
"--tag-keys '["test","owner"]'"传递;删除按“键”匹配:API 只接受标签键(
TagKeyList的元素形状是TagKey,而非键值对结构),即按 key 整体移除,不支持指定 value 过滤;ARN 格式补充:模型文件中
ResourceArn的文档同时给出了 Application Signals SLO 的 ARN 形式arn:aws:cloudwatch:<Region>:<account-id>:slo:<slo-name>。可以看到官方文档示例(arn:aws:application-signals:...)与模型文档(arn:aws:cloudwatch:...)存在前缀差异,实际使用中请以get-service-level-objective等命令返回的真实 ARN 为准,避免手拼出错;空列表的语义:
TagKeyList的min为 0,模型层面允许空列表,但没有任何键可删的调用没有实际意义,建议始终至少传入一个真实存在的标签键。
2.2 底层 HTTP 调用
从同一模型文件看,UntagResource的传输层定义为:
- 方法:
POST - 请求路径:
/untag-resource - 成功响应码:
200 - 响应体
UntagResourceResponse的成员为空结构("members": {}),这与原始示例“该命令不产生输出”的描述完全一致——即使成功,服务端也几乎不返回可用数据,CLI 端不会打印 JSON。
3. 可能遇到的错误及处理
模型为UntagResource声明了两个显式错误类型(对应 service-2.json 中errors数组):
| 错误 | HTTP 状态码 | 是否客户端责任 | 含义与排查 |
|---|---|---|---|
ResourceNotFoundException | 404 | 是(senderFault) | ARN 拼写错误或 SLO 不存在/已被删除。错误体包含ResourceType、ResourceId、Message三个必填字段,可据此定位是资源类型不识别还是 ID 找不到 |
ThrottlingException | 429 | 是 | 请求因配额限制被限流。建议稍后重试;批量清理标签脚本中应加入退避(backoff)处理,aws-cli/botocore 自身的重试机制对该类 429 的处理以全局--retries配置为准 |
实用排查流程:
- 先执行只读命令确认资源与标签现状(见下节
list-tags-for-resource),核对 ARN 与标签键拼写; - 再执行
untag-resource;无输出即成功; - 若返回 404,用
list-service-level-objectives确认 SLO 名称是否准确。
4. 标签管理闭环:tag → list → untag
untag-resource很少孤立使用。aws-cli 仓库的同一示例目录下提供了完整的标签管理配套示例,三者构成“打标签—查标签—删标签”的闭环:
4.1 添加标签:tag-resource
来自 tag-resource.rst:
aws application-signals tag-resource \ --resource-arn "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName" \ --tags '{"Key":"test","Value":"value"}'行为规则(来自模型文件TagResource操作文档):
- 对一个已带标签的资源再次调用:新键追加到标签集合;相同键的新值会覆盖旧值;
- 单资源最多关联50 个标签;
- 标签对 AWS 无语义含义,严格按字符串处理;
--tags传入键值对 JSON;标签值长度上限 256 字符(TagValue形状),标签键上限 128 字符;- 该命令同样不产生输出。
4.2 查询标签:list-tags-for-resource
来自 list-tags-for-resource.rst:
aws application-signals list-tags-for-resource \ --resource-arn "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName"返回示例:
{ "Tags": [{ "Key": "test", "Value": "value" }] }该操作在模型中标记为readonly: true,底层为GET /tags,是执行删除前确认键名、删除后验证结果的唯一可靠手段。
4.3 推荐的完整操作序列
# 1) 确认当前标签 aws application-signals list-tags-for-resource \ --resource-arn "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName" # 2) 删除指定标签键(可一次传多个键) aws application-signals untag-resource \ --resource-arn "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName" \ --tag-keys test owner # 3) 复核结果 aws application-signals list-tags-for-resource \ --resource-arn "arn:aws:application-signals:us-east-1:123456789101:slo/SLOName"5. 注意事项与适用前提
- 适用版本:本仓库内置的 Application Signals API 模型版本为
2024-04-15(见 2024-04-15 目录),参数名与行为以该模型为准; - 无输出即成功:由于
UntagResourceResponse为空结构,不要期望看到类似 S3 删除对象的确认输出;脚本中应以命令退出码判断成败; - 权限要求:调用者需要对该服务具备
UntagResource的 IAM 权限,标签也是 CloudWatch 中按资源缩小授权范围的常用手段(模型文档明确提到可用标签值限定用户权限); - 只按键删除:
--tag-keys只接受标签键列表,无法表达“仅当值为某值时才删除”的条件语义; - 区域与账号:ARN 中必须包含正确的 region 与 account-id,跨区域误用 ARN 是最常见的 404 来源。
6. 参考文件索引
| 文件 | 说明 |
|---|---|
| untag-resource.rst | 本文核心:untag-resource 官方命令行示例 |
| tag-resource.rst | 配套的打标签示例 |
| list-tags-for-resource.rst | 配套的标签查询示例与返回结构 |
| service-2.json | Application Signals API 模型(2024-04-15),含参数约束、HTTP 定义与错误类型 |
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考