Todos os produtos
Search
Central de documentação

Auto Scaling:Create Auto Scaling resources by using Terraform

Última atualização: Aug 28, 2026

Este tópico descreve como usar o Terraform para criar seus primeiros recursos do Auto Scaling, como grupos de dimensionamento, configurações de dimensionamento e regras de dimensionamento.

Nota

Execute o código de exemplo deste tópico com um único clique em. Executar código de exemplo

Pré-requisitos

  • Uma conta Alibaba Cloud tem permissões totais sobre todos os recursos, o que gera risco significativo de segurança se as credenciais forem comprometidas. Recomendamos usar um usuário RAM e criar um AccessKey para ele. Para mais informações, consulte Create a RAM user e Create an AccessKey.

  • A autorização RAM ajuda a gerenciar permissões de acesso aos recursos na cloud. Ela permite colaboração entre múltiplos usuários e concede apenas as permissões mínimas necessárias, evitando vulnerabilidades de segurança por privilégios excessivos. Para mais informações, consulte Manage RAM user permissions.

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ecs:CreateSecurityGroup",
                    "ecs:ModifySecurityGroupPolicy",
                    "ecs:DescribeSecurityGroups",
                    "ecs:ListTagResources",
                    "ecs:DeleteSecurityGroup",
                    "ecs:DescribeSecurityGroupAttribute",
                    "ecs:AuthorizeSecurityGroup",
                    "ecs:RevokeSecurityGroup"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "vpc:DescribeVpcAttribute",
                    "vpc:DescribeRouteTableList",
                    "vpc:DescribeVSwitchAttributes",
                    "vpc:DeleteVpc",
                    "vpc:DeleteVSwitch",
                    "vpc:CreateVpc",
                    "vpc:CreateVSwitch"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "ess:CreateScalingGroup",
                    "ess:DescribeScalingGroups",
                    "ess:ListTagResources",
                    "ess:DeleteScalingGroup",
                    "ess:ModifyScalingGroup",
                    "ess:CreateScalingConfiguration",
                    "ess:DescribeScalingConfigurations",
                    "ess:ModifyScalingConfiguration",
                    "ess:CreateScalingRule",
                    "ess:DescribeScalingRules",
                    "ess:DeleteScalingRule"
                ],
                "Resource": "*"
            }
        ]
    }
  • Configure um ambiente de execução do Terraform. Use um dos métodos a seguir:

    • Use o Terraform no Terraform Explorer: a Alibaba Cloud oferece um ambiente de execução online para o Terraform. Após fazer login, use e teste o Terraform diretamente no navegador, sem necessidade de instalação. Essa opção gratuita é ideal para testes rápidos e depuração.

    • Use Terraform to quickly create resources: o Terraform vem pré-instalado no Cloud Shell da Alibaba Cloud e configurado com suas credenciais de identidade. Execute comandos do Terraform diretamente no Cloud Shell. Esse método oferece acesso rápido, prático e de baixo custo ao Terraform.

    • Install and configure Terraform locally: método recomendado para cenários com conectividade de rede limitada ou quando for necessário um ambiente de desenvolvimento personalizado.

Recursos utilizados

Criar recursos do Auto Scaling

Neste exemplo, você criará recursos do Auto Scaling, incluindo um grupo de dimensionamento, uma configuração de dimensionamento e uma regra de dimensionamento.

  1. Crie um diretório de trabalho e um arquivo de configuração chamado main.tf. Em seguida, copie o código abaixo para o arquivo main.tf.

    variable "region" {
      default = "cn-heyuan"
    }
    variable "instance_type" {
      default = "ecs.hfc7.xlarge"
    }
    variable "image_id" {
      default = "aliyun_2_1903_x64_20G_alibase_20210120.vhd"
    }
    variable "zone_id" {
      default = "cn-heyuan-b"
    }
    provider "alicloud" {
      region = var.region
    }
    # Create a VPC.
    resource "alicloud_vpc" "vpc" {
      vpc_name   = "tf-test-vpc-wjt"
      cidr_block = "172.16.0.0/12" # Specify the private CIDR block for the VPC.
    }
    # Create a vSwitch.
    resource "alicloud_vswitch" "vsw" {
      vpc_id       = alicloud_vpc.vpc.id
      cidr_block   = "172.16.0.0/21" # Specify the private CIDR block for the vSwitch.
      zone_id      = var.zone_id     # Select the zone for the vSwitch.
      vswitch_name = "tf-test-vswitch-wjt"
    }
    # Create a security group.
    resource "alicloud_security_group" "security" {
      name        = "tf_test_security"
      description = "New security group"
      vpc_id      = alicloud_vpc.vpc.id
    }
    # Add a security group rule that allows traffic from all IP addresses.
    resource "alicloud_security_group_rule" "allow_all_tcp" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "1/65535"
      priority          = 1
      security_group_id = alicloud_security_group.security.id
      cidr_ip           = "0.0.0.0/0"
    }
    # This example creates a scaling group with a maximum of 100 instances.
    resource "alicloud_ess_scaling_group" "group" {
      scaling_group_name = "tf_test_scalinggroup"
      min_size           = 0
      max_size           = 100
      vswitch_ids        = [alicloud_vswitch.vsw.id]
    }
    # This example creates a scaling configuration for ECS instances.
    resource "alicloud_ess_scaling_configuration" "configuration" {
      scaling_group_id           = alicloud_ess_scaling_group.group.id
      instance_type              = var.instance_type
      image_id                   = var.image_id
      security_group_id          = alicloud_security_group.security.id
      scaling_configuration_name = "tf_test_scalingconfiguration"
      system_disk_category       = "cloud_essd"
      spot_strategy              = "SpotWithPriceLimit"
      active                     = true
      force_delete               = true
    }
    # Create a scaling rule.
    resource "alicloud_ess_scaling_rule" "rule" {
      scaling_group_id = alicloud_ess_scaling_group.group.id
      adjustment_type  = "QuantityChangeInCapacity"
      adjustment_value = 1
    }
  2. Execute o comando a seguir para inicializar o ambiente de execução do Terraform.

    terraform init

    A saída abaixo indica que a inicialização foi bem-sucedida.

    Initializing the backend...
    Initializing provider plugins...
    - Checking for available provider plugins...
    - Downloading plugin for provider "alicloud" (hashicorp/alicloud) 1.90.1...
    ...
    You may now begin working with Terraform. Try running "terraform plan" to see
    any changes that are required for your infrastructure. All Terraform commands
    should now work.
    If you ever set or change modules or backend configuration for Terraform,
    rerun this command to reinitialize your working directory. If you forget, other
    commands will detect it and remind you to do so if necessary.
  3. Crie um plano de execução e visualize as alterações.

    terraform plan
  4. Execute o comando abaixo para criar os recursos.

    terraform apply

    Quando solicitado, insira yes e pressione Enter. Aguarde a conclusão do comando. A saída a seguir confirma a criação dos recursos do Auto Scaling.

    Do you want to perform these actions?
      Terraform will perform the actions described above.
      Only 'yes' will be accepted to approve.
      Enter a value: yes
    ...
    alicloud_security_group_rule.allow_all_tcp: Creation complete after 0s [id=sg-f8z1mes******:ingress:tcp:1/65535:intranet:0.0.0.0/0:accept:1]
    alicloud_vswitch.vsw: Creation complete after 3s [id=vsw-f8ztgc4******]
    alicloud_ess_scaling_group.group: Creating...
    alicloud_ess_scaling_group.group: Creation complete after 2s [id=asg-f8z9mo******]
    ...
    Apply complete! Resources: 7 added, 0 changed, 0 destroyed.
  5. Verifique os resultados

    Terraform show

    Execute o comando a seguir para visualizar os detalhes dos recursos criados pelo Terraform:

    terraform show
    D:\tf>terraform show
    # alicloud_ess_scaling_configuration.configuration:
    resource "alicloud_ess_scaling_configuration" "configuration" {
        active                         = true
        credit_specification           = null
        force_delete                   = true
        host_name                      = null
        id                             = "xxx"
        image_id                       = "aliyun_2_1903_x64_20G_alibase_20210120.vhd"
        image_name                     = null
        instance_name                  = "ESS-Instance"
        instance_type                  = "ecs.hfc7.xlarge"
        internet_charge_type           = "PayByBandwidth"
        internet_max_bandwidth_in      = 0
        internet_max_bandwidth_out     = 0
        key_name                       = null
        override                       = false
        password_inherit                = false
        resource_group_id              = null
        role_name                      = null
        scaling_configuration_name     = "tf_test_scalingconfiguration"
        scaling_group_id               = "xxx"
        security_group_id              = "xxx"
        spot_strategy                  = "SpotWithPriceLimit"
        ...
        system_disk_auto_snapshot_policy_id = null
        system_disk_category           = "cloud_essd"
        system_disk_description        = null
        system_disk_encrypted          = false
        system_disk_name               = null
        system_disk_performance_level  = null
        system_disk_size               = 0
    }
    # alicloud_ess_scaling_group.group:
    resource "alicloud_ess_scaling_group" "group" {
        allocation_strategy                    = null
        az_balance                             = false
        default_cooldown                       = 300
        desired_capacity                       = 0
        group_deletion_protection              = false
        group_type                             = "ECS"
        health_check_type                      = "ECS"
        id                                     = "asg-xxx"
        launch_template_id                     = null
        launch_template_version                = null
        max_size                               = 100
        min_size                               = 0
        multi_az_policy                        = "PRIORITY"
        on_demand_base_capacity                = 0
        on_demand_percentage_above_base_capacity = 0
        removal_policies                       = [
            "OldestScalingConfiguration",
            "OldestInstance",
        ]
        resource_group_id                      = "xxx"
        scaling_group_name                     = "tf_test_scalinggroup"
        scaling_policy                         = "release"
        spot_allocation_strategy               = null
        spot_instance_remedy                   = false
        vswitch_ids                            = [
            "vsw-f8ztgc4ad3e7ft9evy38z",
        ]
    }

    Auto Scaling console

    Faça login no Auto Scaling console para visualizar o grupo de dimensionamento criado.

    Na barra de navegação superior, selecione China (Heyuan) no seletor de regiões. Na página Scaling Groups, localize o grupo de dimensionamento chamado tf_test_scalinggroup e confirme se o status está Disabled, se o tipo é ECS e se o número máximo de instâncias é 100.

Limpar recursos

Quando não precisar mais dos recursos criados e gerenciados pelo Terraform, execute o comando a seguir para destruí-los. Para mais informações sobre terraform destroy, consulte Common commands.

terraform destroy

Código de exemplo

Nota

Execute o código de exemplo deste tópico com um único clique em. Executar código de exemplo

Código de exemplo

variable "region" {
  default = "cn-heyuan"
}
variable "instance_type" {
  default = "ecs.hfc7.xlarge"
}
variable "image_id" {
  default = "aliyun_2_1903_x64_20G_alibase_20210120.vhd"
}
variable "zone_id" {
  default = "cn-heyuan-b"
}
provider "alicloud" {
  region = var.region
}
# Create a VPC.
resource "alicloud_vpc" "vpc" {
  vpc_name   = "tf-test-vpc-wjt"
  cidr_block = "172.16.0.0/12" # Specify the private CIDR block for the VPC.
}
# Create a vSwitch.
resource "alicloud_vswitch" "vsw" {
  vpc_id       = alicloud_vpc.vpc.id
  cidr_block   = "172.16.0.0/21" # Specify the private CIDR block for the vSwitch.
  zone_id      = var.zone_id     # Select the zone for the vSwitch.
  vswitch_name = "tf-test-vswitch-wjt"
}
# Create a security group.
resource "alicloud_security_group" "security" {
  name        = "tf_test_security"
  description = "New security group"
  vpc_id      = alicloud_vpc.vpc.id
}
# Add a security group rule that allows traffic from all IP addresses.
resource "alicloud_security_group_rule" "allow_all_tcp" {
  type              = "ingress"
  ip_protocol       = "tcp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "1/65535"
  priority          = 1
  security_group_id = alicloud_security_group.security.id
  cidr_ip           = "0.0.0.0/0"
}
# This example creates a scaling group with a maximum of 100 instances.
resource "alicloud_ess_scaling_group" "group" {
  scaling_group_name = "tf_test_scalinggroup"
  min_size           = 0
  max_size           = 100
  vswitch_ids        = [alicloud_vswitch.vsw.id]
}
# This example creates a scaling configuration for ECS instances.
resource "alicloud_ess_scaling_configuration" "configuration" {
  scaling_group_id           = alicloud_ess_scaling_group.group.id
  instance_type              = var.instance_type
  image_id                   = var.image_id
  security_group_id          = alicloud_security_group.security.id
  scaling_configuration_name = "tf_test_scalingconfiguration"
  system_disk_category       = "cloud_essd"
  spot_strategy              = "SpotWithPriceLimit"
  active                     = true
  force_delete               = true
}
# Create a scaling rule.
resource "alicloud_ess_scaling_rule" "rule" {
  scaling_group_id = alicloud_ess_scaling_group.group.id
  adjustment_type  = "QuantityChangeInCapacity"
  adjustment_value = 1
}