Terraform en Azure
Configure el proveedor AzureRM de Terraform, escriba un plan básico de infraestructura y comprenda cuándo conviene preferir Terraform a las herramientas nativas de ARM/Bicep.
Terraform en Azure es una lección gratuita de Azure Fundamentals en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Azure Fundamentals, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Azure Fundamentals incluye 4 lecciones en total.
¿Qué es Terraform y por qué Azure?
Terraform es una herramienta de infraestructura como código de código abierto desarrollada por HashiCorp. A diferencia de Bicep, Terraform es independiente de la nube: una única base de código de Terraform puede administrar recursos en Azure, AWS, GCP y muchos otros proveedores simultáneamente. En Azure, Terraform utiliza el proveedor AzureRM para interactuar con la API de ARM, por lo que es una opción popular para organizaciones multinube.
El proveedor AzureRM de Terraform
El proveedor AzureRM es un complemento que Terraform descarga y utiliza para traducir la configuración de Terraform en llamadas a la API de ARM. HashiCorp y Microsoft se encargan de su mantenimiento, y es la forma oficial de administrar recursos de Azure con Terraform. Configure el proveedor con el ID de su suscripción y el método de autenticación, y después ejecute terraform init para descargarlo.
# main.tf — configure the AzureRM provider
terraform {
required_providers {
azurerm = {
source = 'hashicorp/azurerm'
version = '~> 3.0'
}
}
}
provider 'azurerm' {
features {}
subscription_id = var.subscription_id
}Estructura de archivos de Terraform
Un proyecto típico de Terraform para Azure se divide en varios archivos .tf: main.tf contiene las declaraciones de recursos, variables.tf define las variables de entrada, outputs.tf define los valores de salida y terraform.tfvars proporciona los valores de las variables para un entorno específico. Terraform carga automáticamente todos los archivos .tf del directorio actual, por lo que dividir el proyecto en varios archivos sirve únicamente para mejorar la legibilidad.
# variables.tf
variable 'resource_group_name' {
description = 'Name of the resource group'
type = string
default = 'my-rg'
}
variable 'location' {
description = 'Azure region'
type = string
default = 'eastus'
}Declarar recursos de Azure
En Terraform, los recursos de Azure se declaran mediante bloques resource. El tipo de bloque es resource, seguido del tipo de recurso de AzureRM (por ejemplo, 'azurerm_resource_group') y de un nombre local utilizado para hacer referencia a él dentro de la configuración. Los nombres de las propiedades en Terraform usan snake_case en lugar de camelCase o PascalCase, que son los formatos utilizados en ARM JSON.
# main.tf — create a resource group and storage account
resource 'azurerm_resource_group' 'main' {
name = var.resource_group_name
location = var.location
}
resource 'azurerm_storage_account' 'storage' {
name = 'mystorageaccount'
resource_group_name = azurerm_resource_group.main.name
location = azurerm_resource_group.main.location
account_tier = 'Standard'
account_replication_type = 'LRS'
tags = {
environment = 'dev'
}
}Flujo de trabajo de Terraform: Init, Plan, Apply
El flujo de trabajo principal de Terraform consta de tres pasos. terraform init descarga el proveedor AzureRM y configura el backend. terraform plan compara la configuración con el estado actual y muestra las diferencias de lo que se creará, modificará o destruirá, de forma similar al comando what-if de ARM. terraform apply ejecuta el plan y actualiza Azure para que coincida con la configuración.
# Step 1: Initialise the project and download providers
terraform init
# Step 2: Preview changes (shows + create, ~ update, - destroy)
terraform plan -out=tfplan
# Step 3: Apply the plan
terraform apply tfplan
# Destroy all managed resources
terraform destroyEstado de Terraform
Terraform mantiene un archivo de estado (terraform.tfstate) que registra el estado actual de todos los recursos administrados y los vincula con la configuración. Este archivo permite a Terraform detectar diferencias entre lo configurado y lo que existe en Azure. En entornos de equipo, almacene el estado de forma remota en una Azure Storage Account (un backend de Terraform) para que todos los miembros del equipo compartan el mismo archivo de estado.
# Configure remote state in Azure Blob Storage
terraform {
backend 'azurerm' {
resource_group_name = 'tfstate-rg'
storage_account_name = 'tfstateaccount'
container_name = 'tfstate'
key = 'prod.terraform.tfstate'
}
}Autenticación en Azure con Terraform
Terraform admite varios métodos de autenticación para Azure. Durante el desarrollo local, use az login (autenticación de Azure CLI); Terraform detectará las credenciales automáticamente. En las canalizaciones de CI/CD, use una Service Principal con un secreto de cliente o un certificado, proporcionado mediante variables de entorno. Para agentes o máquinas virtuales hospedados en Azure, use una Managed Identity para obtener la autenticación más segura y sin secretos.
# Option 1: Azure CLI (local dev)
az login
terraform plan
# Option 2: Service principal via environment variables
export ARM_CLIENT_ID='00000000-0000-0000-0000-000000000000'
export ARM_CLIENT_SECRET='your-client-secret'
export ARM_SUBSCRIPTION_ID='00000000-0000-0000-0000-000000000000'
export ARM_TENANT_ID='00000000-0000-0000-0000-000000000000'
terraform planMódulos de Terraform para reutilización
Al igual que los módulos de Bicep, los módulos de Terraform permiten empaquetar y reutilizar patrones de infraestructura. Un módulo es un directorio que contiene archivos .tf. Puede hacer referencia a él mediante un bloque module, pasar entradas a través de variables y utilizar sus salidas. El Terraform Registry aloja cientos de módulos de Azure creados por la comunidad y verificados que puede utilizar directamente, como el módulo de red de AzureRM.
# Use a module from the Terraform Registry
module 'vnet' {
source = 'Azure/vnet/azurerm'
version = '4.0.0'
resource_group_name = azurerm_resource_group.main.name
vnet_location = azurerm_resource_group.main.location
use_for_each = true
address_space = ['10.0.0.0/16']
subnet_prefixes = ['10.0.1.0/24', '10.0.2.0/24']
subnet_names = ['web', 'app']
}Cuándo elegir Terraform frente a Bicep
Elija Bicep cuando su organización utilice únicamente Azure y desee la integración más estrecha con las nuevas funcionalidades de Azure (Bicep incorpora compatibilidad con nuevos tipos de recursos desde el primer día). Elija Terraform cuando administre recursos en varios proveedores de nube, necesite un amplio ecosistema de módulos de la comunidad o prefiera la sintaxis HCL y el conjunto de herramientas de HashiCorp. Ambas opciones son válidas para implementaciones exclusivamente en Azure; a menudo, la preferencia de la organización es el factor decisivo.
Importar recursos existentes
Si ya había recursos en Azure antes de empezar a utilizar Terraform, puede incorporarlos a la administración de Terraform mediante terraform import. Este comando obtiene el estado actual del recurso y lo agrega al archivo de estado de Terraform. Después de importarlo, debe escribir manualmente el bloque de configuración correspondiente para que coincida con el recurso importado y, a continuación, ejecutar terraform plan para confirmar que no existen diferencias.
# Import an existing resource group into Terraform state
terraform import \
azurerm_resource_group.main \
'/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/existing-rg'
# Terraform 1.5+ supports import blocks in configuration
import {
to = azurerm_resource_group.main
id = '/subscriptions/00000000.../resourceGroups/existing-rg'
}Prácticas recomendadas de Terraform en Azure
Siga estas prácticas recomendadas para Terraform en Azure: almacene el estado de forma remota en Azure Blob Storage con el bloqueo de estado habilitado, use espacios de trabajo o archivos de estado independientes para los distintos entornos, no confirme nunca secretos en el control de código fuente; utilice fuentes de datos de Azure Key Vault en su lugar, fije las versiones de los proveedores para evitar cambios incompatibles y ejecute Terraform en una canalización de CI/CD (Azure Pipelines o GitHub Actions) con pasos de aprobación del plan.
Comprobación rápida
Compruebe su comprensión de los conceptos de Microsoft Azure Fundamentals (AZ-900) tratados en esta lección.
Resumen de la lección
En esta lección ha aprendido que Terraform es una herramienta de IaC independiente de la nube que utiliza el proveedor AzureRM para administrar recursos de Azure; el flujo de trabajo init, plan, apply permite realizar implementaciones seguras y predecibles; y el estado remoto en Azure Blob Storage es esencial para la colaboración en equipo. A continuación, exploraremos la creación de planes de App Service y Web Apps.
Preguntas frecuentes
¿La lección «Terraform en Azure» es gratis?
Sí — el texto completo de «Terraform en Azure» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Azure Fundamentals, actualiza a CoddyKit PRO. El curso de Azure Fundamentals incluye 4 lecciones en total.
¿Qué aprenderé en «Terraform en Azure»?
Configure el proveedor AzureRM de Terraform, escriba un plan básico de infraestructura y comprenda cuándo conviene preferir Terraform a las herramientas nativas de ARM/Bicep. Practicas Azure Fundamentals con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Azure Fundamentals?
No se requiere experiencia previa. Azure Fundamentals en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Terraform en Azure»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Azure Fundamentals?
Sí. Cada lección de Azure Fundamentals incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Cómo funciona Azure Resource Manager
- Redacción de plantillas de ARM
- Bicep: IaC moderna para Azure
- Terraform en Azure