Sdílet prostřednictvím


Kurz: Nasazení úlohy řízené událostmi pomocí Azure Container Apps

Úlohy Azure Container Apps umožňují spouštět kontejnerizované úlohy, které se spouštějí po omezenou dobu trvání a ukončení. Spuštění úlohy můžete aktivovat ručně, podle plánu nebo na základě událostí. Úlohy jsou nejvhodnější pro úlohy, jako je zpracování dat, strojové učení, vyčištění prostředků nebo jakýkoli scénář, který vyžaduje dočasné výpočetní prostředky bez serveru.

V tomto kurzu se naučíte pracovat s úlohami řízenými událostmi.

  • 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
  • Sestavení image kontejneru, která spouští úlohu
  • Nasazení úlohy do prostředí Container Apps
  • Ověřte, že aplikace kontejneru zpracovává zprávy fronty.

Úloha, kterou vytvoříte, spustí spuštění pro každou zprávu, která se odešle do fronty služby Azure Storage. Každé spuštění úlohy spouští kontejner, který provádí následující kroky:

  1. Získá jednu zprávu z fronty.
  2. Zaznamená zprávu do protokolů spuštění úlohy.
  3. Odstraní zprávu z fronty.
  4. Východy.

Důležité

Škálovač monitoruje délku fronty a určuje, kolik úloh se má spustit. Pokud chcete přesné škálování, neodstraňovat zprávu z fronty, dokud se zpracování úlohy nedokončí.

Zdrojový kód pro úlohu, kterou spustíte v tomto kurzu, je k dispozici v úložišti GitHub ukázek Azure.

Požadavky

Nastavení

  1. Pokud se chcete přihlásit k Azure z rozhraní příkazového řádku, spusťte následující příkaz a podle pokynů dokončete proces ověřování.

    az login
    
  2. Pomocí příkazu upgrade se ujistěte, že používáte nejnovější verzi rozhraní příkazového řádku.

    az upgrade
    
  3. Nainstalujte nejnovější verzi rozšíření Azure Container Apps CLI.

    az extension add --name containerapp --upgrade
    
  4. Microsoft.AppZaregistrujte , Microsoft.OperationalInsightsa Microsoft.Storage obory názvů, pokud jste je ještě nezaregistrovali ve svém předplatném Azure.

    az provider register --namespace Microsoft.App
    az provider register --namespace Microsoft.OperationalInsights
    az provider register --namespace Microsoft.Storage
    
  5. Po dokončení nastavení Azure CLI můžete definovat proměnné prostředí, které se používají v tomto článku.

    RESOURCE_GROUP="jobs-quickstart"
    LOCATION="northcentralus"
    ENVIRONMENT="env-jobs-quickstart"
    JOB_NAME="my-job"
    

Vytvoření prostředí Container Apps

Prostředí Azure Container Apps funguje jako zabezpečená hranice pro kontejnerové aplikace a úlohy, aby mohly sdílet stejnou síť a komunikovat mezi sebou.

  1. Vytvořte skupinu prostředků pomocí následujícího příkazu.

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. Pomocí následujícího příkazu vytvořte prostředí Container Apps.

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

Nastavení fronty úložiště

Úloha přijímá zprávy pomocí fronty Azure Storage. V této části vytvoříte účet úložiště a frontu.

  1. Definujte název účtu úložiště.

    STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>"
    QUEUE_NAME="myqueue"
    

    Nahraďte <STORAGE_ACCOUNT_NAME> jedinečným názvem vašeho úč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.

  2. Vytvořit účet služby Azure Storage

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

    Pokud tento příkaz vrátí chybu:

    (SubscriptionNotFound) Subscription <SUBSCRIPTION_ID> was not found.
    Code: SubscriptionNotFound
    Message: Subscription <SUBSCRIPTION_ID> was not found.
    

    Ujistěte se, že jste ve svém předplatném Microsoft.Storage Azure zaregistrovali obor názvů.

    az provider register --namespace Microsoft.Storage
    
  3. Uložte připojovací řetězec fronty do proměnné.

    QUEUE_CONNECTION_STRING=$(az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --output tsv)
    
  4. Vytvořte frontu zpráv.

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

Vytvoření spravované identity přiřazené uživatelem

Abyste se vyhnuli používání přihlašovacích údajů pro správu, načítejte image z privátních úložišť ve službě Microsoft Azure Container Registry pomocí spravovaných identit pro ověřování. Pokud je to možné, použijte spravovanou identitu přiřazenou uživatelem k načtení imagí.

  1. Vytvořte spravovanou identitu přiřazenou uživatelem. Než spustíte následující příkazy, zvolte název vaší spravované identity a nahraďte ho \<PLACEHOLDER\> názvem.

    IDENTITY="<YOUR_IDENTITY_NAME>"
    
    az identity create \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP
    
  2. Získejte ID prostředku identity.

    IDENTITY_ID=$(az identity show \
        --name $IDENTITY \
        --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    

Sestavení a nasazení úlohy

Pokud chcete úlohu nasadit, musíte nejprve sestavit image kontejneru pro úlohu a odeslat ji do registru. Pak můžete úlohu nasadit do prostředí Container Apps.

  1. Definujte název image kontejneru a registru.

    CONTAINER_IMAGE_NAME="queue-reader-job:1.0"
    CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
    

    Nahraďte <CONTAINER_REGISTRY_NAME> jedinečným názvem vašeho registru kontejneru. Názvy registru kontejnerů musí být v Rámci Azure jedinečné a musí mít délku 5 až 50 znaků obsahující číslice a malá písmena.

  2. Vytvořte registr kontejneru.

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic
    
  3. Aby bylo možné použít spravovanou identitu k načtení imagí, musí váš registr kontejneru povolit tokeny cílové skupiny Azure Resource Manageru (ARM).

    Pomocí následujícího příkazu zkontrolujte, jestli mají tokeny ARM povolený přístup ke službě Azure Container Registry (ACR).

    az acr config authentication-as-arm show --registry "$CONTAINER_REGISTRY_NAME"
    

    Pokud jsou povoleny tokeny ARM, příkaz vypíše následující výstup.

    {
      "status": "enabled"
    }
    

    status Pokud anodisabled, povolte tokeny ARM pomocí následujícího příkazu.

    az acr config authentication-as-arm update --registry "$CONTAINER_REGISTRY_NAME" --status enabled
    
  4. Zdrojový kód úlohy je k dispozici na GitHubu. Spuštěním následujícího příkazu naklonujte úložiště a pomocí příkazu sestavte image kontejneru az acr build v cloudu.

    az acr build \
        --registry "$CONTAINER_REGISTRY_NAME" \
        --image "$CONTAINER_IMAGE_NAME" \
        "https://github.com/Azure-Samples/container-apps-event-driven-jobs-tutorial.git"
    

    Image je teď dostupná v registru kontejneru.

  5. Vytvořte úlohu v prostředí Container Apps.

    az containerapp job create \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --environment "$ENVIRONMENT" \
        --trigger-type "Event" \
        --replica-timeout "1800" \
        --min-executions "0" \
        --max-executions "10" \
        --polling-interval "60" \
        --scale-rule-name "queue" \
        --scale-rule-type "azure-queue" \
        --scale-rule-metadata "accountName=$STORAGE_ACCOUNT_NAME" "queueName=$QUEUE_NAME" "queueLength=1" \
        --scale-rule-auth "connection=connection-string-secret" \
        --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \
        --cpu "0.5" \
        --memory "1Gi" \
        --secrets "connection-string-secret=$QUEUE_CONNECTION_STRING" \
        --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io" \
        --mi-user-assigned "$IDENTITY_ID" \
        --registry-identity "$IDENTITY_ID" \
        --env-vars "AZURE_STORAGE_QUEUE_NAME=$QUEUE_NAME" "AZURE_STORAGE_CONNECTION_STRING=secretref:connection-string-secret"
    

    Následující tabulka popisuje klíčové parametry použité v příkazu.

    Parametr Popis
    --replica-timeout Maximální doba trvání, po které může replika provést.
    --min-executions Minimální počet spuštění úloh pro každý interval dotazování.
    --max-executions Maximální počet spuštění úloh pro každý interval dotazování.
    --polling-interval Interval dotazování, ve kterém se má vyhodnotit pravidlo škálování.
    --scale-rule-name Název pravidla škálování
    --scale-rule-type Typ pravidla škálování, které se má použít.
    --scale-rule-metadata Metadata pravidla škálování.
    --scale-rule-auth Ověřování pravidla škálování.
    --secrets Tajné kódy, které se mají použít pro úlohu.
    --registry-server Server registru kontejneru, který se má použít pro úlohu. V případě služby Azure Container Registry příkaz automaticky nakonfiguruje ověřování.
    --mi-user-assigned ID prostředku spravované identity přiřazené uživatelem pro přiřazení k úloze.
    --registry-identity ID prostředku spravované identity pro ověření pomocí serveru registru místo použití uživatelského jména a hesla. Pokud je to možné, vytvoří se pro identitu automaticky přiřazení role acrpull.
    --env-vars Proměnné prostředí, které se mají použít pro úlohu.

    Konfigurace pravidla škálování definuje zdroj událostí, který se má monitorovat. Vyhodnocuje se v každém intervalu dotazování a určuje, kolik spuštění úloh se má aktivovat. Další informace najdete v tématu Nastavení pravidel škálování.

Úloha řízená událostmi se teď vytvoří v prostředí Container Apps.

Ověření nasazení

Úloha je nakonfigurovaná tak, aby vyhodnocovala pravidlo škálování každých 60 sekund, což kontroluje počet zpráv ve frontě. Pro každé období vyhodnocení spustí nové spuštění úlohy pro každou zprávu ve frontě až do maximálního počtu 10 spuštění.

Pokud chcete ověřit, že je úloha správně nakonfigurovaná, můžete do fronty odeslat některé zprávy, potvrdit, že se spustí spuštění úlohy a že se zprávy zaprotokolují do protokolů spuštění úlohy.

  1. Odešle zprávu do fronty.

    az storage message put \
        --content "Hello Queue Reader Job" \
        --queue-name "$QUEUE_NAME" \
        --connection-string "$QUEUE_CONNECTION_STRING"
    
  2. Zobrazí seznam spuštění úlohy.

    az containerapp job execution list \
        --name "$JOB_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --output json
    

    Vzhledem k tomu, že je úloha nakonfigurovaná tak, aby vyhodnocovala pravidlo škálování každých 60 sekund, může spuštění úlohy trvat až minutu. Opakujte příkaz, dokud neuvidíte spuštění úlohy a její stav je Succeeded.

  3. Spuštěním následujících příkazů zobrazte protokolované zprávy. Tyto příkazy vyžadují rozšíření Log Analytics, proto při vyžádání přijměte výzvu k instalaci rozšíření.

    LOG_ANALYTICS_WORKSPACE_ID=$(az containerapp env show --name $ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --output tsv)
    
    az monitor log-analytics query \
        --workspace "$LOG_ANALYTICS_WORKSPACE_ID" \
        --analytics-query "ContainerAppConsoleLogs_CL | where ContainerJobName_s == '$JOB_NAME' | order by _timestamp_d asc"
    

    ContainerAppConsoleLogs_CL Dokud není tabulka připravená, příkaz vrátí chybu: BadArgumentError: The request had some invalid properties. Počkejte několik minut a zkuste akci zopakovat.

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

Další kroky