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.
Behörigheter
För att starta ett containerappjobb krävs lämpliga behörigheter. Kontrollera att ditt användarkonto eller tjänstens huvudnamn har följande roller tilldelade:
- Azure Container Apps-deltagare: Tillåter behörigheter för att skapa och hantera containerappar och jobb.
- Azure Monitor Reader (valfritt): Aktiverar visning av övervakningsdata för jobb.
- Anpassad roll: För mer detaljerade behörigheter kan du skapa en anpassad roll med följande åtgärder:
- Microsoft.App/containerApps/jobs/start/action
- Microsoft.App/containerApps/jobs/read
- Microsoft.App/containerApps/jobs/executions/read
Mer information om hur du tilldelar roller och behörigheter finns i Rollbaserad åtkomstkontroll i Azure.
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ändelser, till exempel ett meddelande som anländer till en kö, utlöser händelsedrivna jobb.
Manuella jobb
Manuella jobb utlöses på begäran med hjälp av Azure CLI, Azure Portal 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