Úlohy v Azure Container Apps

Úlohy Azure Container Apps umožňují spouštět kontejnerizované úlohy, které běží po omezenou dobu trvání a pak se zastaví. Úlohy můžete použít k provádění úloh, jako je zpracování dat, strojové učení nebo jakýkoli scénář, ve kterém je vyžadováno zpracování na vyžádání.

Kontejnerové aplikace a úlohy běží ve stejném prostředí a umožňují jim sdílet možnosti, jako jsou sítě a protokolování.

Porovnání aplikací a úloh kontejnerů

V Azure Container Apps existují dva typy výpočetních prostředků: aplikace a úlohy.

Aplikace jsou služby, které běží nepřetržitě. Pokud v aplikaci selže kontejner, automaticky se restartuje. Mezi příklady aplikací patří rozhraní HTTP API, webové aplikace a služby na pozadí, které nepřetržitě zpracovávají vstupy.

Úlohy jsou úkoly, které se spustí, poběží po omezenou dobu trvání a po dokončení se zastaví. Každé spuštění úlohy obvykle vykonává jednu jednotku práce. Úlohy se vykonávají ručně, podle harmonogramu nebo v reakci na události. Mezi příklady úloh patří dávkové procesy spuštěné na vyžádání a úlohy, které jsou naplánované.

Ukázkové scénáře

Následující tabulka porovnává běžné scénáře pro aplikace a úlohy:

Kontejner Výpočetní prostředek Poznámky
Server HTTP, který obsluhuje webový obsah a požadavky rozhraní API Aplikace Nakonfigurujte pravidlo škálování HTTP.
Proces generující finanční sestavy každou noc Práce Použijte typ úlohy Schedule a nakonfigurujte výraz cron.
Nepřetržitě běžící služba, která zpracovává zprávy z fronty služby Azure Service Bus Aplikace Nakonfigurujte vlastní pravidlo škálování.
Úloha, která zpracovává jednu zprávu nebo malou dávku zpráv z fronty služby Azure a poté se zastaví. Práce Použijte typ úlohy událostí a nakonfigurujte vlastní pravidlo škálování pro aktivaci provádění úloh, pokud jsou ve frontě zprávy.
Úloha na pozadí, která se aktivuje na vyžádání a po dokončení se zastaví Práce Pomocí rozhraní API použijte typ ruční úlohy a spusťte spouštění ručně nebo programově.
Spouštěč GitHub Actions s vlastním hostováním nebo agent Azure Pipelines Práce Použijte typ úlohy události a nakonfigurujte pravidlo škálování GitHub Actions nebo Azure Pipelines.
Aplikace Azure Functions Aplikace Nasaďte Azure Functions do kontejnerových aplikací.
Aplikace řízená událostmi, která používá sadu Azure WebJobs SDK Aplikace Nakonfigurujte pravidlo škálování pro každý zdroj událostí.

Koncepty

Prostředí Container Apps je zabezpečená hranice kolem jedné nebo více kontejnerových aplikací a úloh. Tady jsou některé klíčové koncepty:

  • Úlohy: Úloha definuje výchozí konfiguraci, která se používá pro každé spuštění úlohy. Konfigurace zahrnuje image kontejneru, která se má použít, prostředky k přidělení a příkaz ke spuštění.
  • Provádění úlohy: Spuštění úlohy je jediné spuštění úlohy, která se aktivuje ručně, podle plánu nebo v reakci na událost.
  • Replika úlohy: Typické spuštění úlohy spouští jednu repliku definovanou konfigurací úlohy. V pokročilých scénářích může spuštění úlohy spustit více replik.

Diagram, který poskytuje přehled úloh Container Apps

Oprávnění

Pokud chcete spustit úlohu aplikace kontejneru, musíte mít příslušná oprávnění. Ujistěte se, že má váš uživatelský účet nebo instanční objekt přiřazené následující role:

  • Přispěvatel kontejnerových aplikací: Umožňuje oprávnění vytvářet a spravovat aplikace a úlohy kontejnerů.
  • Monitorovací čtečka (volitelné): Umožňuje zobrazení dat monitorování pro úkoly.
  • Vlastní role: Podrobnější oprávnění můžete vytvořit pomocí následujících akcí:
  • microsoft.app/jobs/start/action
  • microsoft.app/jobs/read
  • microsoft.app/jobs/execution/read

Další informace o přiřazování rolí a oprávnění najdete v tématu Řízení přístupu na základě role v Azure.

Typy triggerů úloh

Typ triggeru úlohy určuje způsob spuštění úlohy. K dispozici jsou následující typy triggerů:

  • Ruční: Ruční úlohy se aktivují na vyžádání.
  • Plán: Naplánované úlohy se aktivují v určitých časech a můžou se spouštět opakovaně.
  • Událost: Úlohy řízené událostmi se aktivují událostmi, například zprávou přicházející do fronty.

Ruční úlohy

Ruční úlohy se aktivují na vyžádání prostřednictvím Azure CLI, webu Azure Portal nebo požadavku na rozhraní API Azure Resource Manageru.

Mezi příklady ručních úloh patří:

  • Jednorázová úloha zpracování, jako je migrace dat z jednoho systému do jiného.
  • Elektronický obchod spuštěný jako kontejnerová aplikace zahájí úlohu pro zpracování zásob při zadání objednávky.

Chcete-li vytvořit ruční úlohu, použijte typ Manualúlohy .

Pokud chcete vytvořit ruční úlohu pomocí Azure CLI, použijte tento az containerapp job create příkaz. Následující příklad vytvoří ruční úlohu pojmenovanou my-job ve skupině prostředků s názvem my-resource-group a prostředí Container Apps s názvem my-environment:

az containerapp job create \
    --name "my-job" --resource-group "my-resource-group"  --environment "my-environment" \
    --trigger-type "Manual" \
    --replica-timeout 1800 \
    --replica-retry-limit 0 \
    --replica-completion-count 1 \ 
    --parallelism 1 \ 
    --image "mcr.microsoft.com/k8se/quickstart-jobs:latest" \
    --cpu "0.25" --memory "0.5Gi"

Image mcr.microsoft.com/k8se/quickstart-jobs:latest je veřejná ukázková image kontejneru, která spouští úlohu, která počká několik sekund, vytiskne zprávu do konzoly a pak se zastaví. Informace o ověřování a použití privátní image kontejneru najdete v tématu Kontejnery.

Předchozí příkaz vytvoří pouze úlohu. Pokud chcete spustit provádění úlohy, přečtěte si téma Zahájení provádění úlohy na vyžádání.

Naplánované úlohy

Chcete-li vytvořit naplánovanou úlohu, použijte typ Scheduleúlohy .

Úlohy Container Apps používají k definování plánů výrazy cron. Podporují standardní formát výrazu cron s pěti poli pro minutu, hodinu, den v měsíci, měsíci a dni v týdnu. Tady je několik příkladů výrazů cron:

Výraz Popis
*/5 * * * * Spustí se každých 5 minut.
0 */2 * * * Spustí se každých dvě hodiny.
0 0 * * * Spustí se každý den o půlnoci.
0 0 * * 0 Spustí se každou neděli o půlnoci.
0 0 1 * * Spustí se první den každého měsíce o půlnoci.

Výrazy Cron v naplánovaných úlohách se vyhodnocují ve standardu UTC (Coordinated Universal Time).

Pokud chcete vytvořit naplánovanou úlohu pomocí Azure CLI, použijte az containerapp job create příkaz. Následující příklad vytvoří naplánovanou úlohu pojmenovanou my-job ve skupině prostředků s názvem my-resource-group a prostředí Container Apps s názvem my-environment:

az containerapp job create \
    --name "my-job" --resource-group "my-resource-group"  --environment "my-environment" \
    --trigger-type "Schedule" \
    --replica-timeout 1800 \
    --replica-retry-limit 0 \ 
    --parallelism 1 \
    --replica-completion-count 1 \
    --image "mcr.microsoft.com/k8se/quickstart-jobs:latest" \
    --cpu "0.25" --memory "0.5Gi" \
    --cron-expression "*/1 * * * *"

Image mcr.microsoft.com/k8se/quickstart-jobs:latest je veřejná ukázková image kontejneru, která spouští úlohu, která počká několik sekund, vytiskne zprávu do konzoly a pak se zastaví. Informace o ověřování a použití privátní image kontejneru najdete v tématu Kontejnery.

Výraz cron */1 * * * * spustí úlohu každou minutu.

Úlohy řízené událostmi

Události z podporovaných vlastních škálovačů aktivují úlohy řízené událostmi. Mezi příklady úloh řízených událostmi patří:

  • Úloha, která se spustí při přidání nové zprávy do fronty, jako je Azure Service Bus, Kafka nebo RabbitMQ.
  • Spouštěč GitHub Actions v místním prostředí nebo agent Azure DevOps, který se spustí, když se nová úloha zařadí do fronty v pracovním postupu nebo kanálu.

Kontejnerové aplikace a úlohy řízené událostmi využívají škálovací nástroje KEDA . Obě vyhodnocují pravidla škálování v intervalu dotazování pro měření objemu událostí pro zdroj událostí, ale způsob, jakým používají výsledky, se liší.

Každá replika v aplikaci průběžně zpracovává události a pravidlo škálování určuje počet replik, které se mají spustit, aby splňovaly poptávku. V úlohách řízených událostmi každé spuštění úlohy obvykle zpracovává jednu událost a pravidlo škálování určuje počet spuštění úloh.

Použijte úlohy, když každá událost vyžaduje novou instanci kontejneru s vyhrazenými prostředky nebo musí běžet po dlouhou dobu. Úlohy řízené událostmi jsou koncepčně podobné úlohům škálování KEDA.

Chcete-li vytvořit úlohu řízenou událostmi, použijte typ Eventúlohy .

Pokud chcete vytvořit úlohu řízenou událostmi pomocí Azure CLI, použijte az containerapp job create příkaz. Následující příklad vytvoří úlohu řízenou událostmi pojmenovanou my-job ve skupině prostředků s názvem my-resource-group a prostředí Container Apps s názvem my-environment:

az containerapp job create \
    --name "my-job" --resource-group "my-resource-group"  --environment "my-environment" \
    --trigger-type "Event" \
    --replica-timeout 1800 \
    --image "docker.io/myuser/my-event-driven-job:latest" \
    --cpu "0.25" --memory "0.5Gi" \
    --min-executions "0" \
    --max-executions "10" \
    --scale-rule-name "queue" \
    --scale-rule-type "azure-queue" \
    --scale-rule-metadata "accountName=mystorage" "queueName=myqueue" "queueLength=1" \
    --scale-rule-auth "connection=connection-string-secret" \
    --secrets "connection-string-secret=<QUEUE_CONNECTION_STRING>"

Příklad konfiguruje škálovací pravidlo pro frontu Azure Storage.

Úplný kurz najdete v tématu Nasazení úlohy řízené událostmi.

Zahajte provádění úlohy na vyžádání

U libovolného typu úlohy můžete spustit provádění úlohy na vyžádání.

Pokud chcete spustit provádění úlohy pomocí Azure CLI, použijte tento az containerapp job start příkaz. Následující příklad spustí spuštění úlohy pojmenované my-job ve skupině prostředků s názvem my-resource-group:

az containerapp job start --name "my-job" --resource-group "my-resource-group"

Při spuštění úlohy můžete přepsat její konfiguraci. Můžete například přepsat proměnnou prostředí nebo spouštěcí příkaz pro spuštění stejné úlohy s různými vstupy. Přepsáná konfigurace se používá jenom pro aktuální spuštění a nemění konfiguraci úlohy.

Důležité

Když přepíšete konfiguraci, celá konfigurace šablony úlohy je nahrazena novou konfigurací. Ujistěte se, že nová konfigurace zahrnuje všechna požadovaná nastavení.

Chcete-li po spuštění spuštění přepsat konfiguraci úlohy, použijte az containerapp job start příkaz a předejte soubor YAML obsahující šablonu, která se má použít ke spuštění. Následující příklad spustí spuštění úlohy pojmenované my-job ve skupině prostředků s názvem my-resource-group.

Načtěte aktuální konfiguraci úlohy pomocí az containerapp job show příkazu a uložte šablonu do souboru s názvem my-job-template.yaml:

az containerapp job show --name "my-job" --resource-group "my-resource-group" --query "properties.template" --output yaml > my-job-template.yaml

Tato --query "properties.template" možnost vrátí pouze konfiguraci šablony úlohy.

Upravte soubor my-job-template.yaml a přepište konfiguraci úlohy. Pokud chcete například přepsat proměnné prostředí, upravte oddíl env:

containers:
- name: print-hello
  image: ubuntu
  resources:
    cpu: 1
    memory: 2Gi
  env:
  - name: MY_NAME
    value: Azure Container Apps jobs
  args:
  - /bin/bash
  - -c
  - echo "Hello, $MY_NAME!"

Spusťte úlohu pomocí šablony:

az containerapp job start --name "my-job" --resource-group "my-resource-group" \
    --yaml my-job-template.yaml

Získání historie provádění úloh

Každá úloha Container Apps udržuje historii posledních spuštění úloh.

Pokud chcete získat stavy spuštění úloh pomocí Azure CLI, použijte az containerapp job execution list příkaz. Následující příklad vrátí stav posledního spuštění úlohy pojmenované my-job ve skupině prostředků s názvem my-resource-group:

az containerapp job execution list --name "my-job" --resource-group "my-resource-group"

Historie provádění plánovaných úloh a úloh založených na událostech je omezená na posledních 100 úspěšných a neúspěšných spuštění úloh.

Pokud chcete zobrazit seznam všech spuštění úlohy nebo získat podrobný výstup z úlohy, zadejte dotaz na zprostředkovatele protokolů nakonfigurovaného pro vaše prostředí Container Apps.

Pokročilá konfigurace úlohy

Úlohy Container Apps podporují pokročilé možnosti konfigurace, jako jsou nastavení kontejneru, opakování, vypršení časových limitů a paralelismus.

Nastavení kontejneru

Nastavení kontejneru definují kontejnery, které se mají spouštět v každé replice provádění úlohy. Zahrnují proměnné prostředí, tajné kódy a limity prostředků. Další informace najdete v tématu Kontejnery. Spouštění více kontejnerů v jedné úloze je pokročilý scénář. Většina úloh spouští jeden kontejner.

Nastavení úlohy

Následující tabulka obsahuje nastavení úlohy, která můžete nakonfigurovat:

Nastavení Vlastnost Azure Resource Manageru Parametr rozhraní příkazového řádku Popis
Typ práce triggerType --trigger-type Typ úlohy (Manual, Schedulenebo Event).
Časový limit repliky replicaTimeout --replica-timeout Maximální doba v sekundách čekání na dokončení repliky.
Interval dotazování pollingInterval --polling-interval Doba v sekundách zpoždění mezi dotazováním na události. Výchozí hodnota je 30 sekund.
Limit pokusů o opakování repliky replicaRetryLimit --replica-retry-limit Maximální počet opakování neúspěšné repliky. Pokud chcete repliku selhat bez opakování, nastavte hodnotu na 0. Nastavení replicaTimeout má přednost, pokud vyprší dříve, než se dokončí všechny pokusy o opakování.
Paralelismus parallelism --parallelism Počet replik, které se mají spustit při každém spuštění. U většiny úloh nastavte hodnotu na 1.
Počet dokončení repliky replicaCompletionCount --replica-completion-count Počet replik, které se musí úspěšně dokončit, aby bylo provedení úspěšné. Většina je rovna nebo menší než paralelismus. U většiny úloh nastavte hodnotu na 1.

Příklad

Následující příklad vytvoří úlohu s pokročilými možnostmi konfigurace:

az containerapp job create \
    --name "my-job" --resource-group "my-resource-group"  --environment "my-environment" \
    --trigger-type "Schedule" \
    --replica-timeout 1800 --replica-retry-limit 3 --replica-completion-count 5 --parallelism 5 \
    --image "myregistry.azurecr.io/quickstart-jobs:latest" \
    --cpu "0.25" --memory "0.5Gi" \
    --command "/startup.sh" \
    --env-vars "MY_ENV_VAR=my-value" \
    --cron-expression "0 0 * * *"  \
    --registry-server "myregistry.azurecr.io" \
    --registry-username "myregistry" \
    --registry-password "myregistrypassword"

Sítě úloh a komunikace mezi aplikacemi

Při spuštění podu úlohy je zaručeno, že postranní kontejnery (například proxy Envoy) budou připravené před zahájením provádění hlavního kontejneru úlohy. Tím se zajistí, že volání mezi aplikacemi iniciovaná úlohou při spuštění proběhnou bez selhání připojení úspěšně.

Poznámka:

Pokud vaše úloha při spuštění volá jiné aplikace kontejnerů, nemusíte přidávat logiku pro opakování počátečního stavu připravenosti sidecar kontejneru. Platforma to zpracovává automaticky.

Omezení úloh

Následující funkce nejsou podporovány:

  • Dapr
  • Ingress a související funkce, jako jsou vlastní domény a SSL certifikáty

Další krok