如何在Amazon ECS中按指定时区调度容器夜间停止运行
在Amazon ECS中按指定时区调度容器夜间自动停止的方法
实现这个需求核心是用Amazon EventBridge(原CloudWatch Events)触发ECS的停止操作,同时指定自定义时区匹配夜间时段。以下分两种常见场景说明:
场景1:停止单个ECS任务
创建IAM角色赋予EventBridge权限
需创建一个IAM角色,允许EventBridge调用ECS的StopTaskAPI。权限策略示例:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ecs:StopTask", "Resource": "arn:aws:ecs:你的区域:你的账号ID:task/你的集群名/*" } ] }给该角色添加信任关系,允许
events.amazonaws.com作为信任实体。创建EventBridge调度规则
- 进入EventBridge控制台,点击「创建规则」
- 规则类型选「计划」,再选「Cron表达式」
- 输入对应夜间停止时间的Cron表达式,比如要每天北京时间22:00停止,直接写
0 22 * * ? *,然后在「时区」下拉框选择Asia/Shanghai(按需替换为目标时区) - 目标类型选「AWS服务」,目标选「ECS任务」,动作选「停止任务」
- 填写ECS集群名称,指定要停止的任务ARN(若需动态匹配任务,可通过EventBridge目标输入传递参数或规则筛选事件)
- 选择之前创建的IAM角色作为执行角色
场景2:停止ECS服务(将期望任务数设为0)
如果容器由ECS Service管理,更推荐通过更新服务期望任务数来停止,后续启动更便捷:
创建IAM角色赋予EventBridge权限
权限策略需允许ecs:UpdateService:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ecs:UpdateService", "Resource": "arn:aws:ecs:你的区域:你的账号ID:service/你的集群名/你的服务名" } ] }同样配置信任关系允许EventBridge调用。
创建EventBridge调度规则
- 规则类型及时区设置同场景1,比如北京时间22:00的Cron表达式
0 22 * * ? *,时区选Asia/Shanghai - 目标类型选「AWS服务」,目标选「ECS服务」,动作选「更新服务」
- 填写集群名和服务名,将「期望任务数」设为0
- 选择对应的IAM执行角色
- 规则类型及时区设置同场景1,比如北京时间22:00的Cron表达式
注意事项
- 确认EventBridge规则的时区设置正确,避免UTC时差导致调度时间偏差
- 若需后续自动启动容器,可创建另一条EventBridge规则,在指定早间时间将ECS服务期望任务数设回原数值,或启动任务
- Fargate类型任务/服务停止后无额外费用;EC2类型若要彻底节省成本,可配合EventBridge触发EC2的
StopInstancesAPI停止实例
内容的提问来源于stack exchange,提问作者YAN CHIRINO
相关产品推荐
相关产品推荐

