Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Úlohy Azure Container Apps umožňují spouštět kontejnerizované úlohy, které běží po omezenou dobu trvání a pak se zastaví. 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, ve kterém se nasadí vaše kontejnerové aplikace
- Vytvořte frontu Azure Storage pro odesílání zpráv do kontejnerové aplikace
- Sestavte obraz kontejneru, který spouští úlohu
- Nasazení úlohy do prostředí Container Apps
- Ověřte, zda aplikace v kontejneru zpracovává zprávy ve frontě.
Ú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:
- Získá jednu zprávu z fronty.
- Zaznamená zprávu do protokolů spuštění úlohy.
- Odstraní zprávu z fronty.
- Zastaví.
Důležité
Škálovač fronty monitoruje délku fronty pro určení počtu úloh, které se mají spustit. Pokud chcete správné škálování, neodstraňujte zprávu z fronty, dokud úloha neskončí zpracováním.
Zdrojový kód pro úlohu, kterou spustíte v tomto kurzu, je k dispozici v úložišti Azure ukázek GitHub.
Požadavky
- Účet Azure s aktivním předplatným. Pokud jej nemáte, můžete si jej zdarma vytvořit.
- Azure CLI.
Informace o funkcích, které úlohy Container Apps nepodporují, najdete v tématu Omezení úloh.
Příprava prostředí
Pokud se chcete přihlásit k Azure z Azure CLI, spusťte následující příkaz a podle pokynů dokončete proces ověřování.
az loginPomocí příkazu se ujistěte, že používáte nejnovější verzi Azure CLI
az upgrade.az upgradeNainstalujte nejnovější verzi rozšíření Rozhraní příkazového řádku Container Apps.
az extension add --name containerapp --upgradeZaregistrujte obory názvů
Microsoft.App,Microsoft.OperationalInsightsaMicrosoft.Storage, pokud ještě nejsou zaregistrované ve vašem předplatném Azure.az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights az provider register --namespace Microsoft.StorageDefinujte 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í Container Apps funguje jako hranice izolace kolem kontejnerových aplikací a úloh, aby mohly sdílet stejnou síť a komunikovat mezi sebou.
Pomocí následujícího příkazu vytvořte skupinu prostředků.
az group create \ --name "$RESOURCE_GROUP" \ --location "$LOCATION"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"
Vytvoření fronty úložiště
Úloha využívá frontu Azure Storage pro přijímání zpráv. V této části vytvoříte účet úložiště a frontu.
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é. Musí mít délku 3 až 24 znaků a musí obsahovat jenom číslice a malá písmena.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 StorageV2Pokud tento příkaz vrátí následující chybu, ujistěte se, že jste ve svém předplatném Azure zaregistrovali
Microsoft.Storageobor názvů.(SubscriptionNotFound) Subscription <SUBSCRIPTION_ID> was not found. Code: SubscriptionNotFound Message: Subscription <SUBSCRIPTION_ID> was not found.Pomocí tohoto příkazu zaregistrujte obor názvů:
az provider register --namespace Microsoft.StorageUlož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)Vytvořte frontu zpráv:
az storage queue create \ --name "$QUEUE_NAME" \ --account-name "$STORAGE_ACCOUNT_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"
Vytvořit spravovanou identitu přiřazenou 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ě Azure Container Registry. Pro ověřování používejte spravované identity. Pokud je to možné, použijte uživatelsky přiřazenou spravovanou identitu k načtení obrazů.
Vytvořte spravovanou identitu přiřazenou uživatelem. Než spustíte následující příkazy, zvolte název spravované identity a vytvořte následující proměnnou:
IDENTITY="<YOUR_IDENTITY_NAME>"az identity create \ --name $IDENTITY \ --resource-group $RESOURCE_GROUPZí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 vytvořit image kontejneru a odeslat kontejner do registru. Úlohu pak můžete nasadit do prostředí Container Apps.
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é. Musí mít délku 5 až 50 znaků a musí obsahovat jenom číslice a malá písmena.Vytvořte registr kontejneru:
az acr create \ --name "$CONTAINER_REGISTRY_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku BasicAby bylo možné použít spravovanou identitu k načtení image, musí váš registr kontejneru povolit audience tokeny Azure Resource Manager (ARM) pro autentizaci.
Pomocí následujícího příkazu zkontrolujte, jestli mají tokeny ARM povolený přístup k vašemu registru kontejneru Azure:
az acr config authentication-as-arm show --registry "$CONTAINER_REGISTRY_NAME"Pokud jsou povolené tokeny ARM, zobrazí se následující výstup:
{ "status": "enabled" }statusPokud jedisabled, povolte tokeny ARM pomocí následujícího příkazu:az acr config authentication-as-arm update --registry "$CONTAINER_REGISTRY_NAME" --status enabledZdrojový kód úlohy je k dispozici na GitHubu. Spuštěním následujícího příkazu naklonujte úložiště a sestavte image kontejneru 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.
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ředchozím příkazu.
Parametr Popis --replica-timeoutMaximální doba, po kterou může replika běžet. --min-executionsMinimální počet spuštění úloh během každého intervalu dotazování. --max-executionsMaximální počet spuštění úloh během každého dotazovacího intervalu. --polling-intervalInterval dotazování, ve kterém se má vyhodnotit pravidlo škálování. --scale-rule-nameNázev pravidla škálování --scale-rule-typeTyp pravidla škálování, které se má použít. --scale-rule-metadataMetadata pravidla škálování. --scale-rule-authOvěřování pravidla škálování. --secretsTajné kódy, které se mají použít pro úlohu. --registry-serverServer registru kontejneru, který se má použít pro úlohu. V případě registru kontejneru Azure příkaz automaticky nakonfiguruje ověřování. --mi-user-assignedID prostředku uživatelsky přiřazené spravované identity, kterou chcete přiřadit k úloze. --registry-identityID 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é, automaticky se vytvoří přiřazení role pro acrpullidentitu.--env-varsPromě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. Toto hodnocení ověřuje 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 a potvrdit, že se spustí spuštění úlohy a že se zprávy zaprotokolují do protokolů spuštění úlohy.
Odeslat zprávu do fronty.
az storage message put \ --content "Hello Queue Reader Job" \ --queue-name "$QUEUE_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"Vypsat seznam provedení úlohy:
az containerapp job execution list \ --name "$JOB_NAME" \ --resource-group "$RESOURCE_GROUP" \ --output jsonVzhledem 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.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ř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_CLDokud 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.
Vyčištění prostředků
Až 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 existují prostředky mimo rozsah tohoto kurzu v zadané skupině prostředků, budou také odstraněny.
az group delete \
--resource-group $RESOURCE_GROUP