Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los trabajos de Azure Container Apps permiten ejecutar tareas en contenedores que se ejecutan durante un tiempo finito 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:
- Obtiene un mensaje de la cola.
- Registra el mensaje en los registros de ejecución del trabajo.
- Elimina el mensaje de la cola.
- 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
- Una cuenta de Azure con una suscripción activa. Si no tiene ninguna, puede crear una gratis.
- LaCLI de Azure.
Para obtener información sobre las características que los trabajos de Container Apps no admiten, consulte Restricciones de trabajos.
Preparación del entorno
Para iniciar sesión en Azure desde la CLI de Azure, ejecute el siguiente comando y siga las indicaciones para completar el proceso de autenticación.
az loginAsegúrese de que ejecuta la versión más reciente de la CLI de Azure mediante el
az upgradecomando .az upgradeInstale la versión más reciente de la extensión de la CLI de Container Apps.
az extension add --name containerapp --upgradeRegistre los
Microsoft.App,Microsoft.OperationalInsights, yMicrosoft.Storagesi aún no están registrados en su suscripción de Azure.az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights az provider register --namespace Microsoft.StorageDefina 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 Container Apps actúa como una frontera de aislamiento alrededor de las aplicaciones y trabajos del contenedor para que puedan compartir la misma red y comunicarse entre sí.
Cree un grupo de recursos mediante el comando siguiente.
az group create \ --name "$RESOURCE_GROUP" \ --location "$LOCATION"Cree el entorno de Container Apps mediante el comando siguiente.
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.
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.Cree una cuenta de Azure Storage.
az storage account create \ --name "$STORAGE_ACCOUNT_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku Standard_LRS \ --kind StorageV2Si este comando devuelve el error:
(SubscriptionNotFound) Subscription <SUBSCRIPTION_ID> was not found. Code: SubscriptionNotFound Message: Subscription <SUBSCRIPTION_ID> was not found.Asegúrese de que ha registrado el espacio de nombres
Microsoft.Storageen la suscripción de Azure.az provider register --namespace Microsoft.StorageGuarde 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)Cree la cola de mensajes.
az storage queue create \ --name "$QUEUE_NAME" \ --account-name "$STORAGE_ACCOUNT_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"
Crear una identidad administrada asignada por el usuario
Para evitar el uso de credenciales administrativas, extraiga imágenes de repositorios privados en Microsoft Azure Container Registry utilizando identidades administradas para la autenticación. Cuando sea posible, use una identidad administrada asignada por el usuario para extraer las imágenes.
Cree una identidad administrada asignada por el usuario. Antes de ejecutar los comandos siguientes, elija el nombre de la identidad administrada y reemplace
\<PLACEHOLDER\>por el nombre.IDENTITY="<YOUR_IDENTITY_NAME>"az identity create \ --name $IDENTITY \ --resource-group $RESOURCE_GROUPObtenga el id. de recurso de la identidad.
IDENTITY_ID=$(az identity show \ --name $IDENTITY \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
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.
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.Cree un registro de contenedor.
az acr create \ --name "$CONTAINER_REGISTRY_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku BasicSu registro de contenedores debe permitir tokens de audiencia de Azure Resource Manager (ARM) para la autenticación con el fin de utilizar la identidad administrada para extraer imágenes.
Utilice el siguiente comando para comprobar si los tokens ARM pueden acceder a su Azure Container Registry (ACR).
az acr config authentication-as-arm show --registry "$CONTAINER_REGISTRY_NAME"Si se permiten los tokens ARM, el comando muestra lo siguiente.
{ "status": "enabled" }Si
statusesdisabled, permita los tokens de ARM con el comando siguiente.az acr config authentication-as-arm update --registry "$CONTAINER_REGISTRY_NAME" --status enabledEl 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.
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" \ --mi-user-assigned "$IDENTITY_ID" \ --registry-identity "$IDENTITY_ID" \ --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-timeoutLa duración máxima que se puede ejecutar una réplica. --min-executionsEl número mínimo de ejecuciones de trabajos que tienen lugar por intervalo de sondeo. --max-executionsEl número máximo de ejecuciones de trabajos que tienen lugar por intervalo de sondeo. --polling-intervalEl intervalo de sondeo en el que se evalúa la regla de escalado. --scale-rule-nameEl nombre de la regla de escalado. --scale-rule-typeEl tipo de regla de escalado que se usa. --scale-rule-metadataLos metadatos de la regla de escalado. --scale-rule-authLa autenticación de la regla de escalado. --secretsLos secretos que se usan para el trabajo. --registry-serverEl 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. --mi-user-assignedEl id. de recurso de la identidad administrada asignada por el usuario para asignar al trabajo. --registry-identityEl id. de recurso de una identidad administrada para autenticarse con el servidor de registro en lugar de utilizar un nombre de usuario y una contraseña. Si es posible, se crea automáticamente una asignación de función "acrpull" para la identidad. --env-varsLas 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.
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"Enumere las ejecuciones de un trabajo.
az containerapp job execution list \ --name "$JOB_NAME" \ --resource-group "$RESOURCE_GROUP" \ --output jsonDado 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.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 --output 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_CLesté 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