如何通过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
相关产品推荐
相关产品推荐

