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.
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.
Alibaba Cloud ofrece dos entornos en línea donde puede ejecutar comandos de Terraform sin necesidad de una instalación local:
Terraform Explorer: Haga clic en Initiate Debugging para ejecutar el código de ejemplo de este tema.
Cloud Shell: Copie el código proporcionado en este tema y ejecute los comandos de Terraform directamente en Create resources with Terraform.
Vaya al sitio web oficial de Terraform para descargar el paquete correspondiente a su sistema operativo.
-
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/binWindows
Extraiga el paquete. Por ejemplo, el directorio de destino es D:\tool\terraform.
En el escritorio, haga clic con el botón derecho en This PC y seleccione .
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.
-
Ejecute el comando
terraformpara comprobar la configuración de la ruta.terraformSi 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.
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:
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.
-
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.
-
Cree variables de entorno para almacenar sus credenciales de autenticación.
Linux
ImportanteLas variables de entorno establecidas con el comando
exportson 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
En el escritorio, haga clic con el botón derecho en This PC y seleccione .
-
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.
Algunos recursos utilizados en este tutorial generan costos. Para evitar cargos inesperados, elimine los recursos cuando ya no los necesite.
Recurso
alicloud_vpc: crea una VPC.
alicloud_vswitch: crea un vSwitch.
alicloud_security_group: crea un security group.
alicloud_security_group_rule: crea una regla de security group.
alicloud_instance: crea una instancia de ECS.
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.
-
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.tfWindows
Cree una nueva carpeta llamada
ecs-quickstart. Dentro de la carpeta, cree un archivo de configuración de Terraform llamado main.tf. -
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 } -
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 } -
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" } -
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
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.
-
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" } -
Ejecute el comando
terraform planpara previsualizar los cambios. La siguiente salida indica que se agregará una regla de security group al grupo con IDsg-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. -
Si los cambios son los esperados, ejecute el comando
terraform applypara aplicarlos a su infraestructura. Cuando Terraform le solicite confirmación, escribayesy presione Enter. El siguiente mensaje indica que se agregó correctamente una nueva regla al security group con IDsg-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
ResourceyData Sourcecompatibles 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.