AWS CLI 实操:使用 update-service-level-objective 更新 Application Signals 的 SLO 目标

发布时间:2026/9/14 17:26:55
AWS CLI 实操:使用 update-service-level-objective 更新 Application Signals 的 SLO 目标 AWS CLI 实操使用 update-service-level-objective 更新 Application Signals 的 SLO 目标【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli本文以 aws-cli 仓库中的官方示例 update-service-level-objective.rst 为主体讲解如何用 AWS CLI 对 Amazon CloudWatch Application Signals 中已有的服务级别目标Service Level ObjectiveSLO做局部更新如何用--cli-input-json file://update-slo.json提交只含id与goal的最小更新请求如何理解“省略即保留”的 PATCH 语义、输入输出 JSON 中各字段的含义与取值约束并结合仓库内的服务模型定义awscli/botocore/data/application-signals/2024-04-15/service-2.json与 CLI 参数实现源码说明该命令在底层如何被解析与发送。命令形态用--cli-input-json提交 JSON 文件官方示例给出的完整调用方式如下摘自 awscli/examples/application-signals/update-service-level-objective.rstaws application-signals update-service-level-objective \ --cli-input-json file://update-slo.json其中update-slo.json的内容为{ id: arn:aws:application-signals:us-east-1:123456789101:slo/SLOName, goal: { Interval: { RollingInterval: { DurationUnit: DAY, Duration: 7 } }, AttainmentGoal: 90.0, WarningThreshold: 50.0 } }要点说明--cli-input-json是 AWS CLI 为所有操作通用注入的参数它接受一个 JSON 字符串作为整个命令的输入格式与--generate-cli-skeleton生成的骨架一致。当命令行同时显式传入了其他参数时命令行参数会覆盖 JSON 中的同名值。其实现见 cliinputjson.py。file://前缀表示从本地文件读取参数值而不是把 JSON 直接写在命令行里。前缀到本地/远程存储的映射由 paramfile.py 中的LOCAL_PREFIX_MAP与get_paramfile完成file://即读取当前文件系统上的update-slo.json。这个 JSON 只包含两个字段id标识要更新的 SLO支持 ARN 或 SLO 名称和goalSLO 目标结构。之所以这样写是因为该操作遵循“省略即保留”语义——不传的参数会保持原值因此这里只需要提交真正要变更的部分。输入字段详解与 API 模型依据从源码结构看该操作的完整输入结构定义在 service-2.json 的UpdateServiceLevelObjectiveInput形状中可更新字段共 6 个字段是否必填类型/含义Id必填SLO 的 ARN 或名称定位要更新的目标。示例中使用的是完整 ARNarn:aws:application-signals:us-east-1:123456789101:slo/SLONameDescription可选SLO 的说明文字SliConfig可选周期型period-basedSLO 的 SLI 指标配置RequestBasedSliConfig可选请求型request-basedSLO 的 SLI 指标配置不能与SliConfig同时指定Goal可选目标结构评估时间区间 达成率目标 警告阈值BurnRateConfigurations可选燃烧率burn rate配置用于度量服务消耗错误预算的速度AutoInvestigationEnabled可选布尔值SLO 违约时是否由 DevOps Agent 自动调查Goal结构在示例 JSON 中体现为三要素Interval.RollingInterval滚动评估窗口由DurationUnit时间单位示例为DAY与Duration时长数值示例为 7 天组成。模型中Window形状对DurationUnit与Duration均标记为 required见 service-2.json因此这两项必须同时提供。AttainmentGoal目标达成率double 类型示例为90.0。WarningThreshold警告阈值double 类型示例为50.0达成率低于该值时触发警告级别。两条关键约束同样来自服务模型的 API 文档注释service-2.json部分更新“If you omit parameters, the previous values of those parameters are retained.” 即未提交字段沿用旧值这正是示例只用idgoal即可更新目标的原因。评估类型不可切换“You cannot change from a period-based SLO to a request-based SLO, or change from a request-based SLO to a period-based SLO.” 换言之SliConfig与RequestBasedSliConfig二选一且不可互转。底层请求语义与错误处理操作定义中UpdateServiceLevelObjective使用 HTTPPATCH方法请求/slo/{Id}端点成功响应码为 200service-2.json。PATCH 部分字段的组合与“省略即保留”的文档描述一致属于典型的局部更新语义。该操作声明了三个错误形状ValidationExceptionHTTP 400客户端错误表示输入不合法如DurationUnit/Duration缺失或类型错误ResourceNotFoundExceptionSLO 的id不存在ThrottlingException请求被限流。因此在脚本化调用时可以针对 400/404 做参数修正重试而将 429/限流类错误交给 CLI 内置的重试策略处理。输出结构确认更新后的 SLO 全貌命令执行成功后返回UpdateServiceLevelObjectiveOutput其中包含必填的Slo成员——即“刚更新的 SLO 的完整信息”service-2.json。官方示例输出的 JSON 结构如下关键字段均有注释{ Slo: { Arn: arn:aws:application-signals:us-east-1:123456789101:slo/SLOName, Name: SLOName, Description: Description of your SLO, CreatedTime: 2024-12-24T22:19:18.62400005:30, LastUpdatedTime: 2024-12-27T08:51:38.27800005:30, Sli: { SliMetric: { MetricDataQueries: [{ Id: m1, MetricStat: { Metric: { Namespace: AWS/EC2, MetricName: CPUUtilization, Dimensions: [{ Name: InstanceId, Value: i-00987654345222 }] }, Period: 60, Stat: Average }, ReturnData: true }] }, MetricThreshold: 200.0, ComparisonOperator: LessThanOrEqualTo }, EvaluationType: PeriodBased, Goal: { Interval: { RollingInterval: { DurationUnit: DAY, Duration: 7 } }, AttainmentGoal: 90.0, WarningThreshold: 50.0 } } }输出中可以重点核对的字段Goal应与提交文件中修改后的值一致示例中AttainmentGoal从创建时的 99.0 更新为 90.0LastUpdatedTime应刷新为本次更新时间Sli与EvaluationType示例为PeriodBased保持不变印证了本次调用只触碰了目标字段。与 SLO 生命周期命令的衔接update-service-level-objective是 SLO 生命周期中的一环。同目录下的 awscli/examples/application-signals/ 提供了配套示例可组成完整的操作闭环创建create-service-level-objective.rst 演示用--name、--description、--sli-config file://sli-config.json创建 SLO并展示默认Goal7 天滚动窗口、AttainmentGoal99.0、WarningThreshold50.0查询get-service-level-objective.rst 演示用--id按 ARN 查询单个 SLO适合在更新后做回读校验列表list-service-level-objectives.rst 用于先找到待更新 SLO 的 ARN预算报告batch-get-service-level-objective-budget-report.rst 演示按时间戳批量获取 SLO 预算报告输出中的BudgetStatusOK/BREACHED、Attainment、TotalBudgetSeconds、BudgetSecondsRemaining等字段可以直接反映AttainmentGoal调整后的预算余量变化删除delete-service-level-objective.rst 演示按 ARN 删除 SLO该命令无输出。一个实用的工作流是list-service-level-objectives找到 ARN → 准备只含变更字段的 JSON →update-service-level-objective --cli-input-json file://update-slo.json→get-service-level-objective回读确认。对于复杂输入可先用aws application-signals update-service-level-objective --generate-cli-skeleton input生成输入骨架再手动填充骨架格式即--cli-input-json所期望的格式。适用前提与注意事项操作对象必须是一个已存在的 SLOid使用其 ARN 或名称示例中us-east-1区域、账号123456789101为文档占位值使用时应替换为真实资源。调用者需要具备对该操作application-signals:UpdateServiceLevelObjective资源级动作的 IAM 权限否则会遇到访问拒绝类错误模型中定义了 403 的AccessDeniedException形状。仓库中该服务的模型版本目录为 awscli/botocore/data/application-signals/2024-04-15/即本文字段与约束均基于 2024-04-15 版 API 模型如服务后续新增字段以当前安装的 aws-cli 版本内嵌模型为准。由于评估类型period-based 与 request-based不可互相切换修改 SLI 指标时应始终使用与现有 SLO 同一类型的配置结构sli-config或 request-based 对应结构避免触发ValidationException。综上update-service-level-objective通过--cli-input-json file://...提交最小化 JSON 即可完成 SLO 目标的局部更新理解“省略即保留”的部分更新语义、Goal中滚动窗口与阈值字段的必填关系以及PATCH /slo/{Id}的底层请求模型能帮助你把该命令安全地用于日常 SLO 调参与自动化脚本中。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考