AWS CLI describe-scaling-policies 实战:查看 Application Auto Scaling 弹性伸缩策略并解析其 API 模型
2026/9/14 2:04:04 网站建设 项目流程

AWS CLI describe-scaling-policies 实战:查看 Application Auto Scaling 弹性伸缩策略并解析其 API 模型

【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

本文以 aws-cli 仓库中的示例文档 describe-scaling-policies.rst 为核心,围绕aws application-autoscaling describe-scaling-policies命令展开:完整给出命令用法与输出样例、逐项解读返回的伸缩策略字段,并深入仓库内置的 API 模型与分页配置,说明该命令的可选参数、分页机制及错误类型。读完后可独立使用该命令审计 ECS(及其他服务命名空间)下的自动伸缩策略,并理解 AWS CLI 背后由 botocore 服务模型驱动的命令构建方式。

命令与示例

原始示例文档给出的用法是描述ecs服务命名空间下的伸缩策略:

aws application-autoscaling describe-scaling-policies --service-namespace ecs

这是所有可选参数中唯一必填的一项。命令执行后返回该命名空间下注册的伸缩策略集合,示例输出如下(完整继承自原文档):

{ "ScalingPolicies": [ { "PolicyName": "web-app-cpu-gt-75", "ScalableDimension": "ecs:service:DesiredCount", "ResourceId": "service/default/web-app", "CreationTime": 1462561899.23, "StepScalingPolicyConfiguration": { "Cooldown": 60, "StepAdjustments": [ { "ScalingAdjustment": 200, "MetricIntervalLowerBound": 0.0 } ], "AdjustmentType": "PercentChangeInCapacity" }, "PolicyARN": "arn:aws:autoscaling:us-west-2:012345678910:scalingPolicy:6d8972f3-efc8-437c-92d1-6270f29a66e7:resource/ecs/service/default/web-app:policyName/web-app-cpu-gt-75", "PolicyType": "StepScaling", "Alarms": [ { "AlarmName": "web-app-cpu-gt-75", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:web-app-cpu-gt-75" } ], "ServiceNamespace": "ecs" }, { "PolicyName": "web-app-cpu-lt-25", "ScalableDimension": "ecs:service:DesiredCount", "ResourceId": "service/default/web-app", "CreationTime": 1462562575.099, "StepScalingPolicyConfiguration": { "Cooldown": 1, "StepAdjustments": [ { "ScalingAdjustment": -50, "MetricIntervalUpperBound": 0.0 } ], "AdjustmentType": "PercentChangeInCapacity" }, "PolicyARN": "arn:aws:autoscaling:us-west-2:012345678910:scalingPolicy:6d8972f3-efc8-437c-92d1-6270f29a66e7:resource/ecs/service/default/web-app:policyName/web-app-cpu-lt-25", "PolicyType": "StepScaling", "Alarms": [ { "AlarmName": "web-app-cpu-lt-25", "AlarmARN": "arn:aws:cloudwatch:us-west-2:012345678910:alarm:web-app-cpu-lt-25" } ], "ServiceNamespace": "ecs" } ] }

输出中的两条策略是一对典型的 ECS 阶梯(StepScaling)伸缩策略:web-app-cpu-gt-75在 CPU 超过阈值时按容量增加 200% 扩容(ScalingAdjustment: 200配合PercentChangeInCapacity),web-app-cpu-lt-25在低于阈值时缩减 50% 容量(ScalingAdjustment: -50)。两条策略各自关联了一个 CloudWatch 告警,告警名称与策略名称一一对应。

同一个示例数据也内嵌在仓库 API 模型中:examples-1.json 的DescribeScalingPolicies条目(约 L113 起)包含同样的ServiceNamespace: "ecs"输入和完整的ScalingPolicies输出结构。该文件是 botocore 生成 CLI 帮助与示例的机器可读来源,可视为文档与实现的“同一事实的两种表达”。

参数详解(来自服务模型)

该命令的完整参数定义位于 service-2.json 的DescribeScalingPoliciesRequest结构(L503-L532)。结合其中的文档说明,各参数含义如下:

参数CLI 形式必填说明
ServiceNamespace--service-namespace提供资源的服务命名空间,如ecs;自研应用提供的自定义资源使用custom-resource
PolicyNames--policy-names按策略名称列表过滤,只描述指定的伸缩策略
ResourceId--resource-id资源标识符,由资源类型与唯一标识组成,如 ECS 服务的service/my-cluster/my-service、EMR 的instancegroup/j-xxx/ig-xxx、DynamoDB 表的table/my-table
ScalableDimension--scalable-dimension可伸缩维度,由“命名空间:资源类型:伸缩属性”三段组成,如ecs:service:DesiredCountdynamodb:table:ReadCapacityUnits;指定该参数时必须同时指定 ResourceId
MaxResults--max-results单次返回的最大策略数,取值 1~10,默认 10;提供该参数时操作会附带NextToken返回
NextToken--next-token下一页结果的分页游标

从服务模型的required字段可以确认,整个请求结构中只有ServiceNamespace是必填项,这也解释了为什么原文档示例只带一个参数即可运行。响应结构DescribeScalingPoliciesResponse(L533-L545)则包含ScalingPolicies列表与NextToken游标两个成员——当没有更多结果时NextToken为 null。

--resource-id--scalable-dimension两个过滤参数的说明文字里附带了各支持服务的标识格式清单(ECS、Spot Fleet、EMR、AppStream 2.0、DynamoDB 表与全局二级索引、Aurora 集群、SageMaker 端点变体、Lambda 预留并发、Keyspaces、MSK、ElastiCache、Neptune、WorkSpaces 池等),在按资源维度审计策略时可直接对照。

分页机制:从仓库数据模型看实现

describe-scaling-policies是一个分页 API,其分页行为由 paginators-1.json 声明:

"DescribeScalingPolicies": { "input_token": "NextToken", "output_token": "NextToken", "limit_key": "MaxResults", "result_key": "ScalingPolicies" }

从这段声明可以确认四件事:输入游标是NextToken,输出游标同样是NextToken,每页条数由MaxResults控制,结果列表取自ScalingPolicies键。基于此,该命令支持 AWS CLI 的分页参数,例如用--page-size 5将每页限制为 5 条策略、用--starting-token指定起始游标、或省略参数让 CLI 自动翻页取回全部结果。由于MaxResults上限为 10(默认值),当某一命名空间下策略数超过 10 条时,手动分页或启用自动分页都不可或缺。

同目录中describe-scalable-targetsdescribe-scaling-activitiesdescribe-scheduled-actions也共享同样的NextToken/MaxResults模式,说明该 API 族的查询类操作在设计上统一采用 token 分页。

返回字段解读:一条 ScalingPolicy 里有什么

ScalingPolicy结构定义在 service-2.json L1546-L1604,其必填字段为PolicyARNPolicyNameServiceNamespaceResourceIdScalableDimensionPolicyTypeCreationTime七项。逐字段说明:

  • PolicyName / PolicyARN:策略名称与其 ARN。ARN 中嵌入了resource/...policyName/...两个片段,可反解出策略作用的目标资源与名称,便于在告警、审计日志中做关联匹配。
  • ServiceNamespace / ResourceId / ScalableDimension:三元组唯一定位策略作用的伸缩目标,与register-scalable-target注册时使用的标识一致。
  • CreationTime:策略创建时间的 Unix 时间戳(原始示例中形如1462561899.23的浮点秒值)。
  • PolicyType:策略类型。模型文档明确列出三种取值及支持范围:
    • TargetTrackingScaling— 目标追踪型,不支持 Amazon EMR;
    • StepScaling— 阶梯型,不支持 DynamoDB、Comprehend、Lambda、Keyspaces、MSK、ElastiCache、Neptune;
    • PredictiveScaling— 预测型,目前仅支持 Amazon ECS。 在describe-scaling-policies的输出中,PolicyType 决定下面出现哪一个配置块。
  • StepScalingPolicyConfiguration / TargetTrackingScalingPolicyConfiguration / PredictiveScalingPolicyConfiguration:按 PolicyType 三选一的配置块。
  • Alarms:与该策略关联的 CloudWatch 告警列表(名称 + ARN)。目标追踪型策略通常自带系统生成的 AlarmHigh/AlarmLow 一对告警,阶梯型策略则关联用户预先创建、触发策略的告警,这正是示例输出中每条策略只有一个同名告警的原因。

以示例中的阶梯策略配置为例,StepScalingPolicyConfiguration的成员定义见 service-2.json L1717-L1742:

  • AdjustmentType:解释ScalingAdjustment数值的方式,取值为ChangeInCapacity(绝对数量增减)、ExactCapacity(设置为目标容量)、PercentChangeInCapacity(按当前容量百分比增减)。示例中为百分比模式。
  • StepAdjustments:一组按告警越限幅度分档的调整步骤,通过MetricIntervalLowerBound/MetricIntervalUpperBound划定指标区间(示例中一条策略只有单步,未设区间上下界)。
  • Cooldown:上一次伸缩活动生效后等待的秒数,未指定时默认 300 秒;示例中分别为 60 秒与 1 秒。
  • MinAdjustmentMagnitude:当 AdjustmentType 为百分比时的最小调整量(例如 4 个任务扩 25% 本应扩 1 个,设置最小调整量为 2 则按 2 个执行)。
  • MetricAggregationType:CloudWatch 指标聚合方式,取值MinimumMaximumAverage,为 null 时按Average处理。

与同族示例的对照:策略的完整生命周期

describe-scaling-policies只是查询动作。仓库的示例目录 awscli/examples/application-autoscaling/ 提供了同一服务的完整命令族,其中与本命令直接衔接的有:

  • put-scaling-policy.rst:创建策略。该示例给出了三种典型写法——基于预定义指标ECSServiceAverageCPUUtilization的目标追踪策略、基于自定义 CloudWatch 指标的策略、以及带DisableScaleIn: true的仅扩容策略;输出中返回的PolicyARNAlarms正是describe-scaling-policies后续要展示的内容。
  • delete-scaling-policy.rst:删除策略,可与 describe 命令配合做策略变更后的清理验证。
  • 其余 describe-scalable-targets.rst、describe-scaling-activities.rst、register-scalable-target.rst 等则覆盖伸缩目标注册与伸缩活动审计。

一个实用的排查闭环是:先用register-scalable-target确认伸缩目标已注册,再用describe-scaling-policies --service-namespace ecs --resource-id service/default/web-app按资源过滤出该目标的策略,确认 PolicyType 与配置符合预期后,用describe-scaling-activities验证策略是否实际触发了伸缩。

错误处理与适用前提

服务模型为DescribeScalingPolicies声明了五种错误(见 service-2.json L106-L112):

  • ValidationException:参数校验失败,例如--scalable-dimension未与--resource-id同时提供、命名空间拼写错误;
  • FailedResourceAccessException:对目标资源无访问权限,需要检查当前凭证的 IAM 授权;
  • InvalidNextTokenException:传入的--next-token已失效或不合法,重新发起不带 token 的查询即可;
  • ConcurrentUpdateException:并发更新冲突,重试即可;
  • InternalServiceException:服务端内部错误。

需要说明的适用前提:本文所有参数与字段事实均取自当前仓库内置的 Application Auto Scaling API 模型(API 版本2016-02-06,见 awscli/botocore/data/application-autoscaling/2016-02-06/ 目录)与示例文档,实际支持的命名空间、资源类型以线上 AWS 文档与账号可用区域为准;示例输出中的账号 ID、ARN、告警名称均为文档示例数据。此外,AWS CLI 的application-autoscaling子命令由 botocore 依据该 JSON 模型自动生成,命令参数、帮助文本与示例即来源于此,这也是从源码结构看“模型文件即文档”的直接体现。

小结

aws application-autoscaling describe-scaling-policies只需一个必填参数--service-namespace即可列出该命名空间下的全部伸缩策略;配合--resource-id/--policy-names可精确过滤,配合--max-resultsNextToken分页可稳定处理策略数超过 10 条的场景。结合 describe-scaling-policies.rst 的输出样例与 service-2.json 中的结构定义,可以完整解读返回的策略类型、阶梯配置(AdjustmentType、StepAdjustments、Cooldown)与关联告警,把“命令输出”真正读成一份可审计的伸缩配置清单。

【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

立即咨询