Problema
Los ingenieros recién contratados en equipos de DevOps suelen recibir una lista de tecnologías sin saber por dónde empezar. La presión es alta: se espera que automatices despliegues, mantengas pipelines y entregues infraestructura reproducible en pocos meses. Sin una hoja de ruta clara, el aprendizaje se vuelve caótico y el rendimiento inicial sufre.
Causa
- Expectativas amplias y poco definidas – Los managers suelen mencionar “automatizar todo” sin especificar herramientas.
- Superposición de conceptos – CI/CD, IaC y scripting se presentan como bloques independientes, aunque en la práctica se solapan.
- Falta de experiencia práctica – La mayoría de los recién graduados solo ha jugado con Kubernetes en laboratorio; carecen de exposición a entornos corporativos (Azure, PowerShell, Azure DevOps).
- Entorno de contrato corto – Con tres meses para demostrar valor, no hay tiempo para explorar tecnologías marginales.
Solución
Adoptar un enfoque por capas que combine infraestructura como código (IaC), automatización de procesos (scripting) y orquestación de pipelines (CI/CD). Cada capa tiene una herramienta principal que cubre la mayor parte de los casos reales:
| Capa | Herramienta principal | Por qué |
|---|---|---|
| IaC | Terraform | Proveedor multi‑cloud, sintaxis declarativa, fácil de versionar. |
| Scripting | PowerShell (para Windows/Azure) | Integrado en Azure, acceso a módulos de AzureRM y Az, ideal para tareas ad‑hoc. |
| CI/CD | Azure DevOps Pipelines | Soporta YAML, se integra nativamente con repositorios Git y Azure Resource Manager. |
Paso 1: Domina Terraform
- Instala y configura el CLI.
- Aprende la estructura de un proyecto:
main.tf,variables.tf,outputs.tf,terraform.tfvars. - Practica con el provider
azurerm: crea un resource group, una red virtual y una máquina virtual. - Versiona con Git y usa
terraform fmt/terraform validateen cada commit.
Paso 2: Automatiza con PowerShell
- Familiarízate con los módulos
Az(Install-Module -Name Az -Scope CurrentUser). - Escribe funciones reutilizables que reciban parámetros y devuelvan objetos.
- Integra scripts en pipelines mediante la tarea
PowerShell@2de Azure DevOps.
Paso 3: Construye pipelines en Azure DevOps
- Crea un repositorio Git y habilita la rama
main. - Define un pipeline YAML que ejecute
terraform init,planyapplyen etapas separadas. - Añade un job de PowerShell para tareas post‑deploy (configuración de DNS, validaciones).
- Configura políticas de rama (pull request, revisiones, build obligatorio).
Paso 4: Cierra el bucle con pruebas y observabilidad
- Usa Terraform
plancomo prueba de idempotencia. - Añade tests de PowerShell Pester para validar scripts.
- Configura Azure Monitor y Log Analytics para observar cambios de infraestructura.
Cuándo aplicar esta solución
- Entornos Azure: la combinación de Terraform + Az PowerShell + Azure DevOps cubre el 80 % de los casos.
- Plazos cortos (1‑3 meses): la curva de aprendizaje de Terraform y PowerShell es rápida comparada con herramientas más complejas.
- Equipos que ya usan Git: la integración nativa de Azure DevOps con repositorios Git facilita la adopción.
No es adecuada si:
- La infraestructura está totalmente en AWS o GCP (cambia el provider y el CLI de scripting).
- El proyecto requiere herramientas de orquestación de contenedores avanzadas (por ejemplo, Argo CD) sin soporte directo en Azure DevOps.
Código
# terraform/main.tf – ejemplo mínimo de Azure VM
terraform {
required_version = ">= 1.0"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~>3.0"
}
}
}
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "rg" {
name = "rg-devops-demo"
location = "East US"
}
resource "azurerm_virtual_network" "vnet" {
name = "vnet-demo"
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
}
# scripts/Set-AzVmExtension.ps1 – PowerShell para agregar una extensión
param(
[Parameter(Mandatory)] [string] $ResourceGroup,
[Parameter(Mandatory)] [string] $VmName,
[Parameter(Mandatory)] [string] $ExtensionName,
[Parameter(Mandatory)] [string] $Publisher,
[Parameter(Mandatory)] [string] $Type,
[Parameter(Mandatory)] [string] $Version
)
Import-Module Az.Compute
$null = Set-AzVMExtension `
-ResourceGroupName $ResourceGroup `
-VMName $VmName `
-Name $ExtensionName `
-Publisher $Publisher `
-ExtensionType $Type `
-TypeHandlerVersion $Version `
-Location (Get-AzResourceGroup -Name $ResourceGroup).Location
Verificación
-
Terraform
- Ejecuta
terraform init && terraform plan. - Asegúrate de que el plan muestre solo recursos nuevos o modificados esperados.
- Corre
terraform apply -auto-approvey verifica en el portal Azure que el resource group y la VNet existan.
- Ejecuta
-
PowerShell
- Ejecuta
.\Set-AzVmExtension.ps1 -ResourceGroup rg-devops-demo -VmName myVM -ExtensionName CustomScript -Publisher Microsoft.Compute -Type CustomScriptExtension -Version 1.10. - Confirma en Azure que la extensión aparece bajo la VM.
- Ejecuta
-
Pipeline
- Commitea los archivos y abre un Pull Request.
- Azure DevOps debe disparar el pipeline, pasar todas las etapas y dejar el entorno desplegado.
Notas adicionales
- Estado remoto: usa Azure Storage como backend para Terraform (
azurermbackend) y evita conflictos cuando varios miembros editan la infraestructura. - Variables sensibles: almacena claves y contraseñas en Azure Key Vault y referencia los secretos en el pipeline mediante la tarea
AzureKeyVault@2. - Reutilización: crea módulos Terraform (
modules/network,modules/vm) para que el código sea escalable y fácil de versionar. - Documentación ligera: incluye un
README.mden cada carpeta de módulo con ejemplos de uso; el tiempo invertido ahorra revisiones posteriores. - Iteración rápida: en entornos de prueba, habilita
-targeten Terraform para aplicar cambios parciales y validar scripts sin destruir toda la infraestructura.
Con este enfoque estructurado, un ingeniero junior puede demostrar valor en semanas, no en meses, y sentar las bases para una carrera sólida en DevOps.