Compartir vía


Tutorial: Implementación de trabajos controlados por eventos con Azure Container Apps

Los trabajos de Azure Container Apps permiten ejecutar tareas en contenedor que se ejecutan durante una duración finita y salen. Las ejecuciones de trabajos se pueden desencadenar manualmente, según una programación o en función de los eventos. Los trabajos son más adecuados para tareas como el procesamiento de datos, el aprendizaje automático, la limpieza de recursos o cualquier escenario que requiera recursos de proceso efímeros sin servidor.

En este tutorial, aprenderá a trabajar con trabajos controlados por eventos.

  • Crear un entorno de Container Apps para implementar las aplicaciones de contenedor
  • Crear una cola de Azure Storage para enviar mensajes a la aplicación de contenedor
  • Compilación de imágenes de contenedor que ejecutan trabajos
  • Implementación del trabajo en el entorno de Container Apps
  • Comprobar que la aplicación de contenedor procesa los mensajes de cola

El trabajo que se crea inicia una ejecución para cada mensaje que se envía a una cola de Azure Storage. Cada ejecución de trabajos ejecuta un contenedor que realiza los siguientes pasos:

  1. Obtiene un mensaje de la cola.
  2. Registra el mensaje en los registros de ejecución del trabajo.
  3. Elimina el mensaje de la cola.
  4. Sale.

Importante

El escalador supervisa la longitud de la cola para determinar cuántos trabajos se van a iniciar. Para obtener un escalado preciso, no elimine un mensaje de la cola hasta que la ejecución del trabajo haya terminado de procesarlo.

El código fuente del trabajo que se ejecuta en este tutorial está disponible en un repositorio de GitHub de ejemplos de Azure.

Requisitos previos

Configuración

  1. Para iniciar sesión en Azure desde la CLI, ejecute el siguiente comando y siga las indicaciones para completar el proceso de autenticación.

    az login
    
  2. Asegúrese de que ejecuta la versión más reciente de la CLI con el comando de actualización.

    az upgrade
    
  3. Instale la versión más reciente de la extensión de la CLI de Azure Container Apps.

    az extension add --name containerapp --upgrade
    
  4. Registre los espacios de nombres Microsoft.App y Microsoft.OperationalInsights si aún no los ha registrado en su suscripción de Azure.

    az provider register --namespace Microsoft.App
    az provider register --namespace Microsoft.OperationalInsights
    
  5. Ahora que la configuración de la CLI de Azure está completa, puede definir las variables de entorno que se usan en este artículo.

    RESOURCE_GROUP="jobs-quickstart"
    LOCATION="northcentralus"
    ENVIRONMENT="env-jobs-quickstart"
    JOB_NAME="my-job"
    

Creación de un entorno de Container Apps

El entorno de Azure Container Apps actúa como un límite seguro en torno a las aplicaciones y trabajos de contenedor para que puedan compartir la misma red y comunicarse entre sí.

  1. Cree un grupo de recursos con el siguiente comando.

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. Cree el entorno de Container Apps mediante el siguiente comando.

    az containerapp env create \
        --name "$ENVIRONMENT" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION"
    

Configuración de una cola de almacenamiento

El trabajo usa una cola de Azure Storage para recibir mensajes. En esta sección se creará una cuenta de almacenamiento y una cola.

  1. Defina un nombre para la cuenta de almacenamiento.

    STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"
    QUEUE_NAME="myqueue"
    

    Reemplace <STORAGE_ACCOUNT_NAME> por un nombre único para la cuenta de almacenamiento. Los nombres de las cuentas de almacenamiento deben ser únicos en Azure, deben tener entre 3 y 24 caracteres, y solo pueden incluir números y letras en minúscula.

  2. Cree una cuenta de Azure Storage.

    az storage account create \
        --name "$STORAGE_ACCOUNT_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Standard_LRS \
        --kind StorageV2
    
  3. Guarde la cadena de conexión de la cola en una variable.

    QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --output tsv`
    
  4. Cree la cola de mensajes.

    az storage queue create \
        --name "$QUEUE_NAME" \
        --account-name "$STORAGE_ACCOUNT_NAME" \
        --connection-string "$QUEUE_CONNECTION_STRING"
    

Creación e implementación del trabajo

Para implementar el trabajo, primero debe compilar una imagen de contenedor para el trabajo e insertarla en un registro. Luego, puede implementar el trabajo en el entorno de Container Apps.

  1. Defina un nombre para la imagen de contenedor y el registro.

    CONTAINER_IMAGE_NAME="queue-reader-job:1.0"
    CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
    

    Reemplace <CONTAINER_REGISTRY_NAME> por un nombre único para el registro de contenedor. Los nombres del registro de contenedor deben ser únicos en Azure, deben tener entre 5 y 50 caracteres, y solo pueden incluir números y letras en minúscula.

  2. Cree un registro de contenedor.

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic \
        --admin-enabled true
    
  3. El código fuente del trabajo está disponible en GitHub. Ejecute el siguiente comando para clonar el repositorio y compilar la imagen de contenedor en la nube mediante el comando az acr build.

    az acr build \
        --registry "$CONTAINER_REGISTRY_NAME" \
        --image "$CONTAINER_IMAGE_NAME" \
        "https://github.com/Azure-Samples/container-apps-event-driven-jobs-tutorial.git"
    

    La imagen ya está disponible en el registro de contenedor.

  4. Cree un trabajo en el entorno de Container Apps.

    az containerapp job create \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --environment "$ENVIRONMENT" \
        --trigger-type "Event" \
        --replica-timeout "1800" \
        --min-executions "0" \
        --max-executions "10" \
        --polling-interval "60" \
        --scale-rule-name "queue" \
        --scale-rule-type "azure-queue" \
        --scale-rule-metadata "accountName=$STORAGE_ACCOUNT_NAME" "queueName=$QUEUE_NAME" "queueLength=1" \
        --scale-rule-auth "connection=connection-string-secret" \
        --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \
        --cpu "0.5" \
        --memory "1Gi" \
        --secrets "connection-string-secret=$QUEUE_CONNECTION_STRING" \
        --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io" \
        --env-vars "AZURE_STORAGE_QUEUE_NAME=$QUEUE_NAME" "AZURE_STORAGE_CONNECTION_STRING=secretref:connection-string-secret"
    

    La siguiente tabla describe los principales parámetros que se usan en el comando.

    Parámetro Descripción
    --replica-timeout La duración máxima que se puede ejecutar una réplica.
    --min-executions El número mínimo de ejecuciones de trabajos que tienen lugar por intervalo de sondeo.
    --max-executions El número máximo de ejecuciones de trabajos que tienen lugar por intervalo de sondeo.
    --polling-interval El intervalo de sondeo en el que se evalúa la regla de escalado.
    --scale-rule-name El nombre de la regla de escalado.
    --scale-rule-type El tipo de regla de escalado que se usa.
    --scale-rule-metadata Los metadatos de la regla de escalado.
    --scale-rule-auth La autenticación de la regla de escalado.
    --secrets Los secretos que se usan para el trabajo.
    --registry-server El servidor de registro de contenedor que se usa para el trabajo. En el caso de una instancia de Azure Container Registry, el comando configura automáticamente la autenticación.
    --env-vars Las variables de entorno que se usan para el trabajo.

    La configuración de la regla de escalado define el origen del evento que se supervisa. Se evalúa en cada intervalo de sondeo y determina el número de ejecuciones de trabajos se desencadenan. Para más información, consulte Establecimiento de reglas de escalado.

El trabajo controlado por eventos ahora se crea en el entorno de Container Apps.

Comprobar la implementación

El trabajo se configura para evaluar la regla de escalado cada 60 segundos, que comprueba el número de mensajes de la cola. Para cada período de evaluación, inicia una nueva ejecución de trabajos para cada mensaje de la cola, hasta un máximo de 10 ejecuciones.

Para comprobar que el trabajo se ha configurado correctamente, puede enviar algunos mensajes a la cola, confirmar que se inician las ejecuciones de los trabajos y que los mensajes se registran en los registros de ejecución de trabajos.

  1. Envíe un mensaje a la cola.

    az storage message put \
        --content "Hello Queue Reader Job" \
        --queue-name "$QUEUE_NAME" \
        --connection-string "$QUEUE_CONNECTION_STRING"
    
  2. Enumere las ejecuciones de un trabajo.

    az containerapp job execution list \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output json
    

    Dado que el trabajo está configurado para evaluar la regla de escalado cada 60 segundos, la ejecución del trabajo puede tardar hasta un minuto en iniciarse. Repita el comando hasta que vea la ejecución del trabajo y que su estado es Succeeded.

  3. Ejecute el comando siguiente para ver los mensajes registrados. Estos comandos necesitan la extensión de Log Analytics, así que acepte el mensaje para instalar la extensión cuando se le solicite.

    LOG_ANALYTICS_WORKSPACE_ID=`az containerapp env show --name $ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`
    
    az monitor log-analytics query \
        --workspace "$LOG_ANALYTICS_WORKSPACE_ID" \
        --analytics-query "ContainerAppConsoleLogs_CL | where ContainerJobName_s == '$JOB_NAME' | order by _timestamp_d asc"
    

    Hasta que la tabla ContainerAppConsoleLogs_CL esté lista, el comando devuelve un error: BadArgumentError: The request had some invalid properties. Espere unos minutos y pruebe otra vez.

Sugerencia

¿Tiene problemas? Háganoslo saber en GitHub abriendo una incidencia en el repositorio de Azure Container Apps.

Limpieza de recursos

Cuando haya terminado, ejecute el siguiente comando para eliminar el grupo de recursos que contiene los recursos de Container Apps.

Precaución

El comando siguiente elimina el grupo de recursos especificado y todos los recursos que contiene. Si existen recursos en el grupo de recursos especificado que están fuera del ámbito de este tutorial, también se eliminarán.

az group delete \
    --resource-group $RESOURCE_GROUP

Pasos siguientes