Todos los productos
Search
Centro de documentos

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

Última actualización: Sep 02, 2026

Terraform es una herramienta de IaC (Infraestructura como Código) para automatizar la gestión de infraestructura. Permite definir y aprovisionar infraestructura en la nube mediante código sencillo. Este tema muestra cómo utilizar Terraform para crear una instancia de ECS.

Nota

Para obtener más información sobre Terraform, consulte What is Alibaba Cloud Terraform?.

Requisitos previos

1. Instalar Terraform

Este tema explica cómo instalar Terraform desde un paquete en un sistema operativo Linux o Windows.

Nota

Alibaba Cloud ofrece dos entornos en línea donde puede ejecutar comandos de Terraform sin necesidad de una instalación local:

  1. Terraform Explorer: Haga clic en Initiate Debugging para ejecutar el código de ejemplo de este tema.

  2. Cloud Shell: Copie el código proporcionado en este tema y ejecute los comandos de Terraform directamente en Create resources with Terraform.

  1. Vaya al sitio web oficial de Terraform para descargar el paquete correspondiente a su sistema operativo.

  2. Configure el entorno de ejecución de Terraform.

    Linux

    Ejecute el siguiente comando para extraer el paquete en /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. Extraiga el paquete. Por ejemplo, el directorio de destino es D:\tool\terraform.

    2. En el escritorio, haga clic con el botón derecho en This PC y seleccione Type > Advanced system settings > Environment Variable > System variables/User variables.

    3. Haga clic en Path en System variables o User variables, seleccione Edit > New, introduzca el directorio donde extrajo Terraform (por ejemplo, D:\tool\terraform) y haga clic en OK para completar la configuración.

  3. Ejecute el comando terraform para comprobar la configuración de la ruta.

    terraform

    Si el comando muestra una lista de opciones de Terraform, la instalación se completó correctamente.

    ➜  ~ 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. Configurar la autenticación de Terraform

Antes de utilizar Terraform para gestionar recursos de Alibaba Cloud, debe configurar la autenticación para el proveedor de Alibaba Cloud. Esto permite que Terraform invoque las API necesarias para crear y gestionar su infraestructura.

Nota

Si utiliza Terraform Explorer o Cloud Shell, no necesita configurar la autenticación manualmente. Solo asegúrese de que la cuenta con la que inició sesión tenga permisos para gestionar recursos de VPC y ECS.

Este tema utiliza el AccessKey de un usuario de RAM, almacenado como variable de entorno, para la autenticación:

  1. Dado que una cuenta de Alibaba Cloud tiene permisos completos sobre sus recursos, un AccessKey filtrado representa un alto riesgo de seguridad. Se recomienda utilizar el AccessKey de un usuario de RAM. Para obtener más información sobre cómo crear un AccessKey de usuario de RAM, consulte Create an AccessKey pair.

  2. Al otorgar permisos a un usuario de RAM para gestionar recursos de ECS y VPC, se recomienda seguir el principio de menor privilegio. Para obtener más información sobre cómo otorgar permisos a un usuario de RAM, consulte Manage RAM user permissions. El código de ejemplo en este tema requiere crear recursos como instancias de ECS, VPC y vSwitches. Para ejecutar los ejemplos, puede otorgar los siguientes permisos al usuario de RAM:

    Servicio

    Política

    VPC

    En este ejemplo, seleccione la política del sistema AliyunVPCFullAccess.

    ECS

    En este ejemplo, seleccione la política del sistema AliyunECSFullAccess.

  3. Cree variables de entorno para almacenar sus credenciales de autenticación.

    Linux

    Importante

    Las variables de entorno establecidas con el comando export son temporales y solo duran durante la sesión actual. Para hacerlas permanentes, agregue el comando al archivo de inicio de su 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. En el escritorio, haga clic con el botón derecho en This PC y seleccione Type > Advanced system settings > Environment Variable > System variables/User variables.

    2. En la sección System variables o User variables, haga clic en New para crear las siguientes variables de entorno.

      Variable

      Descripción

      Valor

      ALICLOUD_ACCESS_KEY

      Su AccessKey ID.

      yourAccessKeyID

      ALICLOUD_SECRET_KEY

      Su AccessKey secret.

      yourAccessKeySecret

      ALICLOUD_REGION

      La región donde se desplegarán los recursos.

      Ejemplo: cn-chengdu

Recursos de Terraform relacionados

El código de ejemplo en este tema utiliza los siguientes recursos de Terraform.

Nota

Algunos recursos utilizados en este tutorial generan costos. Para evitar cargos inesperados, elimine los recursos cuando ya no los necesite.

Recurso

Origen de datos

alicloud_zones: Busca zonas disponibles para un tipo de instancia especificado.

Crear un archivo de configuración de Terraform

Defina los recursos de infraestructura necesarios para crear una instancia de ECS, como la propia instancia y una VPC, en un archivo main.tf. Puede copiar el código de la sección Complete sample code en su archivo de configuración.

  1. Cree un archivo de configuración.

    Este archivo, que debe terminar con la extensión .tf, contiene todas las definiciones de sus 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

    Cree una nueva carpeta llamada ecs-quickstart. Dentro de la carpeta, cree un archivo de configuración de Terraform llamado main.tf.

  2. Defina la configuración del proveedor.

    Configure la región para el despliegue de sus recursos de Alibaba Cloud.

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

    Una VPC es una red privada lógicamente aislada en la nube que puede configurar y gestionar.

    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 el security group.

    Un security group actúa como un firewall virtual que controla el tráfico entrante y saliente de su instancia de 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 la instancia de ECS.

    ECS proporciona capacidad de cómputo segura, escalable y de alto rendimiento para diversos escenarios, incluido el despliegue de aplicaciones, el hosting de sitios web y el procesamiento de datos.

    # 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 ejemplo completo

Nota

Puede ejecutar el código de ejemplo con un solo clic. 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]
}

Ejecutar comandos de Terraform

Después de crear el archivo de configuración, ejecute los comandos de Terraform para crear la instancia de ECS.

1. Inicializar Terraform

El comando terraform init descarga e instala el plugin del proveedor de Alibaba Cloud en la carpeta actual y genera varios archivos de registro.

Linux

terraform init

Windows

Abra el Símbolo del sistema (cmd), vaya al directorio que contiene sus archivos de configuración de Terraform y luego ejecute el 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

La siguiente salida indica que la inicialización se completó correctamente.

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. Previsualizar el plan de ejecución

Ejecute terraform plan para realizar las siguientes funciones:

  • Verificar la sintaxis del código de Terraform en main.tf.

  • Previsualizar los recursos que se crearán según el código actual de Terraform.

terraform plan

Si la salida indica que el archivo de configuración de Terraform no tiene errores de sintaxis, puede ejecutar el comando terraform apply para crear los recursos. Si aparecen otros mensajes de error, modifique el archivo de configuración de Terraform de acuerdo con dichos mensajes.

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

3. Aplicar la configuración

Ejecute terraform apply para crear automáticamente la instancia de ECS y sus recursos dependientes, e instalar Python. Cuando se le solicite durante el proceso de creación, introduzca yes para permitir que Terraform cree todos los recursos definidos.

terraform apply

La siguiente salida indica que Terraform ha creado los 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",
]

Conectarse a la instancia de ECS

Una vez creada la instancia, puede conectarse a ella de forma remota mediante SSH utilizando su dirección IP pública. Para obtener más información sobre los métodos de conexión, consulte Connection methods overview.

ssh <username>@<public_ip_address>

Verificar los resultados

Ejecutar un comando de Terraform

Puede ejecutar el siguiente comando para consultar información sobre la instancia de ECS creada.

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

Consultar en la consola

Puede iniciar sesión en la consola de ECS para ver la instancia de ECS creada. Después de ejecutar el código de Terraform, se crea una instancia llamada tf-sample que aparece en estado Running en la página Instances. La instancia se despliega en la Zona de disponibilidad A de la región China (Chengdu). El tipo de instancia es ecs.e-c1m2.large (2 vCPU y 4 GiB de memoria), la dirección IP privada es 172.16.0.100, el método de facturación es pay-as-you-go y el tipo de red es VPC.

Modificar recursos

Si necesita ajustar su configuración, puede modificar las definiciones de recursos en el archivo de configuración. Por ejemplo, puede agregar una nueva regla de entrada al security group.

  1. Para agregar una regla al security group que permita el tráfico entrante en el puerto 443, añada el siguiente código a su archivo de configuración.

    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. Ejecute el comando terraform plan para previsualizar los cambios. La siguiente salida indica que se agregará una regla de security group al grupo con 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. Si los cambios son los esperados, ejecute el comando terraform apply para aplicarlos a su infraestructura. Cuando Terraform le solicite confirmación, escriba yes y presione Enter. El siguiente mensaje indica que se agregó correctamente una nueva regla al security group con 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.

Limpiar recursos

Cuando ya no necesite los recursos, ejecute el siguiente comando para destruirlos.

terraform destroy

La siguiente salida indica que los recursos fueron destruidos.

...
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.

Referencias

  • Para consultar los tipos de Resource y Data Source compatibles con ECS, consulte List of supported resources.

  • Puede utilizar Terraform en Terraform Explorer para depurar código de Terraform sin instalar ni configurar la herramienta.

  • Puede utilizar Terraform en Create resources with Terraform para ejecutar manualmente comandos de Terraform sin instalar ni configurar la herramienta.