Saltar a contenido

¿Qué es ACA?

Es un servicio de Microsoft Azure que sirve para ejecutar aplicaciones en contenedores (como Docker) sin tener que gestionar servidores.

  • Usa contenedores (Docker)
  • Es serverless --> no gestiona servidores
  • Escala automáticamente (más o menos instancias según tráfico)
  • Está basado internamente en kubernetes (pero no lo vemos)

Desplegar web en ACA

Tarea

Tenemos q acabar con:

  • una web simple en contenedor
  • una imagen Docker
  • un Azure Container Registry (ACR)
  • una Azure Container App (ACA)
  • revisiones y actualización funcionando

1. Crear una web simple para contenedor


1.1 Crear la estructura del proyecto.

Crearemos la carpeta del proyecto

mkdir aca-practica
cd aca-practica

1.2 Creamos el archivo HTML.

Creamos index.html, podemos hacerlo con touch.

Y añadimos el siguiente contenido:

index.html
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Mi Web ACA</title>
</head>
<body>
    <h1>Hola Mundo desde Azure Container Apps</h1>
    <p> Primera práctica con contenedores en Azure.</p>
</body>
</html>

1.3 Crear el Dockerfile.

Creamos Dockerfile también con touch.

Para evitar fallos debemos escribir 'Dockerfile' con D mayúscula

En el caso de que no lo escribamos así, podemos posteriormente, construir la imagen escribiendo el siguiente comando con opción -f que especifica cual es el fichero dockerfile:

    docker build -t algo.azurecr.io/1.0.0 -f /carpeta/dockerfile .
Imagen del posible fallo:

fallo dockerfile

y escribimos lo siguiente:

Dockerfile
FROM nginx:alpine

COPY index.html /usr/share/nginx/html/index.html

EXPOSE 80

2. Crear Azure Container Registry (ACR)


2.1 Crear Resource Group.

Esta vez lo vamos a crear por terminal que no lo hemos hecho antes, para ello lo que vamos a hacer es:ç

  • Acceder a la terminal
      az login
    

Te aparecerá para hacer login

  • Crear el grupo de recursos
  az group create \
      --name recursos-practica-aca \
      --location westeurope
Imagen

crear rg


2.2 Crear Azure Container Registry.

Podemos hacerlo por comandos o por gráfico

Escribimos en la terminal:

    az acr create \
        --resource-group recursos-practica-aca \
        --name ACRpracticaACA \
        --sku Basic

Eso de 'sku basic' es Stock Keeping Unit que significa "categoría de precio y capacidades de un servicio"

Existen:

  • 🟢 Basic:

    • Más barato
    • Ideal apra pruebas y ejercicios
    • Capacidad sufiiente para imágenes pequeñas/medianas
    • Menor rendimiento y características limitadas
  • 🔵 Standard:

    • Más rendimiento
    • Más almacenamiento y throughoput
    • Mejor par equipos pequeños o proyectos reales
  • 🔴 Premium:

    • Alta disponibilidad
    • Geo-replicación (varias regiones)
    • Seguridad avanzada (Private Link, firewall más completo)
    • Pensado para empresas

Buscaremos "Containers Registries" y le daremos a crear

basico acr

Todas las demás configuraciones no están disponibles en el plán básico (sku)

Así que le damos a "Revisar y Crear"


3. Subir la imagen al Registry de Azure.

Podemos realizar la subida de la imagen de 2 formas:

  • De forma universal, es decir, nos servirá para cualquier entorno, para ello utilizaremos docker.
  • Según Azure, es decir, utilizando las herramientas de CLI que nos ofrece Azure.

1. Login en el registry.

Accedemos al registry que acabamos de crear

az acr login --name acrpracticaaca
Imagen

login acr

IMPORTANTE

El registry debe indicarse SIEMPRE CON MINÚSCULAS aunque lo hayamos puesto con mayúsculas porque sino es posible que nos de fallo.


2. Construimos la imagen en Azure

az acr build --registry [nombre-acr] --image [nombre-imagen]:v1 .
Imagen

imagen azure build


3. Verificamos que se han subido.

Con

az acr repository list \
    --name [Nuestro-ACR] \
    --output table

Imagen

verify

o también podemos utilizar

az acr repository show-tags \
    --name [Nuestro-ACR] \
    --repository imagen-practica-aca \
    --output table
Imagen

verify tag

1. Construir la imagen.

Con este comando como vimos anteriormente construiremos la imagen:

Si el fichero se llama 'Dockefile'
cd ruta/carpeta/dockerfile/e/index.html
docker build -t [nombre-imagen]:v1 .
Si el fichero se llama diferente, hay que especificar con '-f [ruta]'
docker build -t [nombre-imagen]:v1 -f /ruta/carpeta/dockerfile/[nombre-archivo-dockerfile] .
Imagen

visual


2. Ejecutamos el contenedor.

docker run -d -p 8080:80 [nombre-imagen]:v1
Imagen

run


3. Verificamos que funciona.

Abrimos el navegador y escribimos: http://localhost:8080

Imagen

web


4. Etiquetar la imagen (en local).

El etiquetado a la hora de hacer imágenes es obligatorio cuando hacemos push manual porque docker necesita un nombre completo tipo <registry>.azurecr.io/<repo>:<tag>

Esto principalmente sirve para asignarle un nombre completo y una versión (tag) que indica dónde se va a almacenar y cómo se va a identificar.

IMPORTANTE

Solo tenemos que hacerlo sino hemos hecho esto antes

az acr build --image <repo>:<tag>
Es decir, si lo haces de la forma de Azure, no te haría falta.

De esta forma ya lo crea y lo sube directamente a Azure

No confundir con docker build --image <repo>:<tag>

En caso de tener que hacerlo (NOSOTROS DEBEMOS)

En local
docker tag [nombre-imagen]:v1 [Nuestro-ACR].azurecr.io/[nombre-imagen]
Imagen

tag


5. Subir la imagen al Registry (ACR).

Ahora debemos subir la imagen a Azure.

Para hacerlo, lanzamos el siguiente comando

En local
docker push [Nuestro-ACR].azurecr.io/[nombre-imagen]

Imagen

push


6. Comprobamos que está comprobamos


4. Crear * entorno * en Azure Container Apps (ACA).

¡OJO!

No es lo mismo "ACA" que "entorno ACA".

El entorno proporciona la infraestructura compartida necesaria para ejeutar contenedores, mientras que la ACA represetna la aplicación concreta desplegada dentro de dicho entorno.

Recurso Función
ACA Environment infraestructura
Container App la web/contenedor

Podemos hacerlo de 2 formas, por comandos o por gráfico:

Buscaremos este servicio dentro de Azure:

búsqueda

NO buscamos "entorno"

Porque desde aquí no se puede crear, tenemos que hacerlo directamente desde "Container Apps"

Entornos de container apps

Le damos a crear y nos aparecerán 2 opciones:

Opción Qué es
Aplicación contenedora (elegida) Servicio o aplicación que permanece ejecutándose continuamente, como una web, API o microservicio accesible desde internet.
Trabajo de la aplicación contenedora Tarea temporal o programada que se ejecuta solo cuando se lanza, utilizada para procesos batch, automatizaciones o scripts.

alt text

En la primera ventana de "Datos básicos" aparecerá para crear el entorno, vamos ahí lo primero, donde le damos al enlace azul de "Crear nuevo entorno":

entorno dentro de ACA


Rellenamos los "Datos básicos":

datos básicos

Dejamos por defecto los "Perfiles de carga de trabajo" que son los que determinan cómo azure asigna recursos y escalado a las aplicaciones desplegadas en el entorno Container Apps.

perf carga trabajo

Rellenamos la "Supervisión"

supervisión

En este apartado debemos crear también el área de trabajo que es un recurso utilizado por Azure para centralizar los registros y métricas generados por las aplicaciones y servicios desplegados.

¿Cómo hacerlo?

Le damos donde poner "Crear nuevo" y nos aparecerá esta ventana donde escribimos el nombre que queremos.

area trabajo

Rellenamos el apartado de "Redes"

redes

  1. Registrar providers (si es la primera vez que lo hacemos)

    az provider register --namespace Microsoft.App
    az provider register --namespace Microsoft.OperationalInsights
    

  2. Crear los workspace de logs

    az monitor log-analytics workspace create \
        --resource-group [Nombre grupo de recursos] \
        --workspace-name logs-aca
    

  3. Obtener Workspace ID y Key

    Workspace ID
    LOG_ANALYTICS_WORKSPACE_CLIENT_ID=$(az monitor log-analytics workspace show \
        --query customerId \
        --resource-group [Nombre grupo de recursos] \
        --workspace-name logs-aca \
        --output tsv)
    

    Workspace Key
    LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET=$(az monitor log-analytics workspace get-shared-keys \
        --query primarySharedKey \
        --resource-group [Nombre grupo de recursos] \
        --workspace-name logs-aca \
        --output tsv)
    
  4. Crear entorno ACA

    az containerapp env create \
        --name entorno-aca
        --resource-group [Nombre grupo de recursos] \
        --location westeurope \
        --logs-workspace-id $LOG_ANALYTICS_CLIENT_ID \
        --logs-workspace-key $LOG_ANALYTICS_CLIENT_SECRET
    


5. Crear el Container Apps (ACA).

Rellenamos los "Datos básicos"

datos básicos

La opción de "Azure Functions", la dejamos desactivada, lo que hace es adaptar la configuración de Azure Container Apps para ejecutar aplicaciones serverless basadas en Azure Functions. Está oriendada a cargas de trabajo por eventos y no a aplicaciones web tradicionales como la qie estamos desplegando.

La opción de "Origen de implementación", elegimos "Imagen de contenedor" porque anteriormente creamos una imagen y la almacenamos en ACR.

La opción de "Mostrar entornos en todas las regiones", la dejaremos desmarcada porque esta opción lo que hace es que nos permite visualizar entornos ACA desplegados en distintas regiones de Azure. En esta práctica no es necesario porque todos los recursos están siendo desplegados en la misma región.

Rellenamos el apartado de "Contenedor"

contenedor

Y todo esto restante por defecto

contenedor

Rellenamos el apartado de "Entrada", seleccionamos "Conexiones no seguras" al estar haciendo una práctica pero no sería bueno hacerlo realmente, deberíamos de crearnos los certificados y las cosas necesarias para ello.

entrada

Le damos a crear y ya estaría

creado aca


6. Desplegar la aplicación en Azure Container Apps.

Buscaremos la app dentro de "Aplicación contenedora" y su nombre, una vez ahí le damos al enlace para acceder

app

Vemos que efectivamente, funciona:

web contenedor


7. Actualizar la aplicación.

Tarea

Modificae el contenido de la página web y crear una nueva versión de la imagen del contenedor. Subir la nueva versión al registry y actualizar la Container App para desplegar esta nueva versión.

Comprobar que el cambio se refleja en la web publicada.

Iremos a nuestro visual studio y modificaremos el .html que compone la web, una vez hecho, contruimos la imagen como hicimos antes pero cambiando v1 por v2:

az acr build --registry [nombre-acr] --image [nombre-imagen]:v2 .

modificación

Si ahora entramos en ACR de Azure podemos ver que nos aparece dentro de la imagen una v2

v2

Para que esto se modifique en nuestra web, debemos cambiar el tag de v1 por el v2 en la imagen del contenedor.

Sigue los pasos de la siguiente imagen para realizarlo:

cambiar v2

Cuando acabe de aplicarse los cambios veremos esto de "Revisión" (en el siguiente punto lo explico)

revision

Comprobamos que al acceder al contenedor por la URL como antes, nos aparece el nuevo .html

comprobar


8. Revisiones y escalado automático.

¿Qué son las revisiones?

Las revisiones representan diferentes versiones desplegadas de una aplicación contenedora. Cada vez que se modifica la configuración de la aplicación o se despliega una nueva imagen Docker, Azure genera automáticamente una nueva revisión.

Estas revisiones permiten mantener un historial de despliegues y facilitan la administración de versiones de la aplicación.

Funcionamiento de las revisiones.

Una nueva revisión se crea automáticamente cuando se realizan cambios como:

  • Actualización de la imagen del contenedor
  • Modificacion de variables de entorno
  • Cambios en CPU o memoria
  • Configuración de escalado
  • Cambios en la entrada de red (Ingress)

Cada revisión funciona de forma independiente y puede activarse o desactivarse según las necesidades de despliegue

Ventajas del sistema de revisiones
  • Despliegues seguros: permite desplegar nuevas versiones sin eliminar inmediatamente la versión anterior.
  • Rollback sencillo: es posible volver rápidamente a una revisión en caso de errores.
  • Control de tráfico: azure permite distribuir tráfico entre distintas revisiones para realizar pruebas progresivas.
  • Historial de versiones: facilita el seguimiento de cambios y actualizaciones realizadas en la aplicación.
Ejemplo

Para encontrarlas debemos ir a la app que hemos creado y dentro buscar "revisiones".

Aquí tenemos las "Revisiones actuales":

revisiones

Aquí tenemos las "Revisiones inactivas":

revisiones


¿Qué en el escalado automático?

El escalado automático permite que Azure aumente o reduzca automáticamente el número de instancias de la aplicación según la carga de trabajo.

Esto permite optimizar:

  • el rendimiento
  • el consumo de recursos
  • el coste de ejecución
Configuración del escalado

En Azure Container Apps (ACA) pueden configurarse diferentes parámetros de escalado:

Configuración Función
Réplicas mínimas Número mínimo de instancias activas
Réplicas máximas Número máximo de instancias permitidas
Reglas de escalado Condiciones que activan el escalado
Tipos de reglas de escalado

Azure permite configurar escalado basado en distintos criterios:

Tipo de escalado Descripción
HTTP Número de peticiones recibidas
CPU Uso del procesador
Memoria Consumo de memoria RAM
KEDA Eventos externos y colas de mensajes
Ventajas del escalado automático
  • Optimización de recursos: azure ajusta automáticamente el número de instancias necesarias.
  • Alta disponibilidad: permite aumentos de tráfico sin intervención manual.
  • Reducción de costes: Cuando no hay carga, azure reduce automáticamente el consumo de recursos.
  • Automatización: no es necesario administrar manualmente servidores o instancias.
Ejemplo

Para acceder a ellas iremos a nuestro contenedor y buscamos escala (o scale).

scale

  1. Réplicas mínimas:

    Indica el número mínimo de instancias de la aplicación que estarán siempre activas.

    Ejemplo: | Valor | Resultado | |-------|-----------| | 0 | La app puede apagarse completamente si no hay tráfico | | 1 | Siempre habŕa una instancia activa |

  2. Máximo de réplicas:

    Define el número máximo de instancias que Azure puede crear automáticamente.

    Sirve para limitar el consumo y evita crear demasiadas instancias en caso de mucho tráfico.

  3. Periodo de recuperación (Cooldown period):

    Es el tiempo que Azure espera antes de volver a escalar la aplicación tras realizar un cambio de escalado.

    Sirve para evitar que Azure:

    • Aumente y reduzca instancias constantemente
    • Genere cambios demasiado rápidos

    Ejemplo:

    Si Azure aumenta de 1 a 3 réplicas, esperará el tiempo configurado antes de volver a modificar el número de instancias.

    Lo que mejora la estabilidad del sistema y evita escalados innecesarios.

  4. Intervado de sondeo (Polling interval):

    Es la frecuencia con la que Azure revisa las métricas de la aplicación para decidir si debe escalar.

    Sirve para analizar periódicamente:

    • tráfico HTTP
    • CPU
    • memoria
    • eventos

    y decide:

    • aumentar réplicas
    • reducir réplicas
    • mantener estado actual
  5. Número actual de réplicas:

    Muestra cuántas instancias de la aplicación están ejecutándose actualmente.

  6. Reglas de escalado:

    Son las condiciones que Azure utiliza para decidir cuándo aumentar o reducir el número de réplicas.