Tutorial: Implementación de una aplicación de procesamiento en segundo plano con Azure Container Apps
El uso de Azure Container Apps permite implementar aplicaciones sin necesidad de exponer puntos de conexión públicos. Al usar las reglas de escala de Container Apps, la aplicación se puede escalar y reducir horizontalmente en función de la longitud de la cola de Azure Storage. Cuando no hay ningún mensaje en la cola, la aplicación de contenedor se reduce horizontalmente a cero.
Aprenderá a:
- 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
- Implementar la aplicación de procesamiento en segundo plano como una aplicación de contenedor
- Comprobar que la aplicación de contenedor procesa los mensajes de cola
Configurar
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
Para asegurar que ejecuta la versión más reciente de la CLI, ejecute el comando de actualización.
az upgrade
Luego, instale o actualice la extensión de Azure Container Apps para la CLI.
az extension add --name containerapp --upgrade
Ahora que la extensión o módulo actual está instalado, registre los espacios de nombre Microsoft.App
y Microsoft.OperationalInsights
.
Nota:
Los recursos de Azure Container Apps han migrado desde el espacio de nombres Microsoft.Web
al espacio de nombres Microsoft.App
. Consulte Migración del espacio de nombres de Microsoft.Web a Microsoft.App marzo de 2022 para obtener más detalles.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Establecimiento de variables de entorno
Establezca las siguientes variables de entorno. Reemplace los <MARCADORES DE POSICIÓN> por sus valores:
RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"
Creación de un grupo de recursos de Azure
Cree un grupo de recursos para organizar los servicios relacionados con la implementación de la aplicación contenedora.
az group create \
--name $RESOURCE_GROUP \
--location "$LOCATION"
Creación de un entorno
Un entorno de Azure Container Apps crea un límite seguro alrededor de un grupo de aplicaciones de contenedor. Las aplicaciones de contenedor implementadas en el mismo entorno se implementan en la misma red virtual y escriben registros en la misma área de trabajo de Log Analytics.
Para crear el entorno, ejecute el comando siguiente:
az containerapp env create \
--name $CONTAINERAPPS_ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION"
Configuración de una cola de almacenamiento
Para empezar, defina el nombre de 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.
STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"
Cree una cuenta de Azure Storage.
az storage account create \
--name $STORAGE_ACCOUNT_NAME \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION" \
--sku Standard_RAGRS \
--kind StorageV2
A continuación, obtenga la cadena de conexión para la cola.
QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --out json | tr -d '"'`
Ahora puede crear la cola de mensajes.
az storage queue create \
--name "myqueue" \
--account-name $STORAGE_ACCOUNT_NAME \
--connection-string $QUEUE_CONNECTION_STRING
Por último, puede enviar un mensaje a la cola.
az storage message put \
--content "Hello Queue Reader App" \
--queue-name "myqueue" \
--connection-string $QUEUE_CONNECTION_STRING
Implementación de la aplicación en segundo plano
Cree un archivo denominado queue.json y pegue dentro el código de configuración siguiente.
{
"$schema": "https://schema.management.azure.com/schemas/2019-08-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"defaultValue": "canadacentral",
"type": "String"
},
"environment_name": {
"type": "String"
},
"queueconnection": {
"type": "secureString"
}
},
"variables": {},
"resources": [
{
"name": "queuereader",
"type": "Microsoft.App/containerApps",
"apiVersion": "2022-03-01",
"kind": "containerapp",
"location": "[parameters('location')]",
"properties": {
"managedEnvironmentId": "[resourceId('Microsoft.App/managedEnvironments', parameters('environment_name'))]",
"configuration": {
"activeRevisionsMode": "single",
"secrets": [
{
"name": "queueconnection",
"value": "[parameters('queueconnection')]"
}]
},
"template": {
"containers": [
{
"image": "mcr.microsoft.com/azuredocs/containerapps-queuereader",
"name": "queuereader",
"env": [
{
"name": "QueueName",
"value": "myqueue"
},
{
"name": "QueueConnectionString",
"secretRef": "queueconnection"
}
]
}
],
"scale": {
"minReplicas": 1,
"maxReplicas": 10,
"rules": [
{
"name": "myqueuerule",
"azureQueue": {
"queueName": "myqueue",
"queueLength": 100,
"auth": [
{
"secretRef": "queueconnection",
"triggerParameter": "connection"
}
]
}
}
]
}
}
}
}]
}
Ahora puede crear e implementar la aplicación de contenedor.
az deployment group create --resource-group "$RESOURCE_GROUP" \
--template-file ./queue.json \
--parameters \
environment_name="$CONTAINERAPPS_ENVIRONMENT" \
queueconnection="$QUEUE_CONNECTION_STRING" \
location="$LOCATION"
Este comando implementa la aplicación de demostración desde la imagen de contenedor pública denominada mcr.microsoft.com/azuredocs/containerapps-queuereader
y establece los secretos y las variables de entorno que usa la aplicación.
La aplicación escala horizontalmente hasta 10 réplicas en función de la longitud de la cola, como se define en la sección scale
de la plantilla de ARM.
Comprobar el resultado
La aplicación contenedora se ejecuta como un proceso en segundo plano. A medida que llegan mensajes de la cola de Azure Storage, la aplicación crea entradas de registro en el análisis de registros. Debe esperar unos minutos para que el análisis llegue por primera vez antes de poder consultar los datos registrados.
Ejecute el comando siguiente para ver los mensajes registrados. Este comando necesita la extensión de Log Analytics, así que acepte el mensaje para instalar la extensión cuando se le solicite.
LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az containerapp env show --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`
az monitor log-analytics query \
--workspace $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
--analytics-query "ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'queuereader' and Log_s contains 'Message ID' | project Time=TimeGenerated, AppName=ContainerAppName_s, Revision=RevisionName_s, Container=ContainerName_s, Message=Log_s | take 5" \
--out table
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