AWS CLIautoscaling describe-termination-policy-types命令完全指南:查看与配置 EC2 Auto Scaling 终止策略
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
aws autoscaling describe-termination-policy-types是 AWS CLI 中用于查询 Amazon EC2 Auto Scaling 当前支持的所有实例终止策略(Termination Policy)类型的只读命令。本指南将完整演示该命令的用法与输出结构,结合 aws-cli 仓库中的服务模型定义逐项解析每种策略的语义,并给出在创建、更新 Auto Scaling 组时通过--termination-policies参数实际引用这些策略的可运行示例。读完本文,你将能够熟练查询、理解并正确配置 EC2 Auto Scaling 的终止策略,让缩容行为符合业务预期。
命令概览:一条命令列出所有支持的终止策略
该命令不需要任何输入参数,执行后直接返回当前服务支持的终止策略类型列表。它对应的 API 操作是DescribeTerminationPolicyTypes,在仓库的服务模型中定义于 awscli/botocore/data/autoscaling/2011-01-01/service-2.json,其官方说明为:"Describes the termination policies supported by Amazon EC2 Auto Scaling."(描述 Amazon EC2 Auto Scaling 支持的终止策略)。
从模型定义可以看到该操作的关键特征:
- HTTP 方法:
POST,请求路径为/(该服务所有操作均通过 POST 携带参数调用); - 输出结构:
DescribeTerminationPolicyTypesAnswer,仅包含一个TerminationPolicyTypes成员; - 错误定义:仅可能抛出
ResourceContentionFault(资源竞争错误),无其他输入校验类错误。
实际执行命令(与 describe-termination-policy-types.rst 中的官方示例一致):
aws autoscaling describe-termination-policy-types命令无需任何参数,直接回车即可。典型输出如下(JSON 格式):
{ "TerminationPolicyTypes": [ "AllocationStrategy", "ClosestToNextInstanceHour", "Default", "NewestInstance", "OldestInstance", "OldestLaunchConfiguration", "OldestLaunchTemplate" ] }需要说明的是,仓库中的命令示例文件 describe-termination-policy-types.rst 展示的正是这一输出;而内置示例数据 examples-1.json 中保存的样例输出仅包含 5 个策略(ClosestToNextInstanceHour、Default、NewestInstance、OldestInstance、OldestLaunchConfiguration),这意味着该命令的真实返回集合会随服务端能力的演进而增减,建议在实际环境中以本命令的实时返回为准。
逐项解析:7 种终止策略的语义
根据服务模型 service-2.json 中DescribeTerminationPolicyTypesAnswer的文档说明,Amazon EC2 Auto Scaling 支持的终止策略包括:OldestInstance、OldestLaunchConfiguration、NewestInstance、ClosestToNextInstanceHour、Default、OldestLaunchTemplate和AllocationStrategy。下表结合策略名称、服务模型文档与仓库示例中的用法,逐项说明其语义:
| 策略类型 | 核心语义(依据服务模型文档与示例推断) |
|---|---|
Default | 默认终止策略,即未显式配置策略时 Auto Scaling 服务使用的行为。 |
OldestInstance | 优先终止最旧的实例。官方示例 create-auto-scaling-group.rst 中明确描述为 "sets the termination policy to terminate the oldest instances first",适合希望让较新实例长期稳定运行的场景。 |
NewestInstance | 与OldestInstance相反,优先终止最新的实例,常用于快速回收刚扩容出来的实例。 |
OldestLaunchConfiguration | 优先终止基于最旧启动配置(Launch Configuration)启动的实例。 |
OldestLaunchTemplate | 优先终止基于最旧启动模板(Launch Template)启动的实例。 |
ClosestToNextInstanceHour | 优先终止最接近下一个整点计费小时的实例,用于最大化利用已购的实例小时费用。 |
AllocationStrategy | 按分配策略进行终止选择,通常结合混合实例组(Mixed Instances Policy)使用。 |
说明:表中对
Default、NewestInstance、ClosestToNextInstanceHour、AllocationStrategy等策略的具体行为描述属于依据名称与服务模型文档字段推断的合理语义,各策略的完整判定优先级算法可参考 Amazon EC2 Auto Scaling 官方用户指南(本文仅以仓库证据为准,不做超出仓库范围的断言)。
源码视角:输出结构与类型定义
从服务模型源码可以清晰看到该命令输出数据的类型链路:
- 操作输出:
DescribeTerminationPolicyTypesAnswer是一个结构体("type": "structure"),唯一成员为TerminationPolicyTypes,类型指向TerminationPolicies(见 service-2.json); - 成员类型:
TerminationPolicies被定义为字符串列表("type": "list"),元素类型为XmlStringMaxLen1600,即单个策略字符串最大长度为 1600 字符(见 service-2.json); - 结果包装:响应通过
resultWrapper: "DescribeTerminationPolicyTypesResult"进行 XML 结果包装(DescribeTerminationPolicyTypes操作的output定义),CLI 层会将其规范化为 JSON 输出。
正因为TerminationPolicies是通用列表类型,TerminationPolicyTypes返回的 7 个字符串与创建/更新 Auto Scaling 组时TerminationPolicies参数的合法取值集合是对应的,这也是本命令最重要的实战价值:在任何自动化脚本或 IaC 流程中,先调用本命令确认可用的策略名称,再传入创建/更新命令,可避免因策略名拼写错误导致的参数校验失败。
实战一:创建 Auto Scaling 组并指定终止策略
查询到可用策略后,最常见的用法是在create-auto-scaling-group命令中通过--termination-policies参数指定策略。官方示例 create-auto-scaling-group.rst 展示了如何创建一个"优先终止最旧实例"的 Auto Scaling 组:
aws autoscaling create-auto-scaling-group \ --auto-scaling-group-name my-asg \ --launch-configuration-name my-lc \ --min-size 1 \ --max-size 5 \ --termination-policies "OldestInstance" \ --tags "ResourceId=my-asg,ResourceType=auto-scaling-group,Key=Role,Value=WebServer,PropagateAtLaunch=true" \ --vpc-zone-identifier "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782"该命令不会产生输出。要点说明:
--termination-policies支持传入一个或多个策略,多个策略以空格分隔并以引号包裹,例如--termination-policies "OldestInstance" "OldestLaunchTemplate";- 服务模型文档(
CreateAutoScalingGroup中TerminationPolicies成员的说明,见 service-2.json)明确指出:"The policies are executed in the order that you list them."(策略按列出顺序依次执行),因此列表顺序即策略的优先级顺序; - 同一位置的合法取值包括:
Default、AllocationStrategy、ClosestToNextInstanceHour、NewestInstance、OldestInstance、OldestLaunchConfiguration、OldestLaunchTemplate,以及自定义 Lambda 函数终止策略的 ARN。
进阶:使用自定义 Lambda 终止策略
除了内置策略,终止策略还支持自定义 Lambda 函数 ARN。仓库示例 create-auto-scaling-group.rst 中展示了这一用法——通过 Lambda 函数自定义"哪些实例在缩容时可以被安全终止":
aws autoscaling create-auto-scaling-group \ --auto-scaling-group-name my-asg-single-instance \ --launch-template LaunchTemplateName=my-template-for-auto-scaling \ --min-size 1 \ --max-size 5 \ --termination-policies "arn:aws:lambda:us-west-2:123456789012:function:HelloFunction:prod" \ --vpc-zone-identifier "subnet-5ea0c127,subnet-6194ea3b,subnet-c934b782"服务模型的合法取值枚举中同样包含该形式:arn:aws:lambda:region:account-id:function:my-function:my-alias(见 service-2.json 中的Valid values说明)。这解释了为什么TerminationPolicies列表的元素类型是最大 1600 字符的字符串——因为 ARN 形式的自定义策略远长于普通策略名,模型为此预留了充足长度空间。
实战二:更新已有 Auto Scaling 组的终止策略
对于已存在的 Auto Scaling 组,可以通过update-auto-scaling-group命令动态调整终止策略。该操作的TerminationPolicies参数定义与创建操作完全一致(同样位于 service-2.json 的UpdateAutoScalingGroupRequest中),合法取值与"按顺序执行"的语义均相同:
aws autoscaling update-auto-scaling-group \ --auto-scaling-group-name my-asg \ --termination-policies "Default"例如,当业务希望从"优先终止最旧实例"切换回默认行为时,将策略更新为Default即可。值得注意的是:
describe-termination-policy-types返回列表中的每个名称都可以直接用于--termination-policies,二者由服务模型中的同一类型(TerminationPolicies)约束,不存在"可查询但不可配置"的取值差异(DescribeTerminationPolicyTypesAnswer的文档明确列出这 7 个名称正是该组支持的全部策略);- 与
--termination-policies配合使用时,还可通过--new-instances-protected-from-scale-in参数开启缩容保护,避免新实例在缩容时被终止(对应服务模型中的NewInstancesProtectedFromScaleIn字段)。
验证:查看 Auto Scaling 组当前生效的终止策略
配置完成后,可通过describe-auto-scaling-groups命令回读组上生效的终止策略。服务模型中AutoScalingGroup结构体包含TerminationPolicies成员(见 service-2.json),描述为"The termination policies for the Auto Scaling group":
aws autoscaling describe-auto-scaling-groups \ --auto-scaling-group-names my-asg输出中对应的字段示例:
{ "AutoScalingGroups": [ { "AutoScalingGroupName": "my-asg", "TerminationPolicies": ["OldestInstance"], "MinSize": 1, "MaxSize": 5 } ] }推荐的最佳实践流程是:先用describe-termination-policy-types确认可用策略 → 用create-auto-scaling-group或update-auto-scaling-group配置策略 → 用describe-auto-scaling-groups回读验证,形成完整的"查询-配置-验证"闭环。
小结
describe-termination-policy-types是理解与配置 EC2 Auto Scaling 缩容行为的基础性命令。通过本文你可以看到:
- 该命令零参数、只读,用于列出服务当前支持的终止策略类型,输出为
TerminationPolicyTypes字符串数组; - 返回的 7 个内置策略(
Default、AllocationStrategy、ClosestToNextInstanceHour、NewestInstance、OldestInstance、OldestLaunchConfiguration、OldestLaunchTemplate)与创建/更新命令中--termination-policies参数的合法取值一一对应,均由服务模型 service-2.json 中的TerminationPolicies列表类型统一约束; - 策略支持按顺序组合传入,也支持以 Lambda 函数 ARN 形式引入自定义终止逻辑;
- 配置完成后可通过
describe-auto-scaling-groups回读验证,形成完整闭环。
掌握该命令及配套的--termination-policies用法,即可让 Auto Scaling 组的每次缩容都精准符合业务预期。
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考