Configurando Azure Container Apps: Simplifica la Ejecución de Microservicios y Contenedores
Descubre Azure Container Apps, la plataforma ideal para ejecutar microservicios y aplicaciones basadas en contenedores sin gestionar la infraestructura subyacente. Este tutorial te guiará desde la configuración inicial hasta el despliegue de tu primera aplicación, cubriendo escalado, revisiones y gestión de secretos.
Azure Container Apps es un servicio totalmente administrado que permite ejecutar microservicios y aplicaciones basadas en contenedores en una plataforma serverless. Combina las capacidades de Kubernetes, Dapr y KEDA, ofreciéndote una experiencia simplificada para construir y escalar tus soluciones en la nube sin la complejidad de gestionar clusters de Kubernetes directamente.
Este tutorial te proporcionará una guía completa para entender y utilizar Azure Container Apps, desde sus conceptos fundamentales hasta el despliegue de una aplicación real, incluyendo la configuración de escalado, revisiones y gestión de secretos. ¡Prepárate para simplificar tu estrategia de contenedores en Azure! 🚀
¿Qué es Azure Container Apps? 🤔
Azure Container Apps es un servicio PaaS (Platform as a Service) que abstrae la complejidad de Kubernetes, permitiéndote centrarte en el código de tu aplicación. Está diseñado para cargas de trabajo específicas como:
- Microservicios basados en APIs.
- Aplicaciones controladas por eventos.
- Procesamiento de datos.
- Aplicaciones web.
Utiliza un plano de control basado en Kubernetes, pero expone una interfaz simplificada para el usuario. Esto significa que puedes beneficiarte del ecosistema de Kubernetes (escalado automático con KEDA, patrones de microservicios con Dapr) sin ser un experto en operaciones de Kubernetes.
Características Clave de Azure Container Apps ✨
- Serverless: Pagas solo por los recursos que consumes. No hay máquinas virtuales que gestionar.
- Escalado automático: Basado en HTTP, eventos, colas o CPU/memoria, gracias a KEDA.
- Revisones: Despliegues inmutables y la capacidad de gestionar múltiples versiones de tu aplicación simultáneamente.
- Gestión de tráfico: División de tráfico entre diferentes revisiones para despliegues canary o blue-green.
- Dapr integrado: Facilita la construcción de microservicios con funcionalidades como Service Discovery, Pub/Sub, State Management, entre otros.
- Ingress HTTP: Soporte para llamadas HTTP internas y externas.
- Entornos: Agrupa Container Apps y otros recursos dentro de un límite de red virtual y configura opciones comunes.
Requisitos Previos 🛠️
Antes de empezar, asegúrate de tener lo siguiente:
- Una suscripción activa de Azure.
- Azure CLI instalado y configurado. Puedes verificarlo con
az --version. - Docker Desktop (o un equivalente) si quieres probar la imagen de tu contenedor localmente.
- Un editor de código como Visual Studio Code.
1. Configurando tu Entorno de Azure 🚀
El primer paso es configurar el entorno en Azure. Esto implica iniciar sesión, crear un grupo de recursos y registrar el proveedor de recursos de Container Apps.
1.1. Iniciar Sesión en Azure CLI
Abre tu terminal o símbolo del sistema y ejecuta:
az login
Sigue las instrucciones en el navegador para autenticarte.
1.2. Crear un Grupo de Recursos
Un grupo de recursos es un contenedor lógico para tus recursos de Azure. Crea uno nuevo para este tutorial:
az group create --name my-container-apps-rg --location eastus
Reemplaza my-container-apps-rg por un nombre de grupo de recursos que prefieras y eastus por tu región más cercana.
1.3. Registrar el Proveedor de Recursos de Container Apps
Aunque a menudo se registra automáticamente, es una buena práctica asegurar que el proveedor de recursos esté registrado:
az provider register --namespace Microsoft.App
Esto puede tardar unos minutos en completarse.
2. Creando un Entorno de Azure Container Apps 🏗️
El entorno de Azure Container Apps es el límite seguro de tu aplicación. Contiene una o más Container Apps y es donde se gestionan los recursos de red y configuración compartida. Cada entorno tiene un Log Analytics Workspace asociado para la monitorización.
2.1. Crear un Log Analytics Workspace
Primero, crea un Log Analytics Workspace. Este espacio de trabajo se utiliza para recopilar y analizar los logs de tu Container Apps.
az monitor log-analytics workspace create \
--resource-group my-container-apps-rg \
--name my-container-apps-logs \
--location eastus
2.2. Crear el Entorno de Container Apps
Ahora, crea el entorno principal. Utilizaremos el Log Analytics Workspace que acabamos de crear.
LOG_ANALYTICS_WORKSPACE_ID=$(az monitor log-analytics workspace show --resource-group my-container-apps-rg --name my-container-apps-logs --query id --output tsv)
az containerapp env create \
--name my-container-apps-env \
--resource-group my-container-apps-rg \
--location eastus \
--logs-workspace-id $LOG_ANALYTICS_WORKSPACE_ID \
--logs-workspace-key $(az monitor log-analytics workspace get-shared-keys --resource-group my-container-apps-rg --name my-container-apps-logs --query primarySharedKey --output tsv)
3. Desplegando tu Primera Container App 👋
Ahora que tenemos el entorno configurado, vamos a desplegar una aplicación de ejemplo. Usaremos una imagen de contenedor de ejemplo predefinida para empezar rápidamente.
3.1. Elegir una Imagen de Contenedor
Para este ejemplo, utilizaremos una imagen simple de un servidor web Nginx. En un escenario real, aquí usarías tu propia imagen de aplicación.
3.2. Desplegar la Container App
Vamos a desplegar la aplicación en el entorno que creamos. Definiremos un puerto de entrada y habilitaremos el ingress externo para que sea accesible desde internet.
az containerapp create \
--name my-first-container-app \
--resource-group my-container-apps-rg \
--environment my-container-apps-env \
--image mcr.microsoft.com/azuredocs/containerapps-helloworld:latest \
--target-port 80 \
--ingress external \
--query properties.configuration.ingress.fqdn
Después de ejecutar este comando, Azure Container Apps realizará las siguientes acciones:
- Descargará la imagen del contenedor especificada (
mcr.microsoft.com/azuredocs/containerapps-helloworld:latest). - Creará una revisión inicial de la aplicación.
- Asignará un dominio (FQDN) público para el ingress.
El comando devolverá el FQDN de tu aplicación. Ábrelo en tu navegador y deberías ver un mensaje de "Hello from Container Apps!".
¿Qué es una Revisión (Revision)?
Una revisión es una instantánea inmutable de una versión de tu Container App. Cada vez que realizas un cambio en la configuración (como la imagen del contenedor, variables de entorno, etc.), se crea una nueva revisión. Esto permite despliegues controlados y la capacidad de revertir fácilmente a versiones anteriores.4. Gestión de Escalado y Revisones 📈🔄
Una de las mayores ventajas de Azure Container Apps es su capacidad de escalado automático y la gestión de revisiones, lo que facilita los despliegues y la resiliencia.
4.1. Configuración de Escalado Automático
Azure Container Apps utiliza KEDA (Kubernetes Event-Driven Autoscaling) para el escalado. Puedes configurar reglas de escalado basadas en HTTP, colas, métricas de CPU/memoria y muchos otros tipos de eventos.
Vamos a configurar un escalado basado en concurrencia HTTP. Supongamos que queremos que nuestra aplicación escale si la concurrencia (número de peticiones simultáneas) excede un umbral.
az containerapp update \
--name my-first-container-app \
--resource-group my-container-apps-rg \
--environment my-container-apps-env \
--min-replicas 1 \
--max-replicas 5 \
--scale-rule-name http-scale \
--scale-rule-type http \
--scale-rule-http-concurrency 50
En este ejemplo:
--min-replicas 1: La aplicación siempre tendrá al menos una instancia en ejecución.--max-replicas 5: La aplicación puede escalar hasta un máximo de cinco instancias.--scale-rule-name http-scale: Nombre de la regla de escalado.--scale-rule-type http: Tipo de regla de escalado (basada en HTTP).--scale-rule-http-concurrency 50: Si cada réplica recibe más de 50 peticiones concurrentes, el sistema escalará.
4.2. Creando una Nueva Revisión
Supongamos que queremos actualizar nuestra aplicación a una nueva versión de la imagen del contenedor. Esto creará una nueva revisión.
Para este ejemplo, usaremos otra imagen de helloworld que es ligeramente diferente.
az containerapp update \
--name my-first-container-app \
--resource-group my-container-apps-rg \
--environment my-container-apps-env \
--image mcr.microsoft.com/azuredocs/containerapps-helloworld:v2
Después de ejecutar este comando, se creará una nueva revisión. Por defecto, todo el tráfico se dirigirá automáticamente a la nueva revisión. Puedes listar las revisiones para ver el estado:
az containerapp revision list \
--name my-first-container-app \
--resource-group my-container-apps-rg \
--query '[].{RevisionName:name, ProvisioningState:properties.provisioningState, Active:properties.active, TrafficWeight:properties.trafficWeight}' -o table
Verás una tabla similar a esta:
| RevisionName | ProvisioningState | Active | TrafficWeight |
|---|---|---|---|
| --- | --- | --- | --- |
| my-first-container-app--xxxxxxxx | Succeeded | True | 100 |
| my-first-container-app--yyyyyyyy | Succeeded | False | 0 |
Donde xxxxxxxx es la nueva revisión activa y yyyyyyyy es la revisión anterior.
4.3. División de Tráfico y Despliegues Canary
Azure Container Apps permite dividir el tráfico entre diferentes revisiones. Esto es ideal para despliegues canary, donde se envía un pequeño porcentaje de usuarios a la nueva versión para probarla antes de un despliegue completo.
Vamos a dividir el tráfico 50/50 entre la revisión original (v1) y la nueva (v2). Primero, necesitarás los nombres completos de tus revisiones. Puedes obtenerlos con el comando az containerapp revision list anterior.
# Asume que $REVISION_NAME_V1 y $REVISION_NAME_V2 son los nombres de tus revisiones
REVISION_NAME_V1="my-first-container-app--xxxxxxxx"
REVISION_NAME_V2="my-first-container-app--yyyyyyyy"
az containerapp ingress traffic set \
--name my-first-container-app \
--resource-group my-container-apps-rg \
--environment my-container-apps-env \
--traffic-weights "$REVISION_NAME_V1=50" "$REVISION_NAME_V2=50"
Ahora, si accedes repetidamente al FQDN de tu aplicación, verás que las respuestas alternan entre la versión original y la v2 (si ambas versiones son visualmente distinguibles). Una vez que estés satisfecho con la nueva versión, puedes dirigir el 100% del tráfico a la revisión v2 y desactivar la v1.
az containerapp ingress traffic set \
--name my-first-container-app \
--resource-group my-container-apps-rg \
--environment my-container-apps-env \
--traffic-weights "$REVISION_NAME_V2=100"
az containerapp revision deactivate \
--name my-first-container-app \
--resource-group my-container-apps-rg \
--environment my-container-apps-env \
--revision $REVISION_NAME_V1
5. Gestión de Secretos y Variables de Entorno 🔐
Las aplicaciones a menudo necesitan acceder a información sensible, como cadenas de conexión a bases de datos o claves API. Azure Container Apps proporciona una forma segura de gestionar secretos.
5.1. Variables de Entorno
Para información no sensible, puedes usar variables de entorno directamente:
az containerapp update \
--name my-first-container-app \
--resource-group my-container-apps-rg \
--environment my-container-apps-env \
--set-env-vars "APP_MODE=production" "DEBUG_LOGS=false"
5.2. Gestión de Secretos
Para información sensible, debes usar secretos. Los secretos se inyectan en tu contenedor como variables de entorno, pero se almacenan de forma segura y no son visibles en la configuración de la aplicación.
Primero, define un secreto:
az containerapp secret set \
--name my-first-container-app \
--resource-group my-container-apps-rg \
--secrets my-db-password="YourSecurePassword123!" \
--environment my-container-apps-env
Luego, haz referencia a este secreto en las variables de entorno de tu aplicación. Ten en cuenta que esto creará una nueva revisión.
az containerapp update \
--name my-first-container-app \
--resource-group my-container-apps-rg \
--environment my-container-apps-env \
--set-env-vars "DB_PASSWORD=secretref:my-db-password"
Ahora, dentro de tu aplicación, podrás acceder al valor de my-db-password a través de la variable de entorno DB_PASSWORD.
6. Monitorización y Logs 📊
La monitorización es crucial para entender el comportamiento de tu aplicación. Azure Container Apps se integra con Azure Monitor y Log Analytics.
Todos los logs de tus contenedores y del propio sistema de Container Apps se envían al Log Analytics Workspace que configuramos al principio.
6.1. Consultar Logs con Azure CLI
Puedes obtener los logs de tus aplicaciones directamente desde la CLI (útil para depuración rápida):
az containerapp logs show \
--name my-first-container-app \
--resource-group my-container-apps-rg \
--environment my-container-apps-env \
--tail 20
El parámetro --tail 20 muestra las últimas 20 líneas de log. También puedes usar --follow para ver los logs en tiempo real.
6.2. Consultar Logs en Azure Portal
Para un análisis más profundo, ve al Azure Portal, navega a tu Log Analytics Workspace y usa Kusto Query Language (KQL) para consultar los logs. Las tablas relevantes son ContainerAppConsoleLogs_CL para los logs de la consola de tu aplicación y ContainerAppSystemLogs_CL para logs del sistema.
Ejemplo de consulta KQL:
ContainerAppConsoleLogs_CL
| where ContainerAppName_s == "my-first-container-app"
| order by TimeGenerated desc
| limit 50
Esto te mostrará los 50 últimos logs de consola de tu aplicación.
7. Limpieza de Recursos 🗑️
Para evitar cargos innecesarios, es importante eliminar los recursos de Azure que no necesites.
El método más sencillo es eliminar el grupo de recursos completo que creamos al principio. Esto eliminará todas las Container Apps, entornos y el Log Analytics Workspace dentro de él.
az group delete --name my-container-apps-rg --yes --no-wait
El parámetro --yes confirma la eliminación y --no-wait permite que el comando se ejecute en segundo plano mientras puedes cerrar la terminal.
Conclusión ✅
En este tutorial, hemos cubierto los fundamentos de Azure Container Apps, desde la configuración inicial hasta el despliegue de una aplicación, gestión de escalado, revisiones y secretos. Has aprendido cómo esta plataforma serverless te permite ejecutar tus microservicios y contenedores con una complejidad reducida, beneficiándote de las potentes capacidades de escalado y gestión de tráfico.
Azure Container Apps es una excelente opción para equipos que buscan la agilidad de los contenedores y los microservicios sin la sobrecarga operativa de Kubernetes. ¡Esperamos que este tutorial te sirva como punto de partida para tus proyectos en Azure! ¡Feliz despliegue! 🚀
Tutoriales relacionados
- Gestionando Contenedores con Azure Kubernetes Service (AKS): Orquestación de Microserviciosintermediate25 min
- Protege tu Red con Azure Bastion: Acceso Seguro y Simplificado a VMsintermediate20 min
- Optimización de Costos en Azure: Estrategias Efectivas y Herramientas Esencialesintermediate18 min
- Asegurando tu Infraestructura con Azure Firewall: Implementación y Configuración Avanzadaintermediate15 min
- Migrando Bases de Datos a Azure SQL Database: Guía Paso a Paso para una Transición Exitosaintermediate25 min
Comentarios (0)
Aún no hay comentarios. ¡Sé el primero!