You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform部署AWS ECS未自动部署最新任务定义问题

问题根因

核心问题出在aws_ecs_service资源的lifecycle配置上:你将task_definition加入了ignore_changes列表。
ignore_changes规则会让Terraform在计算资源更新计划时,完全忽略指定属性的变更——哪怕你在代码里明确写了task_definition = aws_ecs_task_definition.ecsTaskDefinition.arn,当任务定义重建生成新的ARN时,Terraform也不会触发ECS服务对应字段的更新。ECS服务没有收到绑定新任务定义的指令,自然会一直运行旧的任务修订版本,不会触发新版本部署。
你贴的执行日志也能直接印证这个问题:日志中只提示aws_ecs_task_definition需要替换重建,完全没有aws_ecs_service需要更新的相关条目,正是因为忽略规则屏蔽了任务定义变更对服务资源的影响。

修复步骤
  • 调整aws_ecs_service的lifecycle配置,将task_definition从ignore_changes列表中移除,保留对desired_count的忽略即可(该配置用于避免Terraform覆盖自动伸缩或手动调整的服务实例数,属于常规合理配置)。修改后的代码块如下:
lifecycle {
  ignore_changes = [desired_count]
}
  • 执行terraform plan校验变更,此时执行计划中除了任务定义的重建操作外,还会显示aws_ecs_service将更新task_definition属性,绑定到新生成的任务定义ARN。
  • 确认计划符合预期后执行terraform apply,Terraform会按顺序先创建新版本任务定义,再更新ECS服务绑定的任务定义,自动触发滚动部署完成版本更新。
补充说明
  • 你当前配置中已经开启force_new_deployment = true,移除错误的忽略规则后,只要任务定义发生变更,就会自动强制触发ECS服务的新部署,不需要额外配置。
  • 只有当你完全通过Terraform之外的流程(比如独立的CD工具、CodeDeploy)管控ECS服务的任务定义版本更新时,才需要将task_definition加入ignore_changes列表;如果部署流程由Terraform全链路管理,这个字段绝对不能加入忽略列表。

内容的提问来源于stack exchange,提问作者Adrian Görisch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:15:11