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

如何通过CloudFormation更新ECS Fargate服务的Task Definition

使用CloudFormation更新Fargate类型ECS服务的Task Definition

要通过CloudFormation更新运行中Fargate服务的Task Definition,核心就是修改ECS服务资源关联的Task Definition属性,再执行栈更新,具体操作如下:

步骤1:准备新的Task Definition

ECS Task Definition是不可变的,你得先创建新版本的Task Definition——要么在CloudFormation模板里定义新的AWS::ECS::TaskDefinition资源,要么直接用已有的新版本ARN。如果是在模板里定义,每次修改Task Definition的属性(比如镜像版本、环境变量),CloudFormation都会自动生成新的版本。

步骤2:修改ECS服务的模板配置

找到模板里的AWS::ECS::Service资源,把TaskDefinition字段的值换成新的Task Definition引用(比如用!Ref指向模板内的新Task Definition资源,或者直接写ARN字符串)。

示例模板片段:

Resources:
  MyFargateService:
    Type: AWS::ECS::Service
    Properties:
      Cluster: !Ref MyECSCluster
      LaunchType: FARGATE
      TaskDefinition: !Ref MyUpdatedTaskDefinition # 替换成新的Task Definition
      NetworkConfiguration:
        AwsvpcConfiguration:
          Subnets:
            - !Ref PrivateSubnet1
            - !Ref PrivateSubnet2
          SecurityGroups:
            - !Ref ServiceSecurityGroup
          AssignPublicIp: ENABLED
      # 可选:配置滚动部署策略,避免更新影响服务可用性
      DeploymentConfiguration:
        MaximumPercent: 200
        MinimumHealthyPercent: 100

步骤3:执行CloudFormation栈更新

  • 用CLI的话,跑这条命令:
    aws cloudformation update-stack --stack-name 你的栈名 --template-body file://修改后的模板.yaml --capabilities CAPABILITY_IAM
    
  • 也可以在AWS控制台的CloudFormation页面,选中目标栈点击“更新”,上传修改后的模板完成更新。

步骤4:验证更新

  • 去ECS控制台看服务详情,确认“任务定义”已经换成新版本;
  • 或者用CLI验证:
    aws ecs describe-services --cluster 你的集群名 --services 你的服务名 --query 'services[0].taskDefinition'
    

注意点

  • 如果你是引用模板外的Task Definition,要确保ARN是最新版本的;
  • 部署配置里的MaximumPercent和MinimumHealthyPercent可以控制更新时的任务数量,比如设成200和100,会先启动新任务再销毁旧任务,保证服务不中断;
  • 执行更新的IAM角色需要有ecs:UpdateService、cloudformation:UpdateStack这些权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:33:21