Share via


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