You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

使用CloudFormation与AWS Console创建ECS集群的差异问题咨询

How to Get the "Scale ECS Instances" Button in a CloudFormation-created ECS Cluster

Great question! I’ve run into this exact issue before when setting up ECS clusters via CloudFormation. The key difference between the AWS Console-created cluster and your CloudFormation one is that the console automatically sets up a managed Auto Scaling Group (ASG) linked directly to your ECS cluster—something CloudFormation won’t do unless you explicitly configure the right associations.

Why the Button is Missing

When you create an EC2-type ECS cluster via the AWS Console, it:

  • Creates an ASG pre-configured with ECS agent settings
  • Adds a special tag to the ASG that the ECS console recognizes (aws:ecs:cluster=<your-cluster-name>)
  • Ensures this tag propagates to all EC2 instances in the ASG

Without these pieces, the ECS console doesn’t know your ASG is tied to the cluster, so it hides the "Scale ECS Instances" button.

Step-by-Step Fix for CloudFormation

To replicate the console’s behavior and get the button, add these critical components to your CloudFormation template:

  1. Target an EC2-type ECS Cluster
    First, make sure your cluster is configured for EC2 launch type (Fargate clusters don’t have this scaling button by design). Your cluster resource should look like this:

    Resources:
      ECSCluster:
        Type: AWS::ECS::Cluster
        Properties:
          ClusterName: MyECSCluster
          # Optional: Add cluster settings if needed
    
  2. Configure Your ASG with ECS-Specific Tags
    Add the aws:ecs:cluster tag to your Auto Scaling Group, and enable tag propagation to instances. Here’s an example ASG resource:

    ECSAutoScalingGroup:
        Type: AWS::AutoScaling::AutoScalingGroup
        Properties:
          AutoScalingGroupName: MyECSCluster-ASG
          MinSize: 1
          MaxSize: 5
          DesiredCapacity: 1
          LaunchTemplate:
            LaunchTemplateId: !Ref ECSLaunchTemplate
            Version: !GetAtt ECSLaunchTemplate.LatestVersionNumber
          Tags:
            - Key: aws:ecs:cluster
              Value: !Ref ECSCluster
              PropagateAtLaunch: true
            # Add any other tags you need
    
  3. Set Up the Launch Template with ECS Agent Configuration
    Your launch template must include the ECS cluster name as an environment variable for the ECS agent, so instances register with the correct cluster. Use an ECS-optimized AMI for best results:

    ECSLaunchTemplate:
        Type: AWS::EC2::LaunchTemplate
        Properties:
          LaunchTemplateName: MyECSCluster-LaunchTemplate
          LaunchTemplateData:
            ImageId: ami-0abc123def456ghi7 # Replace with your region's ECS-optimized AMI
            InstanceType: t3.medium
            UserData:
              Fn::Base64: !Sub |
                #!/bin/bash
                echo "ECS_CLUSTER=${ECSCluster}" >> /etc/ecs/ecs.config
            IamInstanceProfile:
              Name: !Ref ECSInstanceProfile # Ensure this has AmazonEC2ContainerServiceforEC2Role policy
    
  4. Verify the Setup
    After deploying your CloudFormation stack:

    • Go to the ECS Console, navigate to your cluster
    • Refresh the page (sometimes the console takes a minute to pick up the association)
    • You should now see the "Scale ECS Instances" button under the ECS Instances tab

Common Mistakes to Avoid

  • Forgetting to set PropagateAtLaunch: true on the aws:ecs:cluster tag
  • Using a non-ECS-optimized AMI without manually configuring the ECS agent
  • Creating a Fargate-only cluster (Fargate handles scaling automatically, so no instance scaling button exists)

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

火山引擎 最新活动