Självstudie: Distribuera ett program för bakgrundsbearbetning med Azure Container Apps

Med Azure Container Apps kan du distribuera program utan att behöva exponera offentliga slutpunkter. Genom att använda skalningsregler för Container Apps kan programmet skala ut och in baserat på Azure Storage-kölängden. När det inte finns några meddelanden i kön skalar containerappen in till noll.

Du lär dig att:

  • Skapa en Container Apps-miljö för att distribuera dina containerappar
  • Skapa en Azure Storage-kö för att skicka meddelanden till containerappen
  • Distribuera ditt bakgrundsbearbetningsprogram som en containerapp
  • Kontrollera att kömeddelandena bearbetas av containerappen

Konfiguration

Börja genom att logga in på Azure. Kör följande kommando och följ anvisningarna för att slutföra autentiseringsprocessen.

az login

Installera sedan Azure Container Apps-tillägget för CLI.

az extension add --name containerapp --upgrade

Nu när det aktuella tillägget eller modulen har installerats registrerar du Microsoft.App namnområdet.

Kommentar

Azure Container Apps-resurser har migrerats från Microsoft.Web namnområdet till Microsoft.App namnområdet. Mer information finns i Namnområdesmigrering från Microsoft.Web till Microsoft.App i mars 2022.

az provider register --namespace Microsoft.App

Registrera providern Microsoft.OperationalInsights för Azure Monitor Log Analytics-arbetsytan om du inte har använt den tidigare.

az provider register --namespace Microsoft.OperationalInsights

Ange sedan följande miljövariabler:

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

Med dessa variabler definierade kan du skapa en resursgrupp för att organisera de tjänster som är relaterade till din nya containerapp.

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

När CLI har uppgraderats och en ny resursgrupp är tillgänglig kan du skapa en Container Apps-miljö och distribuera din containerapp.

Skapa en miljö

En miljö i Azure Container Apps skapar en säker gräns runt en grupp med containerappar. Container Apps som distribueras till samma miljö distribueras i samma virtuella nätverk och skriver loggar till samma Log Analytics-arbetsyta.


Enskilda containerappar distribueras till en Azure Container Apps-miljö. Kör följande kommando för att skapa miljön:

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

Konfigurera en lagringskö

Börja med att definiera ett namn för lagringskontot. Lagringskontonamn måste vara unika i Azure och vara mellan 3 och 24 tecken långa och innehåller endast siffror och gemener.

STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"

skapa ett Azure Storage-konto

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

Hämta sedan anslutningssträng för kön.

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

Nu kan du skapa meddelandekön.

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

Slutligen kan du skicka ett meddelande till kön.

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

Distribuera bakgrundsprogrammet

Skapa en fil med namnet queue.json och klistra in följande konfigurationskod i filen.

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

Nu kan du skapa och distribuera din containerapp.

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

Det här kommandot distribuerar demoprogrammet från den offentliga containeravbildningen med namnet mcr.microsoft.com/azuredocs/containerapps-queuereader och anger variabler för hemligheter och miljöer som används av programmet.

Programmet skalar ut till 10 repliker baserat på kölängden scale enligt definitionen i avsnittet i ARM-mallen.

Verifiera resultatet

Containerappen körs som en bakgrundsprocess. När meddelanden kommer från Azure Storage-kön skapar programmet loggposter i Log Analytics. Du måste vänta några minuter tills analysen kommer för första gången innan du kan köra frågor mot loggade data.

Kör följande kommando för att se loggade meddelanden. Det här kommandot kräver Log Analytics-tillägget, så acceptera uppmaningen att installera tillägget när det begärs.

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

Dricks

Har du problem? Meddela oss på GitHub genom att öppna ett problem i Azure Container Apps-lagringsplatsen.

Rensa resurser

När du är klar kör du följande kommando för att ta bort resursgruppen som innehåller dina Container Apps-resurser.

Varning

Följande kommando tar bort den angivna resursgruppen och alla resurser som ingår i den. Om det finns resurser utanför omfånget för den här självstudien i den angivna resursgruppen tas de också bort.

az group delete \
  --resource-group $RESOURCE_GROUP