Kurz: Nasazení aplikace pro zpracování na pozadí pomocí Azure Container Apps

Použití Azure Container Apps umožňuje nasazovat aplikace bez nutnosti vystavení veřejných koncových bodů. Pomocí pravidel škálování služby Container Apps může aplikace škálovat kapacitu na více instancí a na základě délky fronty služby Azure Storage. Pokud ve frontě nejsou žádné zprávy, aplikace kontejneru se škáluje na nulu.

Získáte informace pro:

  • Vytvoření prostředí Container Apps pro nasazení aplikací kontejnerů
  • Vytvoření fronty služby Azure Storage pro odesílání zpráv do aplikace kontejneru
  • Nasazení aplikace pro zpracování na pozadí jako kontejnerové aplikace
  • Ověřte, že aplikace kontejneru zpracovává zprávy fronty.

Instalační program

Začněte tím, že se přihlásíte k Azure. Spusťte následující příkaz a podle pokynů dokončete proces ověřování.

az login

Dále nainstalujte rozšíření Azure Container Apps pro rozhraní příkazového řádku.

az extension add --name containerapp --upgrade

Teď, když je nainstalované aktuální rozšíření nebo modul, zaregistrujte Microsoft.App obor názvů.

Poznámka:

Prostředky Azure Container Apps se migrovaly z Microsoft.Web oboru názvů do Microsoft.App oboru názvů. Další podrobnosti najdete v tématu Migrace oboru názvů z webu Microsoft.Web na Microsoft.App v březnu 2022 .

az provider register --namespace Microsoft.App

Pokud jste ho ještě nepoužili Microsoft.OperationalInsights , zaregistrujte poskytovatele pro pracovní prostor služby Azure Monitor Log Analytics.

az provider register --namespace Microsoft.OperationalInsights

Dále nastavte následující proměnné prostředí:

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

Pomocí těchto proměnných můžete vytvořit skupinu prostředků pro uspořádání služeb souvisejících s novou aplikací kontejneru.

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

S upgradovaným rozhraním příkazového řádku a dostupnou novou skupinou prostředků můžete vytvořit prostředí Container Apps a nasadit aplikaci kontejneru.

Vytvořit prostředí

Prostředí v Azure Container Apps vytvoří zabezpečenou hranici kolem skupiny kontejnerových aplikací. KontejnerOvé aplikace nasazené do stejného prostředí se nasazují ve stejné virtuální síti a zapisují protokoly do stejného pracovního prostoru služby Log Analytics.


Jednotlivé kontejnerové aplikace se nasazují do prostředí Azure Container Apps. Pokud chcete vytvořit prostředí, spusťte následující příkaz:

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

Nastavení fronty úložiště

Začněte definováním názvu účtu úložiště. Názvy účtů úložiště musí být v rámci Azure jedinečné a musí mít délku 3 až 24 znaků obsahující jenom číslice a malá písmena.

STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"

Vytvořit účet služby Azure Storage

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

Dále získejte připojovací řetězec pro frontu.

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

Teď můžete vytvořit frontu zpráv.

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

Nakonec můžete do fronty odeslat zprávu.

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

Nasazení aplikace na pozadí

Vytvořte soubor s názvem queue.json a vložte do souboru následující konfigurační kód.

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

Teď můžete vytvořit a nasadit aplikaci kontejneru.

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

Tento příkaz nasadí ukázkovou aplikaci z image veřejného kontejneru s názvem mcr.microsoft.com/azuredocs/containerapps-queuereader a nastaví tajné kódy a proměnné prostředí používané aplikací.

Aplikace škáluje kapacitu na 10 replik na základě délky fronty definované v scale části šablony ARM.

Ověření výsledku

Aplikace kontejneru běží jako proces na pozadí. Když zprávy přicházejí z fronty služby Azure Storage, aplikace vytvoří položky protokolu v Log Analytics. Než budete moct dotazovat protokolovaná data, musíte několik minut počkat, než se analýza poprvé dorazí.

Spuštěním následujícího příkazu zobrazte protokolované zprávy. Tento příkaz vyžaduje rozšíření Log Analytics, proto po vyžádání přijměte výzvu k instalaci rozšíření.

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

Tip

Máte problémy? Dejte nám vědět na GitHubu otevřením problému v úložišti Azure Container Apps.

Vyčištění prostředků

Jakmile budete hotovi, spuštěním následujícího příkazu odstraňte skupinu prostředků, která obsahuje vaše prostředky Container Apps.

Upozornění

Následující příkaz odstraní zadanou skupinu prostředků a všechny prostředky obsažené v ní. Pokud prostředky mimo rozsah tohoto kurzu existují v zadané skupině prostředků, odstraní se také.

az group delete \
  --resource-group $RESOURCE_GROUP