Úlohy v 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í. Ú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 se kontejner v aplikaci nezdaří, 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í ukončí. Každé spuštění úlohy obvykle provádí jednu jednotku práce. Spouštění úloh se spouští ručně, podle plánu nebo v reakci na události. Mezi příklady úloh patří dávkové procesy, které běží na vyžádání a naplánované úlohy.

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 Notes
Server HTTP, který obsluhuje webový obsah a požadavky rozhraní API Aplikace Nakonfigurujte pravidlo škálování HTTP.
Proces, který generuje finanční sestavy každou noc Úloha Použijte typ úlohy Schedule a nakonfigurujte výraz cron.
Nepřetržitě spuštěná 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 Azure a ukončí se Úloha 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 ukončí Úloha Použijte ruční typ úlohy a spusťte spouštění ručně nebo programově pomocí rozhraní API.
Spouštěč GitHub Actions v místním prostředí nebo agent Azure Pipelines Úloha 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 pomocí sady 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. Úlohy zahrnují několik klíčových konceptů:

  • Úloha: Ú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 jedno 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.

Přehled úloh Azure Container Apps

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, jako je například zpráva přicházející do fronty.

Ruční úlohy

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

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

  • Jednorázové zpracování úloh, jako je migrace dat z jednoho systému do jiného.
  • Web elektronického obchodování spuštěný jako aplikace kontejneru spustí spuštění úlohy pro zpracování inventáře při umístě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 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 \
    --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á spustí úlohu, která počká několik sekund, vytiskne zprávu do konzoly a pak se ukončí. Pokud chcete ověřit a použít privátní image kontejneru, přečtěte si téma Kontejnery.

Výše uvedený příkaz pouze vytvoří ú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. Podporuje standardní formát výrazu cron s pěti poli pro minutu, hodinu, den v měsíci, měsíci a den v týdnu. Tady jsou příklady výrazů cron:

Expression 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 tento 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 \
    --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á spustí úlohu, která počká několik sekund, vytiskne zprávu do konzoly a pak se ukončí. Pokud chcete ověřit a použít privátní image kontejneru, přečtěte si téma Kontejnery.

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

Úlohy řízené událostmi

Úlohy řízené událostmi se aktivují událostmi z podporovaných vlastních škálovačů. 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 nepřetržitě 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.

Úlohy použijte, když každá událost vyžaduje novou instanci kontejneru s vyhrazenými prostředky nebo musí běžet 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 pravidlo škálování fronty Azure Storage.

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

Spuště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 úlohu pomocí Azure CLI, použijte 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 konfiguraci úlohy. 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é

Při přepsání konfigurace se celá konfigurace šablony úlohy nahradí novou konfigurací. Ujistěte se, že nová konfigurace zahrnuje všechna požadovaná nastavení.

Pokud chcete při 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.

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

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 čekání mezi dotazováním událostí. Výchozí hodnota je 30 sekund.
Limit 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 0hodnotu .
Paralelismus parallelism --parallelism Počet replik, které se mají spustit na spuštění. U většiny úloh nastavte hodnotu na 1hodnotu .
Počet dokončení repliky replicaCompletionCount --replica-completion-count Počet replik, které se úspěšně dokončí, aby bylo spuštění úspěšné. Většina je rovna nebo menší než paralelismus. U většiny úloh nastavte hodnotu na 1hodnotu .

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"

Omezení úloh

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

  • Dapr
  • Příchozí přenos dat a související funkce, jako jsou vlastní domény a certifikáty SSL

Další kroky