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

更新ECS任务定义镜像版本时CloudFormation提示无变更的问题

ECS任务定义镜像更新CloudFormation报错问题解答

问题场景

原始CloudFormation脚本:

myServiceName:
  Type: "AWS::ECS::Service"
  Properties:
      ServiceName: "myServiceName"
      TaskDefinition: !Ref myTaskName
myTaskName:
  Type: "AWS::ECS::TaskDefinition"
  Properties:
      ContainerDefinitions:
  Image: !Sub "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/docker-image-name:1.1.1"

将任务定义中的镜像版本更新为1.1.2:

Image: !Sub "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/docker-image-name:1.1.2"

执行CloudFormation更新命令时,出现错误:Submitted information does not contain changes.

疑问:是否必须修改Service才能更新TaskDefinition使其指向ECR中的新镜像?

解答

ECS任务定义(TaskDefinition)本质是不可修改的,每次更新都需要创建新的版本。你的报错核心原因是CloudFormation没识别到TaskDefinition的有效变更,或者无法自动处理版本更新并同步到Service。

  • 不需要修改Service的名称,但必须确保CloudFormation能识别TaskDefinition的变更,并让Service自动指向新的任务定义版本。
  • 解决步骤:
    1. 修正模板格式错误:原始模板中ContainerDefinitions的结构不完整,它应该是一个数组,每个元素对应一个容器的配置。正确结构示例:
      myTaskName:
        Type: "AWS::ECS::TaskDefinition"
        Properties:
          Family: "myTaskFamily" # 指定任务家族,用于版本管理
          ContainerDefinitions:
            - Name: "myContainer"
              Image: !Sub "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/docker-image-name:1.1.2"
              # 按需添加其他配置,如PortMappings、Memory等
      
    2. 启用任务定义版本化:通过Family属性定义任务家族,每次修改镜像等属性时,CloudFormation会自动创建新的TaskDefinition版本(版本号递增)。
    3. 确保Service引用正确:Service的TaskDefinition字段直接使用!Ref myTaskName即可,CloudFormation会自动将Service更新为使用最新版本的TaskDefinition。

当你完成上述调整后,再次执行CloudFormation更新,系统会创建新的TaskDefinition版本,并更新Service使用该版本,就不会再出现无变更的报错。

内容的提问来源于stack exchange,提问作者Morgan Martin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:45:43