Escenario 01: Migración LAMP a Azure IaaS
📋 Definición del Proyecto
Sección titulada «📋 Definición del Proyecto»Contexto de Negocio: Como parte de una iniciativa de modernización, se requiere migrar una carga de trabajo web legacy (Stack LAMP) a la nube pública. El objetivo es reducir la sobrecarga operativa del hardware físico manteniendo el control total sobre la configuración del sistema operativo.
Requisitos Técnicos:
- Aislamiento de Recursos: Implementación de un Grupo de Recursos dedicado para la gestión del ciclo de vida.
- Seguridad de Red: Segmentación mediante VNET y filtrado de tráfico estricto (NSG) permitiendo únicamente HTTP (80) y SSH (22).
- Eficiencia de Cómputo: Aprovisionamiento de instancia
Standard_B1s(Burstable) sobre Ubuntu 22.04 LTS. - Automatización (Infrastructure as Code): El aprovisionamiento debe ser desatendido, utilizando Cloud-Init para la configuración del stack de software en el primer arranque.
🔧 Procedimiento de Implementación (Azure CLI)
Sección titulada «🔧 Procedimiento de Implementación (Azure CLI)»Ejecución mediante az cli para garantizar la reproducibilidad y auditabilidad del despliegue.
-
Definición de Variables de Entorno
Estandarización de nomenclaturas para recursos.
Ventana de terminal RG_NAME="rg-lamp-migration-001"LOCATION="northeurope"VM_NAME="vm-web-legacy-01"VNET_NAME="vnet-prod-01"NSG_NAME="nsg-web-public" -
Creación del Contenedor Lógico
Ventana de terminal az group create --name $RG_NAME --location $LOCATION -
Configuración de Bootstrapping (Cloud-Init)
Definición del estado deseado del sistema operativo. Este manifiesto instala dependencias y genera archivos de prueba automáticamente.
cloud-init-lamp.txt #cloud-configpackage_upgrade: truepackages:- apache2- php- libapache2-mod-php- mysql-server- php-mysqlwrite_files:- content: |<?php phpinfo(); ?>path: /var/www/html/info.phpruncmd:- systemctl restart apache2- systemctl enable apache2 -
Despliegue de Infraestructura
Comando atómico que aprovisiona red, seguridad, IP pública y cómputo, inyectando la configuración de Cloud-Init.
Ventana de terminal az vm create \--resource-group $RG_NAME \--name $VM_NAME \--image Ubuntu2204 \--admin-username azureuser \--generate-ssh-keys \--public-ip-sku Standard \--size Standard_B1s \--custom-data @cloud-init-lamp.txt \--nsg $NSG_NAME -
Hardening de Red (NSG)
Configuración explícita de reglas de entrada para permitir tráfico web.
Ventana de terminal az network nsg rule create \--resource-group $RG_NAME \--nsg-name $NSG_NAME \--name Allow-HTTP \--protocol Tcp \--priority 100 \--destination-port-range 80 \--access Allow -
Verificación de Servicio
Validación de la disponibilidad del endpoint público.
Ventana de terminal IP_ADDRESS=$(az vm show -d -g $RG_NAME -n $VM_NAME --query publicIps -o tsv)echo "Endpoint disponible en: http://$IP_ADDRESS/info.php"
🔍 Decisión de Diseño
Sección titulada «🔍 Decisión de Diseño»¿Por qué Cloud-Init para este escenario?
Sección titulada «¿Por qué Cloud-Init para este escenario?»Para despliegues de instancias únicas o imágenes base, Cloud-Init es el estándar de la industria “Cloud-Native”. Elimina la necesidad de un servidor de configuración externo (como Ansible Tower) para el bootstrap inicial, reduciendo la complejidad y el tiempo de arranque (RTO).