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:
- Získá jednu zprávu z fronty.
- Zaznamená zprávu do protokolů spuštění úlohy.
- Odstraní zprávu z fronty.
- 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
- Účet Azure s aktivním předplatným.
- Pokud jej nemáte, můžete si jej zdarma vytvořit.
- Nainstalujte rozhraní příkazového řádku Azure CLI.
- Seznam omezení najdete v části Omezení úloh.
Nastavení
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
Pomocí příkazu upgrade se ujistěte, že používáte nejnovější verzi rozhraní příkazového řádku.
az upgrade
Nainstalujte nejnovější verzi rozšíření Azure Container Apps CLI.
az extension add --name containerapp --upgrade
Microsoft.App
Zaregistrujte ,Microsoft.OperationalInsights
aMicrosoft.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
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.
Vytvořte skupinu prostředků pomocí následujícího příkazu.
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"
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.
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.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
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)
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í.
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
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.
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.Vytvořte registr kontejneru.
az acr create \ --name "$CONTAINER_REGISTRY_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku Basic
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
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.
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.
Odešle zprávu do fronty.
az storage message put \ --content "Hello Queue Reader Job" \ --queue-name "$QUEUE_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"
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
.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.
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