Esercitazione: Distribuire un'applicazione di elaborazione in background con App Azure Container

L'uso di App Contenitore di Azure consente di distribuire applicazioni senza richiedere l'esposizione di endpoint pubblici. Usando le regole di scalabilità di App contenitore, l'applicazione può aumentare il numero di istanze e in base alla lunghezza della coda Archiviazione di Azure. Quando non sono presenti messaggi nella coda, l'app contenitore viene ridimensionata a zero.

Scopri come:

  • Creare un ambiente app contenitore per distribuire le app contenitore
  • Creare una coda Archiviazione di Azure per inviare messaggi all'app contenitore
  • Distribuire l'applicazione di elaborazione in background come app contenitore
  • Verificare che i messaggi della coda vengano elaborati dall'app contenitore

Configurazione

Per iniziare, accedere ad Azure. Eseguire il comando seguente e seguire le istruzioni per completare il processo di autenticazione.

az login

Installare quindi l'estensione App Azure Container per l'interfaccia della riga di comando.

az extension add --name containerapp --upgrade

Ora che l'estensione o il modulo corrente è installato, registrare lo Microsoft.App spazio dei nomi.

Nota

Le risorse di App Azure Container sono state migrate dallo Microsoft.Web spazio dei nomi allo Microsoft.App spazio dei nomi . Per altri dettagli, vedere Migrazione dello spazio dei nomi da Microsoft.Web a Microsoft.App nel mese di marzo 2022.

az provider register --namespace Microsoft.App

Registrare il Microsoft.OperationalInsights provider per l'area di lavoro Log Analytics di Monitoraggio di Azure, se non è stato usato in precedenza.

az provider register --namespace Microsoft.OperationalInsights

Impostare quindi le variabili di ambiente seguenti:

RESOURCE_GROUP="my-container-apps"
LOCATION="canadacentral"
CONTAINERAPPS_ENVIRONMENT="my-environment"

Con queste variabili definite, è possibile creare un gruppo di risorse per organizzare i servizi correlati alla nuova app contenitore.

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION

Con l'interfaccia della riga di comando aggiornata e un nuovo gruppo di risorse disponibile, è possibile creare e distribuire un ambiente di App contenitore.

Crea un ambiente

Un ambiente di App contenitore di Azure crea un limite sicuro intorno a un gruppo di app contenitore. Le app contenitore nello stesso ambiente vengono distribuite nella stessa rete virtuale e scrivono log nella stessa area di lavoro Log Analytics.


Le singole app contenitore vengono distribuite in un ambiente di App Azure Container. Per creare l'ambiente, eseguire il comando seguente:

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

Configurare una coda di archiviazione

Per iniziare, definire un nome per l'account di archiviazione. Archiviazione nomi di account devono essere univoci all'interno di Azure e avere una lunghezza compresa tra 3 e 24 caratteri contenente solo numeri e lettere minuscole.

STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"

Creare un account di archiviazione di Azure.

az storage account create \
  --name $STORAGE_ACCOUNT_NAME \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION" \
  --sku Standard_RAGRS \
  --kind StorageV2

Ottenere quindi il stringa di connessione per la coda.

QUEUE_CONNECTION_STRING=`az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --out json | tr -d '"'`

È ora possibile creare la coda di messaggi.

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

Infine, è possibile inviare un messaggio alla coda.

az storage message put \
  --content "Hello Queue Reader App" \
  --queue-name "myqueue" \
  --connection-string $QUEUE_CONNECTION_STRING

Distribuire l'applicazione in background

Creare un file denominato queue.json e incollare il codice di configurazione seguente nel file.

{
    "$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"
                                    }
                                ]
                            }
                        }
                    ]
                }
            }
        }
    }]
}

È ora possibile creare e distribuire l'app contenitore.

az deployment group create --resource-group "$RESOURCE_GROUP" \
  --template-file ./queue.json \
  --parameters \
    environment_name="$CONTAINERAPPS_ENVIRONMENT" \
    queueconnection="$QUEUE_CONNECTION_STRING" \
    location="$LOCATION"

Questo comando distribuisce l'applicazione demo dall'immagine del contenitore pubblico denominata mcr.microsoft.com/azuredocs/containerapps-queuereader e imposta i segreti e le variabili di ambiente usate dall'applicazione.

L'applicazione viene ridimensionata su 10 repliche in base alla lunghezza della coda, come definito nella scale sezione del modello di Resource Manager.

Verificare il risultato

L'app contenitore viene eseguita come processo in background. Quando arrivano messaggi dalla coda Archiviazione di Azure, l'applicazione crea voci di log in Log Analytics. Prima di poter eseguire query sui dati registrati, è necessario attendere alcuni minuti prima che l'analisi arrivi.

Eseguire il comando seguente per visualizzare i messaggi registrati. Questo comando richiede l'estensione Log Analytics, quindi accettare il prompt per installare l'estensione quando richiesto.

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

Suggerimento

Problemi? Segnalare il problema in GitHub aprendo un problema nel repository di App contenitore di Azure.

Pulire le risorse

Al termine, eseguire il comando seguente per eliminare il gruppo di risorse che contiene le risorse di App contenitore.

Attenzione

Il comando seguente elimina il gruppo di risorse specificato e tutte le risorse contenute al suo interno. Se nel gruppo di risorse specificato sono presenti anche risorse diverse da quelle usate in questa esercitazione, verranno eliminate.

az group delete \
  --resource-group $RESOURCE_GROUP