Todos os produtos
Search
Central de documentação

Elastic Compute Service:Create and use an ECS instance with Terraform

Última atualização: Jul 03, 2026

O Terraform é uma ferramenta de IaC (Infraestrutura como Código) que automatiza o gerenciamento de infraestrutura. Ele permite definir e provisionar infraestrutura em nuvem por meio de código simples. Este tópico mostra como usar o Terraform para criar uma instância ECS.

Nota

Para obter mais informações sobre o Terraform, consulte O que é o Alibaba Cloud Terraform?.

Pré-requisitos

1. Instale o Terraform

Este tópico demonstra como instalar o Terraform a partir de um pacote em sistemas operacionais Linux ou Windows.

Nota

A Alibaba Cloud oferece dois ambientes online onde é possível executar comandos do Terraform sem instalação local:

  1. Terraform Explorer: Clique em Initiate Debugging para executar o código de exemplo deste tópico.

  2. Cloud Shell: Copie o código fornecido neste tópico e execute comandos do Terraform diretamente em Criar recursos com o Terraform.

  1. Acesse o site oficial do Terraform para baixar o pacote correspondente ao seu sistema operacional.

  2. Configure o ambiente de execução do Terraform.

    Linux

    Execute o comando a seguir para extrair o pacote para /usr/local/bin.

    # Replace {your_zip_path} with the path to your package. If your system does not support the unzip command, install it first.
    sudo unzip {your_zip_path} -d /usr/local/bin

    Windows

    1. Extraia o pacote. Por exemplo, defina o diretório de destino como D:\tool\terraform.

    2. Na área de trabalho, clique com o botão direito em This PC e selecione Type > Advanced system settings > Environment Variable > System variables/User variables.

    3. Clique em Path nas variáveis de sistema ou de usuário, selecione Edit > New, insira o diretório onde você descompactou o Terraform (como D:\tool\terraform) e clique em OK para concluir a configuração.

  3. Execute o comando terraform para verificar a configuração do caminho.

    terraform

    Se o comando exibir uma lista de opções do Terraform, a instalação foi bem-sucedida.

    ➜  ~ terraform
    Usage: terraform [global options] <subcommand> [args]
    The available commands for execution are listed below.
    The primary workflow commands are given first, followed by
    less common or more advanced commands.
    Main commands:
      init          Prepare your working directory for other commands
      validate      Check whether the configuration is valid
      plan          Show changes required by the current configuration
      apply         Create or update infrastructure
      destroy       Destroy previously-created infrastructure
    All other commands:
      console       Try Terraform expressions at an interactive command prompt
      fmt           Reformat your configuration in the standard style
      force-unlock  Release a stuck lock on the current workspace
      get           Install or upgrade remote Terraform modules
      graph         Generate a Graphviz graph of the steps in an operation
      import        Associate existing infrastructure with a Terraform resource
      login         Obtain and save credentials for a remote host
      logout        Remove locally-stored credentials for a remote host
      metadata      Metadata related commands
      output        Show output values from your root module
      providers     Show the providers required for this configuration
      refresh       Update the state to match remote systems
      show          Inspect Terraform state or plan
      state         Advanced state management
      taint         Mark a resource instance as not fully functional
      test          Execute integration tests for Terraform modules
      untaint       Remove the 'tainted' state from a resource instance
      version       Show the current Terraform version
      workspace     Workspace management
    
    Global options (use these before the subcommand, if any):
      -chdir=DIR    Switch to a different working directory before executing the
                    given subcommand.
      -help         Show this message, or the help for a given subcommand.
      -version      An alias for the "version" subcommand.
      show          Show the current state or a saved plan
      state         Advanced state management
      taint         Mark a resource instance as not fully functional
      test          Experimental support for module integration testing
      untaint       Remove the 'tainted' state from a resource instance
      version       Show the current Terraform version
      workspace     Workspace management
    Global options (use these before the subcommand, if any):
      -chdir=DIR    Switch to a different working directory before executing the
                    given subcommand.
      -help         Show this help output, or the help for a specified subcommand.
      -version      An alias for the "version" subcommand.

2. Configure a autenticação do Terraform

Antes de usar o Terraform para gerenciar recursos da Alibaba Cloud, configure a autenticação do provedor. Isso permite que o Terraform chame as APIs necessárias para criar e gerenciar sua infraestrutura.

Nota

Se você utilizar o Terraform Explorer ou o Cloud Shell, não será necessário configurar a autenticação manualmente. Apenas garanta que a conta conectada tenha permissões para gerenciar recursos VPC e ECS.

Este tópico utiliza o AccessKey de um usuário RAM, armazenado como variável de ambiente, para autenticação:

  1. Como uma conta Alibaba Cloud possui permissões totais sobre seus recursos, um AccessKey vazado representa um alto risco de segurança. Recomendamos o uso de um AccessKey de usuário RAM. Para mais informações sobre como criar um AccessKey de usuário RAM, consulte Criar um par de AccessKey.

  2. Ao conceder permissões a um usuário RAM para gerenciar recursos ECS e VPC, recomendamos seguir o princípio do menor privilégio. Para mais informações sobre como conceder permissões a um usuário RAM, consulte Gerenciar permissões de usuário RAM. O código de exemplo neste tópico exige a criação de recursos como ECS, VPCs e vSwitches. Para executar os exemplos, conceda as seguintes permissões ao usuário RAM:

    Serviço

    Política

    VPC

    Neste exemplo, selecione a política de sistema AliyunVPCFullAccess.

    ECS

    Neste exemplo, selecione a política de sistema AliyunECSFullAccess.

  3. Crie variáveis de ambiente para armazenar suas credenciais de autenticação.

    Linux

    Importante

    Variáveis de ambiente definidas com o comando export são temporárias e válidas apenas na sessão atual. Para torná-las permanentes, adicione o comando ao arquivo de inicialização do seu shell.

    # Your AccessKey ID.
    export ALICLOUD_ACCESS_KEY="yourAccessKeyID"
    # Your AccessKey secret.
    export ALICLOUD_SECRET_KEY="yourAccessKeySecret"
    # The region where the resources will be deployed.
    export ALICLOUD_REGION="cn-chengdu"

    Windows

    1. Na área de trabalho, clique com o botão direito em This PC e selecione Type > Advanced system settings > Environment Variable > System variables/User variables.

    2. Na seção System variables ou User variables, clique em New para criar as seguintes variáveis de ambiente.

      Variável

      Descrição

      Valor

      ALICLOUD_ACCESS_KEY

      Seu AccessKey ID.

      yourAccessKeyID

      ALICLOUD_SECRET_KEY

      Seu AccessKey secret.

      yourAccessKeySecret

      ALICLOUD_REGION

      A região onde os recursos serão implantados.

      Exemplo: cn-chengdu

Recursos relacionados do Terraform

O código de exemplo neste tópico utiliza os seguintes recursos do Terraform.

Nota

Alguns recursos usados neste tutorial geram custos. Para evitar cobranças inesperadas, limpe os recursos quando eles não forem mais necessários.

Recurso

Fonte de dados

alicloud_zones: Localiza zonas disponíveis para um tipo de instância especificado.

Crie um arquivo de configuração do Terraform

Defina os recursos de infraestrutura necessários para criar uma instância ECS, como a própria instância e uma VPC, em um arquivo main.tf. Copie o código da seção Código de exemplo completo para o seu arquivo de configuração.

  1. Crie um arquivo de configuração.

    Esse arquivo deve terminar com a extensão .tf e conter todas as definições dos seus recursos.

    Linux

    # Create a working directory.
    mkdir terraform-projects && cd terraform-projects
    mkdir ecs-quickstart && cd ecs-quickstart
    # Create and edit the configuration file.
    touch main.tf && vim main.tf

    Windows

    Crie uma nova pasta chamada ecs-quickstart. Dentro dela, crie um arquivo de configuração do Terraform chamado main.tf.

  2. Defina a configuração do provedor.

    Configure a região para a implantação dos seus recursos na Alibaba Cloud.

    # The region where the resources are located.
    variable "region" {
      default = "cn-chengdu"
    }
    provider "alicloud" {
      region = var.region
    }
  3. Defina a VPC e seu vSwitch.

    Uma VPC é uma rede privada logicamente isolada na nuvem que você pode configurar e gerenciar.

    variable "instance_name" {
      default = "tf-sample"
    }
    # The instance type of the ECS instance.
    variable "instance_type" {
      default = "ecs.e-c1m2.large"
    }
    # Query for availability zones that meet the specified conditions.
    data "alicloud_zones" "default" {
      available_disk_category     = "cloud_essd"
      available_resource_creation = "VSwitch"
      available_instance_type     = var.instance_type
    }
    # Create a VPC.
    resource "alicloud_vpc" "vpc" {
      vpc_name   = var.instance_name
      cidr_block = "172.16.0.0/12"
    }
    # Create a vSwitch.
    resource "alicloud_vswitch" "vsw" {
      vpc_id     = alicloud_vpc.vpc.id
      cidr_block = "172.16.0.0/21"
      zone_id    = data.alicloud_zones.default.zones.0.id
    }
  4. Defina o grupo de segurança.

    Um grupo de segurança atua como um firewall virtual que controla o tráfego de entrada e saída da sua instância ECS.

    # Create a security group.
    resource "alicloud_security_group" "default" {
      name   = var.instance_name
      vpc_id = alicloud_vpc.vpc.id
    }
    # Add an inbound rule to the security group.
    resource "alicloud_security_group_rule" "allow_tcp_22" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "22/22"
      priority          = 1
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = "0.0.0.0/0"
    }
  5. Defina a instância ECS.

    O ECS fornece capacidade de computação segura, escalável e de alto desempenho para diversos cenários, incluindo implantação de aplicativos, hospedagem de sites e processamento de dados.

    # The image ID of the ECS instance.
    variable "image_id" {
      default = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
    }
    # The public bandwidth for the ECS instance.
    variable "internet_bandwidth" {
      default = "10"
    }
    # The logon password for the ECS instance.
    variable "password" {
      default = "Test@12345"
    }
    # The number of ECS instances to create. The default value is 1.
    variable "ecs_count" {
      default = 1
    }
    # Create the ECS instance.
    resource "alicloud_instance" "instance" {
      count                      = var.ecs_count
      availability_zone          = data.alicloud_zones.default.zones.0.id
      security_groups            = alicloud_security_group.default.*.id
      password                   = var.password
      instance_type              = var.instance_type
      system_disk_category       = "cloud_essd"
      image_id                   = var.image_id
      instance_name              = var.instance_name
      vswitch_id                 = alicloud_vswitch.vsw.id
      internet_max_bandwidth_out = var.internet_bandwidth
    }
    output "public_ip" {
      value = [for i in range(var.ecs_count) : alicloud_instance.instance[i].public_ip]
    }
                  

Código de exemplo completo

Nota

Execute o código de exemplo com um único clique: Initiate Debugging

variable "region" {
  default = "cn-chengdu"
}
provider "alicloud" {
  region = var.region
}
variable "instance_name" {
  default = "tf-sample"
}
variable "instance_type" {
  default = "ecs.e-c1m2.large"
}
data "alicloud_zones" "default" {
  available_disk_category     = "cloud_essd"
  available_resource_creation = "VSwitch"
  available_instance_type     = var.instance_type
}
resource "alicloud_vpc" "vpc" {
  vpc_name   = var.instance_name
  cidr_block = "172.16.0.0/12"
}
resource "alicloud_vswitch" "vsw" {
  vpc_id     = alicloud_vpc.vpc.id
  cidr_block = "172.16.0.0/21"
  zone_id    = data.alicloud_zones.default.zones.0.id
}
resource "alicloud_security_group" "default" {
  name   = var.instance_name
  vpc_id = alicloud_vpc.vpc.id
}
resource "alicloud_security_group_rule" "allow_tcp_22" {
  type              = "ingress"
  ip_protocol       = "tcp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "22/22"
  priority          = 1
  security_group_id = alicloud_security_group.default.id
  cidr_ip           = "0.0.0.0/0"
}
variable "image_id" {
  default = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
}
variable "internet_bandwidth" {
  default = "10"
}
variable "password" {
  default = "Test@12345"
}
variable "ecs_count" {
  default = 1
}
resource "alicloud_instance" "instance" {
  count                      = var.ecs_count
  availability_zone          = data.alicloud_zones.default.zones.0.id
  security_groups            = alicloud_security_group.default.*.id
  password                   = var.password
  instance_type              = var.instance_type
  system_disk_category       = "cloud_essd"
  image_id                   = var.image_id
  instance_name              = var.instance_name
  vswitch_id                 = alicloud_vswitch.vsw.id
  internet_max_bandwidth_out = var.internet_bandwidth
}
output "public_ip" {
  value = [for i in range(var.ecs_count) : alicloud_instance.instance[i].public_ip]
}

Execute comandos do Terraform

Após criar o arquivo de configuração, execute comandos do Terraform para criar a instância ECS.

1. Inicialize o Terraform

O comando terraform init baixa e instala o plugin do provedor da Alibaba Cloud na pasta atual e gera vários arquivos de registro.

Linux

terraform init

Windows

Abra o Prompt de Comando (cmd), navegue até o diretório que contém seus arquivos de configuração do Terraform e execute o comando terraform init para inicializar.

# The configuration file is in the D:/ecs-quickstart directory.
# Switch to drive D.
d:
# Switch to the directory where the configuration file is located. Replace ecs-quickstart with your actual directory path.
cd ecs-quickstart
# Run the initialization command.
terraform init

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

Terraform has been successfully initialized!
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.

2. Visualize o plano de execução

Execute terraform plan para realizar as seguintes funções:

  • Verificar a sintaxe do código Terraform em main.tf.

  • Visualizar os recursos que serão criados com base no código Terraform atual.

terraform plan

Se a saída indicar que o arquivo de configuração do Terraform não possui erros de sintaxe, execute o comando terraform apply para criar os recursos. Caso outras mensagens de erro apareçam, modifique o arquivo de configuração do Terraform conforme as instruções.

...
Plan: 5 to add, 0 to change, 0 to destroy.

3. Aplique a configuração

Execute terraform apply para criar automaticamente a instância ECS e seus recursos dependentes, além de instalar o Python. Quando solicitado durante o processo de criação, insira yes para permitir que o Terraform crie todos os recursos definidos.

terraform apply

A saída a seguir indica que o Terraform criou os recursos.

...
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_vpc.vpc: Creating...
alicloud_vpc.vpc: Creation complete after 6s [id=vpc-2vcsghlpznz74XXXXXXXX]
alicloud_security_group.default: Creating...
alicloud_vswitch.vsw: Creating...
alicloud_security_group.default: Creation complete after 1s [id=sg-2vcdz6b8h9c3XXXXXXXX]
alicloud_security_group_rule.allow_tcp_22: Creating...
alicloud_security_group_rule.allow_tcp_22: Creation complete after 0s [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:22/22:intranet:0.0.0.0/0:accept:1]
alicloud_vswitch.vsw: Creation complete after 4s [id=vsw-2vc50dknug30bXXXXXXXX]
alicloud_instance.instance: Creating...
alicloud_instance.instance: Still creating... [10s elapsed]
alicloud_instance.instance: Creation complete after 15s [id=i-2vc3rf151bwcXXXXXXXX]
Apply complete! Resources: 5 added, 0 changed, 0 destroyed.
Outputs:
public_ip = [
  "4XX.XXX.XXX.XX7",
]

Conecte-se à instância ECS

Após a criação da instância, conecte-se remotamente via SSH usando seu endereço IP público. Para mais informações sobre métodos de conexão, consulte Visão geral dos métodos de conexão.

ssh <username>@<public_ip_address>

Verifique os resultados

Executar um comando do Terraform

Execute o seguinte comando para visualizar informações sobre a instância ECS criada.

# Format: terraform state show <resource_type>.<resource_name>[index]
terraform state show alicloud_instance.instance[0]

Visualizar no console

Faça login no console ECS para visualizar a instância ECS criada. Após executar o código Terraform, uma instância chamada tf-sample é criada e aparece com o status Running na página Instances. A instância está implantada na Zona de Disponibilidade A da região China (Chengdu). O tipo de instância é ecs.e-c1m2.large (2 vCPUs e 4 GiB de memória), o endereço IP privado é 172.16.0.100, o método de faturamento é pagamento conforme o uso e o tipo de rede é VPC.

Modifique recursos

Caso precise ajustar sua configuração, modifique as definições de recursos no arquivo de configuração. Por exemplo, adicione uma nova regra de entrada ao grupo de segurança.

  1. Para adicionar uma regra ao grupo de segurança que permita tráfego de entrada na porta 443, acrescente o seguinte código ao seu arquivo de configuração.

    resource "alicloud_security_group_rule" "allow_tcp_443" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "443/443"
      priority          = 1
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = "0.0.0.0/0"
    }
  2. Execute o comando terraform plan para visualizar as alterações. A saída a seguir indica que uma regra de grupo de segurança será adicionada ao grupo de segurança com o ID sg-2vcdz6b8h9c3XXXXXXXX.

    ...
    Terraform will perform the following actions:
      # alicloud_security_group_rule.allow_tcp_443 will be created
      + resource "alicloud_security_group_rule" "allow_tcp_443" {
          + cidr_ip           = "0.0.0.0/0"
          + id                = (known after apply)
          + ip_protocol       = "tcp"
          + nic_type          = "intranet"
          + policy            = "accept"
          + port_range        = "443/443"
          + prefix_list_id    = (known after apply)
          + priority          = 1
          + security_group_id = "sg-2vcdz6b8h9c3XXXXXXXX"
          + type              = "ingress"
        }
    Plan: 1 to add, 0 to change, 0 to destroy.
  3. Se as alterações estiverem conforme o esperado, execute o comando terraform apply para aplicá-las à sua infraestrutura. Quando o Terraform solicitar confirmação, digite yes e pressione Enter. A mensagem a seguir indica que uma nova regra foi adicionada com sucesso ao grupo de segurança com o ID sg-2vcdz6b8h9c3XXXXXXXX.

    ...
    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_tcp_443: Creating...
    alicloud_security_group_rule.allow_tcp_443: Creation complete after 0s [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:443/443:intranet:0.0.0.0/0:accept:1]
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Limpe recursos

Quando não precisar mais dos recursos, execute o seguinte comando para destruí-los.

terraform destroy

A saída a seguir indica que os recursos foram destruídos.

...
Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.
  Enter a value: yes
alicloud_security_group_rule.allow_tcp_443: Destroying... [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:443/443:intranet:0.0.0.0/0:accept:1]
alicloud_security_group_rule.allow_tcp_22: Destroying... [id=sg-2vcdz6b8h9c3XXXXXXXX:ingress:tcp:22/22:intranet:0.0.0.0/0:accept:1]
alicloud_instance.instance: Destroying... [id=i-2vc3rf151bwcXXXXXXXX]
alicloud_security_group_rule.allow_tcp_22: Destruction complete after 0s
alicloud_security_group_rule.allow_tcp_443: Destruction complete after 0s
alicloud_instance.instance: Still destroying... [id=i-2vc3rf151bwcXXXXXXXX, 10s elapsed]
alicloud_instance.instance: Destruction complete after 10s
alicloud_security_group.default: Destroying... [id=sg-2vcdz6b8h9c3XXXXXXXX]
alicloud_vswitch.vsw: Destroying... [id=vsw-2vc50dknug30bXXXXXXXX]
alicloud_security_group.default: Destruction complete after 1s
alicloud_vswitch.vsw: Destruction complete after 8s
alicloud_vpc.vpc: Destroying... [id=vpc-2vcsghlpznz74XXXXXXXX]
alicloud_vpc.vpc: Destruction complete after 6s
Destroy complete! Resources: 6 destroyed.

Referências