Jobb i Azure Container Apps

Med Azure Container Apps-jobb kan du köra containerbaserade uppgifter som körs under en begränsad tid och avslutas. Du kan använda jobb för att utföra uppgifter som databearbetning, maskininlärning eller alla scenarier där bearbetning på begäran krävs.

Containerappar och jobb körs i samma miljö, så att de kan dela funktioner som nätverk och loggning.

Jämföra containerappar och jobb

Det finns två typer av beräkningsresurser i Azure Container Apps: appar och jobb.

Appar är tjänster som körs kontinuerligt. Om en container i en app misslyckas startas den om automatiskt. Exempel på appar är HTTP-API:er, webbappar och bakgrundstjänster som kontinuerligt bearbetar indata.

Jobb är uppgifter som startar, körs under en begränsad tid och avslutas när de är klara. Varje körning av ett jobb utför vanligtvis en enda arbetsenhet. Jobbkörningar startar manuellt, enligt ett schema eller som svar på händelser. Exempel på jobb är batchprocesser som körs på begäran och schemalagda aktiviteter.

Exempelscenarier

I följande tabell jämförs vanliga scenarier för appar och jobb:

Container Beräkningsresurs Kommentar
En HTTP-server som hanterar webbinnehåll och API-begäranden App Konfigurera en HTTP-skalningsregel.
En process som genererar finansiella rapporter varje natt Projekt Använd jobbtypen Schemalägg och konfigurera ett cron-uttryck.
En tjänst som körs kontinuerligt och som bearbetar meddelanden från en Azure Service Bus-kö App Konfigurera en anpassad skalningsregel.
Ett jobb som bearbetar ett enskilt meddelande eller en liten grupp meddelanden från en Azure-kö och avslutar Projekt Använd jobbtypen Händelse och konfigurera en anpassad skalningsregel för att utlösa jobbkörningar när det finns meddelanden i kön.
En bakgrundsaktivitet som utlöses på begäran och avslutas när den är klar Projekt Använd den manuella jobbtypen och starta körningar manuellt eller programmatiskt med hjälp av ett API.
En lokalt installerad GitHub Actions-löpare eller Azure Pipelines-agent Projekt Använd händelsejobbtypen och konfigurera en GitHub Actions- eller Azure Pipelines-skalningsregel.
En Azure Functions-app App Distribuera Azure Functions till Container Apps.
En händelsedriven app med Azure WebJobs SDK App Konfigurera en skalningsregel för varje händelsekälla.

Begrepp

En Container Apps-miljö är en säker gräns runt en eller flera containerappar och jobb. Jobb omfattar några viktiga begrepp:

  • Jobb: Ett jobb definierar standardkonfigurationen som används för varje jobbkörning. Konfigurationen innehåller containeravbildningen som ska användas, de resurser som ska allokeras och kommandot som ska köras.
  • Jobbkörning: En jobbkörning är en enda körning av ett jobb som utlöses manuellt, enligt ett schema eller som svar på en händelse.
  • Jobbreplik: En typisk jobbkörning kör en replik som definieras av jobbets konfiguration. I avancerade scenarier kan en jobbkörning köra flera repliker.

Översikt över Azure Container Apps-jobb.

Jobbutlösartyper

Ett jobbs utlösartyp avgör hur jobbet startas. Följande utlösartyper är tillgängliga:

  • Manuell: Manuella jobb utlöses på begäran.
  • Schema: Schemalagda jobb utlöses vid specifika tidpunkter och kan köras upprepade gånger.
  • Händelse: Händelsedrivna jobb utlöses av händelser som ett meddelande som anländer till en kö.

Manuella jobb

Manuella jobb utlöses på begäran med hjälp av Azure CLI, Azure-portalen eller en begäran till Azure Resource Manager-API:et.

Exempel på manuella jobb är:

  • En gång bearbetas uppgifter som att migrera data från ett system till ett annat.
  • En e-handelswebbplats som körs som containerapp startar en jobbkörning för att bearbeta inventeringen när en beställning görs.

Om du vill skapa ett manuellt jobb använder du jobbtypen Manual.

Om du vill skapa ett manuellt jobb med hjälp av Azure CLI använder du az containerapp job create kommandot . I följande exempel skapas ett manuellt jobb med namnet my-job i en resursgrupp med namnet my-resource-group och en Container Apps-miljö med namnet 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"

Avbildningen mcr.microsoft.com/k8se/quickstart-jobs:latest är en offentlig exempelcontaineravbildning som kör ett jobb som väntar några sekunder, skriver ut ett meddelande till konsolen och sedan avslutar. Information om hur du autentiserar och använder en privat containeravbildning finns i Containrar.

Kommandot ovan skapar bara jobbet. Information om hur du startar en jobbkörning finns i Starta en jobbkörning på begäran.

Schemalagda jobb

Om du vill skapa ett schemalagt jobb använder du jobbtypen Schedule.

Container Apps-jobb använder cron-uttryck för att definiera scheman. Det stöder standarduttrycksformatet cron med fem fält för minut, timme, dag i månaden, månad och veckodag. Följande är exempel på cron-uttryck:

Uttryck beskrivning
*/5 * * * * Körs var 5:e minut.
0 */2 * * * Körs varannan timme.
0 0 * * * Körs varje dag vid midnatt.
0 0 * * 0 Körs varje söndag vid midnatt.
0 0 1 * * Körs den första dagen i varje månad vid midnatt.

Cron-uttryck i schemalagda jobb utvärderas i Coordinated Universal Time (UTC).

Om du vill skapa ett schemalagt jobb med hjälp av Azure CLI använder du az containerapp job create kommandot . I följande exempel skapas ett schemalagt jobb med namnet my-job i en resursgrupp med namnet my-resource-group och en Container Apps-miljö med namnet 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 * * * *"

Avbildningen mcr.microsoft.com/k8se/quickstart-jobs:latest är en offentlig exempelcontaineravbildning som kör ett jobb som väntar några sekunder, skriver ut ett meddelande till konsolen och sedan avslutar. Information om hur du autentiserar och använder en privat containeravbildning finns i Containrar.

Cron-uttrycket */1 * * * * kör jobbet varje minut.

Händelsedrivna jobb

Händelsedrivna jobb utlöses av händelser från anpassade skalare som stöds. Exempel på händelsedrivna jobb är:

  • Ett jobb som körs när ett nytt meddelande läggs till i en kö, till exempel Azure Service Bus, Kafka eller RabbitMQ.
  • En GitHub Actions-löpare med egen värd eller Azure DevOps-agent som körs när ett nytt jobb placeras i kö i ett arbetsflöde eller en pipeline.

Containerappar och händelsedrivna jobb använder KEDA-skalare . Båda utvärderar skalningsregler för ett avsökningsintervall för att mäta mängden händelser för en händelsekälla, men sättet de använder resultaten på är annorlunda.

I en app bearbetar varje replik kontinuerligt händelser och en skalningsregel avgör antalet repliker som ska köras för att möta efterfrågan. I händelsedrivna jobb bearbetar varje jobbkörning vanligtvis en enskild händelse, och en skalningsregel avgör antalet jobbkörningar som ska köras.

Använd jobb när varje händelse kräver en ny instans av containern med dedikerade resurser eller måste köras under lång tid. Händelsedrivna jobb liknar keda-skalningsjobb konceptuellt.

Om du vill skapa ett händelsedrivet jobb använder du jobbtypen Event.

Om du vill skapa ett händelsedrivet jobb med hjälp av Azure CLI använder du az containerapp job create kommandot . I följande exempel skapas ett händelsedrivet jobb med namnet my-job i en resursgrupp med namnet my-resource-group och en Container Apps-miljö med namnet 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>"

Exemplet konfigurerar en skalningsregel för Azure Storage-köer.

En fullständig självstudie finns i Distribuera ett händelsedrivet jobb.

Starta en jobbkörning på begäran

För alla jobbtyper kan du starta en jobbkörning på begäran.

Om du vill starta en jobbkörning med hjälp av Azure CLI använder du az containerapp job start kommandot . I följande exempel startar en körning av ett jobb med namnet my-job i en resursgrupp med namnet my-resource-group:

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

När du startar en jobbkörning kan du välja att åsidosätta jobbets konfiguration. Du kan till exempel åsidosätta en miljövariabel eller startkommandot för att köra samma jobb med olika indata. Den åsidosatta konfigurationen används endast för den aktuella körningen och ändrar inte jobbets konfiguration.

Viktigt!

När du åsidosättar konfigurationen ersätts jobbets hela mallkonfiguration med den nya konfigurationen. Se till att den nya konfigurationen innehåller alla nödvändiga inställningar.

Om du vill åsidosätta jobbets konfiguration när du startar en körning använder du az containerapp job start kommandot och skickar en YAML-fil som innehåller mallen som ska användas för körningen. I följande exempel startas en körning av ett jobb med namnet my-job i en resursgrupp med namnet my-resource-group.

Hämta jobbets aktuella konfiguration med az containerapp job show kommandot och spara mallen i en fil med namnet 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

Alternativet --query "properties.template" returnerar endast jobbets mallkonfiguration.

my-job-template.yaml Redigera filen för att åsidosätta jobbets konfiguration. Om du till exempel vill åsidosätta miljövariablerna ändrar du avsnittet 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!"

Starta jobbet med hjälp av mallen:

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

Hämta jobbkörningshistorik

Varje Container Apps-jobb har en historik över de senaste jobbkörningarna.

Använd kommandot för att hämta status för jobbkörningar med hjälp av Azure CLI az containerapp job execution list . I följande exempel returneras status för den senaste körningen av ett jobb med namnet my-job i en resursgrupp med namnet my-resource-group:

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

Körningshistoriken för schemalagda och händelsebaserade jobb är begränsad till de senaste 100 lyckade och misslyckade jobbkörningarna.

Om du vill visa en lista över alla körningar av ett jobb eller hämta detaljerade utdata från ett jobb frågar du den loggprovider som har konfigurerats för containerappmiljön.

Avancerad jobbkonfiguration

Container Apps-jobb stöder avancerade konfigurationsalternativ som containerinställningar, återförsök, tidsgränser och parallellitet.

Containerinställningar

Containerinställningar definierar vilka containrar som ska köras i varje replik av en jobbkörning. De omfattar miljövariabler, hemligheter och resursgränser. Mer information finns i Containrar. Att köra flera containrar i ett enda jobb är ett avancerat scenario. De flesta jobb kör en enda container.

Jobbinställningar

Följande tabell innehåller de jobbinställningar som du kan konfigurera:

Inställning Azure Resource Manager-egenskap CLI-parameter beskrivning
Jobbtyp triggerType --trigger-type Typen av jobb. (Manual, Schedule, eller Event)
Tidsgräns för replik replicaTimeout --replica-timeout Den maximala tiden i sekunder för att vänta tills en replik har slutförts.
Avsökningsintervall pollingInterval --polling-interval Tiden i sekunder att vänta mellan avsökningen för händelser. Standardvärdet är 30 sekunder.
Gräns för replikeringsförsök replicaRetryLimit --replica-retry-limit Det maximala antalet gånger för att försöka igen med en misslyckad replik. Om du vill misslyckas med en replik utan att försöka igen anger du värdet till 0.
Parallellitet parallelism --parallelism Antalet repliker som ska köras per körning. För de flesta jobb anger du värdet till 1.
Antal repliker replicaCompletionCount --replica-completion-count Antalet repliker som ska slutföras för att körningen ska lyckas. De flesta är lika med eller mindre än parallelliteten. För de flesta jobb anger du värdet till 1.

Exempel

I följande exempel skapas ett jobb med avancerade konfigurationsalternativ:

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"

Jobbbegränsningar

Följande funktioner stöds inte:

  • Dapr
  • Inkommande och relaterade funktioner som anpassade domäner och SSL-certifikat

Nästa steg