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

如何通过CloudFormation在已有ECS任务定义中新增后端容器

可行方案及操作步骤

完全可以通过CloudFormation实现将后端容器加入现有ECS Fargate任务且不影响前端服务,具体操作如下:

1. 调整CloudFormation任务定义模板

在现有AWS::ECS::TaskDefinition资源的ContainerDefinitions数组中,新增后端容器的配置项,保持任务家族(Family)与原前端任务定义一致:

Resources:
  MyFargateTaskDefinition:
    Type: AWS::ECS::TaskDefinition
    Properties:
      Family: my-frontend-backend-task # 保持原任务家族名称
      NetworkMode: awsvpc
      RequiresCompatibilities:
        - FARGATE
      Cpu: "1024" # 根据前后端总资源需求调整,确保不超过Fargate规格限制
      Memory: "2048"
      ContainerDefinitions:
        # 原前端容器配置(保持不变)
        - Name: frontend-container
          Image: !Ref FrontendImageUri
          PortMappings:
            - ContainerPort: 80
          LogConfiguration:
            LogDriver: awslogs
            Options:
              awslogs-group: /ecs/frontend
              awslogs-region: !Ref AWS::Region
              awslogs-stream-prefix: ecs
        # 新增后端容器配置
        - Name: backend-container
          Image: !Ref BackendImageUri
          PortMappings:
            - ContainerPort: 3000
          Environment:
            - Name: DB_HOST
              Value: !Ref DBEndpoint
          LogConfiguration:
            LogDriver: awslogs
            Options:
              awslogs-group: /ecs/backend
              awslogs-region: !Ref AWS::Region
              awslogs-stream-prefix: ecs
  • 确保前后端容器的Name唯一,端口映射不冲突
  • 根据实际资源需求调整任务的Cpu和Memory,需满足Fargate的规格组合(如0.5vCPU对应1GB/2GB内存,1vCPU对应2GB/4GB等)

2. 配置ECS服务的无中断部署策略

在CloudFormation的AWS::ECS::Service资源中,设置合理的部署配置,保证更新过程中前端服务持续可用:

MyFargateService:
    Type: AWS::ECS::Service
    Properties:
      Cluster: !Ref ECSCluster
      TaskDefinition: !Ref MyFargateTaskDefinition
      LaunchType: FARGATE
      DeploymentConfiguration:
        MinimumHealthyPercent: 100 # 保证更新期间至少有原数量的健康任务运行
        MaximumPercent: 200 # 允许同时运行最多2倍数量的任务
      LoadBalancers:
        # 原前端负载均衡配置(保持不变)
        - ContainerName: frontend-container
          ContainerPort: 80
          TargetGroupArn: !Ref FrontendTargetGroup
        # 新增后端负载均衡配置(若需对外暴露)
        - ContainerName: backend-container
          ContainerPort: 3000
          TargetGroupArn: !Ref BackendTargetGroup
  • MinimumHealthyPercent: 100确保旧任务(仅前端)在新任务(前后端)健康前不会被终止
  • 若后端服务无需对外暴露,可省略对应的负载均衡配置

3. 整合后端CI/CD流水线

修改后端的CodePipeline和CodeBuild,使其触发CloudFormation更新:

  • 在CodeBuild中,构建后端镜像并推送到ECR后,输出镜像URI(如ACCOUNT_ID.dkr.ecr.REGION.amazonaws.com/backend:TAG)作为流水线的输出变量
  • 在CodePipeline的CloudFormation部署阶段,将BackendImageUri参数设为CodeBuild输出的镜像URI,触发任务定义的版本更新
  • 前端流水线保持原有逻辑,仅更新FrontendImageUri参数,各自独立触发任务定义的增量更新

4. 验证与测试

  • 在测试环境执行流水线,检查CloudFormation变更集,确认仅更新任务定义版本和服务部署,无其他资源变更
  • 验证ECS控制台中,新任务同时运行前后端容器,旧任务在新任务健康后自动终止
  • 测试前端服务是否无中断,后端服务是否正常运行、与前端通信正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:45:32