资讯动态

aws-cli put-scheduled-action 实战:为 AWS 资源配置基于 cron 计划的周期性伸缩动作

发布时间:2026/9/14 19:26:22 来源:尧图企业网站定制
aws-cli put-scheduled-action 实战为 AWS 资源配置基于 cron 计划的周期性伸缩动作【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli本文以 aws-cli 中 Application Auto Scaling 的put-scheduled-action命令为例讲解如何为 DynamoDB 表等 AWS 资源创建“按计划自动伸缩”的定时动作Scheduled Action。读完本篇你将掌握该命令的完整参数体系、三种计划表达式at / rate / cron的写法、ScalableTargetAction容量语义以及如何配合describe-scheduled-actions、delete-scheduled-action完成定时伸缩动作的完整生命周期管理所有结论均可在仓库内的服务模型与示例文档中核对。命令定位创建或更新定时伸缩动作put-scheduled-action是 aws-cli 中 Application Auto Scaling 服务API 版本2016-02-06的操作命令用于为某个可伸缩目标scalable target创建或更新一个定时伸缩动作。从仓库内的服务模型定义service-2.json可以看到该操作的三条核心语义一个可伸缩目标由**服务命名空间ServiceNamespace 资源 IDResourceId 可伸缩维度ScalableDimension**三元组唯一标识定时动作就是绑定到这个三元组上的必须先通过register-scalable-target把资源注册为可伸缩目标之后才能为其创建定时动作如果可伸缩目标被反注册deregister其上的所有定时动作会一并被删除——这是管理此类资源时必须注意的“连带删除”行为。此外该操作采用Put幂等覆盖语义用相同的--scheduled-action-name再次调用即表示更新已有动作更新时只传需要变更的参数即可且“如果不传开始/结束时间旧的开始/结束时间会被删除”。官方示例为 DynamoDB 表配置每日扩缩计划仓库中的示例文档 put-scheduled-action.rst 给出了一个典型的实战场景为名为TestTable的 DynamoDB 表添加一个重复执行的定时动作在每天 12:15UTC检查写容量——若当前容量低于MinCapacity则扩容到该值aws application-autoscaling put-scheduled-action \ --service-namespace dynamodb \ --scheduled-action-name my-recurring-action \ --schedule cron(15 12 * * ? *) \ --resource-id table/TestTable \ --scalable-dimension dynamodb:table:WriteCapacityUnits \ --scalable-target-action MinCapacity6逐段解读这条命令--service-namespace dynamodb资源由 DynamoDB 服务提供--scheduled-action-name my-recurring-action动作名称在同一个可伸缩目标内必须唯一--schedule cron(15 12 * * ? *)cron 表达式表示每天 12 点 15 分触发六字段格式见下文--resource-id table/TestTableDynamoDB 表的资源 ID格式为table/表名--scalable-dimension dynamodb:table:WriteCapacityUnits伸缩的容量维度是表的预置写容量Write Capacity Units--scalable-target-action MinCapacity6动作触发的容量动作——只设置下限。到达计划时间时若当前写容量 6Application Auto Scaling 会把表扩容到 6 个写容量单位。这里只指定MinCapacity而不指定MaxCapacity是刻意的示例意图是“在业务高峰前把写容量抬起来”而不限制缩容与目标跟踪等动态伸缩策略可以共存。参数详解哪些必填、哪些可选依据服务模型中的请求结构 PutScheduledActionRequest各参数如下表参数必填说明--service-namespace是资源所属 AWS 服务的命名空间如dynamodb、ecs、rds、appstream等模型中定义为枚举值自有应用/服务提供的资源使用custom-resource--scheduled-action-name是定时动作名称在同一可伸缩目标内唯一--resource-id是资源标识符由“资源类型 唯一标识”组成格式因服务而异--scalable-dimension是可伸缩维度格式为“服务命名空间:资源类型:伸缩属性”--schedule否计划表达式支持 at / rate / cron 三种格式--timezone否使用 at 或 cron 表达式时的时区缺省为 UTC取值为 IANA 标准时区名如Etc/GMT9、Pacific/Tahiti--start-time否动作开始生效的时间UTC。与结束时间一起构成重复计划的时间边界--end-time否重复计划停止的时间UTC--scalable-target-action否形如MinCapacityN,MaxCapacityM可只给其一关于--scheduled-action-name模型中还给出了严格的格式约束见 ScheduledActionName 定义长度 1–256 字符不能以空格开头、不能以空格结尾且不能包含控制字符或:、/、|等分隔符——这解释了为什么示例使用my-recurring-action这类连字符命名。ResourceId 的常见格式服务模型中对--resource-id的文档列举了各类服务的标准格式见 ResourceId 文档说明常用的有ECS 服务service/my-cluster/my-serviceEMR 实例组instancegroup/j-2EEZNYKUA1NTV/ig-1791Y4E1L8YI0AppStream 2.0 fleetfleet/sample-fleetDynamoDB 表table/my-tableGSItable/my-table/index/my-table-indexAurora 集群cluster:my-db-clusterSageMaker 端点变体endpoint/my-end-point/variant/KMeansClusteringLambda 预置并发function:my-function:prod需带版本号或别名Amazon Keyspaces 表keyspace/mykeyspace/table/mytableAmazon MSK 集群、Comprehend 端点等直接使用集群/端点 ARN自定义资源custom-resource不使用资源类型前缀需指定 CloudFormation 模板栈的OutputValueScalableDimension 的常见取值同样来自模型文档见 ScalableDimension 文档说明例如ecs:service:DesiredCount—— ECS 服务的任务数elasticmapreduce:instancegroup:InstanceCount—— EMR 实例组实例数ec2:spot-fleet-request:TargetCapacity—— Spot Fleet 目标容量dynamodb:table:ReadCapacityUnits/dynamodb:table:WriteCapacityUnits—— DynamoDB 表预置读/写容量dynamodb:index:ReadCapacityUnits/dynamodb:index:WriteCapacityUnits—— GSI 预置读/写容量rds:cluster:ReadReplicaCount—— Aurora 只读副本数lambda:function:ProvisionedConcurrency—— Lambda 预置并发sagemaker:variant:DesiredInstanceCount—— SageMaker 端点变体实例数custom-resource:ResourceType:Property—— 自定义资源的伸缩维度选择维度时要注意它与--resource-id、--service-namespace必须三者匹配上例中dynamodb命名空间对应table/...资源 ID又对应dynamodb:table:...维度。Schedule 的三种计划表达式--schedule参数支持三种格式定义见 Schedule 文档说明1. at 表达式一次性计划at(yyyy-mm-ddThh:mm:ss)适合“在某个确定时刻执行一次”的场景例如at(2019-05-20T18:35:00)。默认使用 UTC可用--timezone覆盖。2. rate 表达式固定间隔rate(value unit)value为正整数unit取minute | minutes | hour | hours | day | days。例如rate(30 minutes)表示每 30 分钟执行一次。3. cron 表达式周期性计划本例所用cron(fields)cron 格式由六个空格分隔的字段组成[分钟] [小时] [日] [月] [星期] [年]同样默认 UTC、可用--timezone覆盖。官方示例中的cron(15 12 * * ? *)展开即为字段值含义分钟15第 15 分小时1212 点日*每天月*每月星期?不指定与“日”互斥占位年*每年即“每天 12:15 UTC 触发一次”。另外两个可选的边界参数--start-time/--end-time对重复计划的作用在服务模型的操作文档中有明确说明它们构成重复动作的起止边界只在边界窗口内按计划触发。ScalableTargetAction 的容量语义--scalable-target-action对应模型中的 ScalableTargetAction 结构包含两个成员MinCapacity最小容量。定时动作触发时资源容量至少达到该值——因此“当前容量低于 MinCapacity 就扩到 MinCapacity”只是下限保障若目标跟踪策略要求更高实际容量可能更大MaxCapacity最大容量。若当前容量高于该值Application Auto Scaling 会缩容到该值。注意即便设定很大的最大值各服务自身的配额quota仍可能施加更低的限制需要更高层级时应先申请配额提升。两个值可以只填一个也可以都填只填MinCapacity实现“保底扩容”只填MaxCapacity实现“上限收缩”都填则把容量收敛到[Min, Max]区间。在命令行上通过逗号分隔传递例如--scalable-target-action MinCapacity5,MaxCapacity20验证与管理describe 与 delete创建动作后建议用describe-scheduled-actions验证。仓库中的 describe-scheduled-actions.rst 展示了 DynamoDB 命名空间下的真实输出形态aws application-autoscaling describe-scheduled-actions \ --service-namespace dynamodb{ ScheduledActions: [ { ScalableDimension: dynamodb:table:WriteCapacityUnits, Schedule: at(2019-05-20T18:35:00), ResourceId: table/my-table, CreationTime: 1561571888.361, ScheduledActionARN: arn:aws:autoscaling:us-west-2:123456789012:scheduledAction:2d36aa3b-cdf9-4565-b290-81db519b227d:resource/dynamodb/table/my-table:scheduledActionName/my-first-scheduled-action, ScalableTargetAction: { MinCapacity: 15, MaxCapacity: 20 }, ScheduledActionName: my-first-scheduled-action, ServiceNamespace: dynamodb } ] }返回的ScheduledAction对象结构见 ScheduledAction 定义比创建请求多出ScheduledActionARN与CreationTime两个只读字段其中 ARN 中内嵌了服务命名空间、资源标识与动作名称便于后续审计与关联。不再需要某个定时动作时使用delete-scheduled-action按相同的三元组加名称精确删除例如仓库示例 delete-scheduled-action.rst 中删除 AppStream fleet 上的动作aws application-autoscaling delete-scheduled-action \ --service-namespace appstream \ --scalable-dimension appstream:fleet:DesiredCapacity \ --resource-id fleet/sample-fleet \ --scheduled-action-name my-recurring-action该命令执行成功时无任何输出。前提与常见异常再次强调使用前提资源必须已注册为可伸缩目标。可参考仓库示例 register-scalable-target.rst 中的 DynamoDB 注册写法需指定--min-capacity/--max-capacity以及通过--suspended-state暂停/恢复伸缩其中ScheduledScalingSuspendedtrue会直接挂起定时伸缩。从模型中该操作声明的异常列表PutScheduledAction 操作定义看执行put-scheduled-action时可能遇到ValidationException参数校验失败如三元组不匹配、schedule 表达式格式错误、动作名违反命名约束LimitExceededException超过服务配额/数量上限ObjectNotFoundException资源或可伸缩目标不存在ConcurrentUpdateException与并发更新冲突可稍后重试InternalServiceException服务端内部错误。小结put-scheduled-action是 aws-cli 中将“可预测的业务波峰波谷”转化为自动容量操作的入口用三元组--service-namespace/--resource-id/--scalable-dimension定位目标用--schedule的 at/rate/cron 表达式定义触发时机用--scalable-target-action的 Min/Max 容量定义动作效果。配合register-scalable-target前提、describe-scheduled-actions验证、delete-scheduled-action清理即可完整管理定时伸缩动作同时留意“反注册可伸缩目标会连带删除其定时动作”这一服务行为避免运维时产生预期外的状态丢失。【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价