Tutorial: Bereitstellen einer Hintergrundverarbeitungsanwendung mit Azure Container Apps

Mit Azure Container Apps können Sie Anwendungen bereitstellen, ohne dass öffentliche Endpunkte verfügbar gemacht werden müssen. Mithilfe von Container-Apps-Skalierungsregeln kann die Anwendung je nach Länge der Azure Storage-Warteschlange auf- und abskaliert werden. Wenn keine Nachrichten in der Warteschlange enthalten sind, wird die Container-App auf null abskaliert.

Folgendes wird vermittelt:

  • Erstellen einer Container Apps-Umgebung für die Bereitstellung Ihrer Container-Apps
  • Erstellen einer Azure Storage-Warteschlange zum Senden von Nachrichten an die Container-App
  • Bereitstellen Ihrer Hintergrundverarbeitungsanwendung als Container-App
  • Überprüfen der Verarbeitung der Warteschlangennachrichten durch die Container-App

Setup

Melden Sie sich zunächst bei Azure an. Führen Sie den folgenden Befehl aus, und befolgen Sie die Anweisungen, um den Authentifizierungsprozess abzuschließen.

az login

Installieren Sie als Nächstes die Azure Container Apps-Erweiterung für die CLI.

az extension add --name containerapp --upgrade

Die aktuelle Erweiterung oder das aktuelle Modul wurde installiert. Registrieren Sie nun den Namespace Microsoft.App.

Hinweis

Azure Container Apps-Ressourcen wurden vom Microsoft.Web-Namespace zum Microsoft.App-Namespace migriert. Weitere Informationen finden Sie unter Namespacemigration von Microsoft.Web zu Microsoft.App im März 2022.

az provider register --namespace Microsoft.App

Registrieren Sie den Anbieter Microsoft.OperationalInsights für den Azure Monitor Log Analytics-Arbeitsbereich, falls Sie ihn bisher noch nicht verwendet haben.

az provider register --namespace Microsoft.OperationalInsights

Legen Sie anschließend die folgenden Umgebungsvariablen fest:

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

Wenn diese Variablen definiert sind, können Sie eine Ressourcengruppe erstellen, um die Dienste zu organisieren, die mit Ihrer neuen Container-App verknüpft sind.

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

Wenn die CLI aktualisiert wurde und eine neue Ressourcengruppe verfügbar ist, können Sie eine Container Apps-Umgebung erstellen und Ihre Container-App bereitstellen.

Erstellen einer Umgebung

Eine Umgebung in Azure Container Apps erstellt eine sichere Grenze für eine Gruppe von Container-Apps. Container-Apps, die in derselben Umgebung bereitgestellt werden, werden im gleichen virtuellen Netzwerk bereitgestellt und schreiben Protokolle in denselben Log Analytics-Arbeitsbereich.


Einzelne Container-Apps werden in einer Azure Container Apps-Umgebung bereitgestellt. Führen Sie den folgenden Befehl aus, um die Umgebung zu erstellen:

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

Einrichten einer Speicherwarteschlange

Legen Sie zunächst einen Namen für das Speicherkonto fest. Speicherkontonamen müssen innerhalb von Azure eindeutig und zwischen 3 und 24 Zeichen lang sein und dürfen nur Zahlen und Kleinbuchstaben enthalten.

STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"

Erstellen eines Azure-Speicherkontos.

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

Rufen Sie als Nächstes die Verbindungszeichenfolge der Warteschlange ab.

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

Nun können Sie die Nachrichtenwarteschlange erstellen.

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

Nun können Sie eine Nachricht an die Warteschlange senden.

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

Bereitstellen der Hintergrundanwendung

Erstellen Sie eine Datei mit dem Namen queue.json, und fügen Sie den folgenden Konfigurationscode in die Datei ein.

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

Jetzt können Sie Ihre Container-App erstellen und bereitstellen.

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

Dieser Befehl stellt die Demoanwendung aus dem öffentlichen Containerimage mcr.microsoft.com/azuredocs/containerapps-queuereader bereit und legt die von der Anwendung verwendeten Geheimnisse und Umgebungsvariablen fest.

Die Anwendung wird wie im Abschnitt scale der ARM-Vorlage definiert je nach Warteschlangenlänge auf bis zu zehn Replikate aufskaliert.

Überprüfen des Ergebnisses

Die Container-App wird als Hintergrundprozess ausgeführt. Wenn Nachrichten aus der Azure Storage-Warteschlange eintreffen, erstellt die Anwendung Protokolleinträge in der Protokollanalyse. Sie müssen einige Minuten warten, bis die Analyse zum ersten Mal ankommt, bevor Sie die protokollierten Daten abfragen können.

Führen Sie den folgenden Befehl aus, um die protokollierten Meldungen anzuzeigen. Für diesen Befehl ist die Log Analytics-Erweiterung erforderlich. Stimmen Sie daher der ggf. angezeigten Aufforderung zur Installation der Erweiterung zu.

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

Tipp

Treten Probleme auf? Informieren Sie uns über GitHub, indem Sie ein Problem im Azure Container Apps-Repository öffnen.

Bereinigen von Ressourcen

Führen Sie anschließend den folgenden Befehl aus, um die Ressourcengruppe zu löschen, die Ihre Container Apps-Ressourcen enthält.

Achtung

Mit dem folgenden Befehl werden die angegebene Ressourcengruppe und alle darin enthaltenen Ressourcen gelöscht. Falls in der angegebenen Ressourcengruppe Ressourcen enthalten sind, die nicht zum Umfang dieses Tutorials gehören, werden sie ebenfalls gelöscht.

az group delete \
  --resource-group $RESOURCE_GROUP