Delen via


Taken in Azure Container Apps

Met Azure Container Apps-taken kunt u containertaken uitvoeren die worden uitgevoerd voor een eindige duur en afsluiten. U kunt taken gebruiken om taken uit te voeren, zoals gegevensverwerking, machine learning of een scenario waarin verwerking op aanvraag is vereist.

Container-apps en -taken worden uitgevoerd in dezelfde omgeving, zodat ze mogelijkheden kunnen delen, zoals netwerken en logboekregistratie.

Container-apps en -taken vergelijken

Er zijn twee typen rekenresources in Azure Container Apps: apps en taken.

Apps zijn services die continu worden uitgevoerd. Als een container in een app mislukt, wordt deze automatisch opnieuw opgestart. Voorbeelden van apps zijn HTTP-API's, web-apps en achtergrondservices die continu invoer verwerken.

Taken zijn taken die beginnen, worden uitgevoerd voor een eindige duur en afsluiten wanneer ze klaar zijn. Elke uitvoering van een taak voert doorgaans één werkeenheid uit. Taakuitvoeringen worden handmatig gestart, volgens een schema of in reactie op gebeurtenissen. Voorbeelden van taken zijn batchprocessen die op aanvraag en geplande taken worden uitgevoerd.

Voorbeeldscenario's

In de volgende tabel worden veelvoorkomende scenario's voor apps en taken vergeleken:

Container Rekenresource Opmerkingen
Een HTTP-server die webinhoud en API-aanvragen verwerkt App Configureer een HTTP-schaalregel.
Een proces dat 's nachts financiële rapporten genereert Project Gebruik het taaktype Planning en configureer een cron-expressie.
Een continu uitgevoerde service waarmee berichten uit een Azure Service Bus-wachtrij worden verwerkt App Configureer een aangepaste schaalregel.
Een taak die één bericht of een kleine batch berichten uit een Azure-wachtrij verwerkt en afsluit Project Gebruik het taaktype Gebeurtenis en configureer een aangepaste schaalregel om taakuitvoeringen te activeren wanneer er berichten in de wachtrij staan.
Een achtergrondtaak die on-demand wordt geactiveerd en wordt afgesloten wanneer u klaar bent Project Gebruik het type handmatige taak en start de uitvoeringen handmatig of programmatisch met behulp van een API.
Een zelf-hostende GitHub Actions-agent of Azure Pipelines-agent Project Gebruik het type gebeurtenistaak en configureer een GitHub Actions - of Azure Pipelines-schaalregel .
Een Azure Functions-app App Azure Functions implementeren in Container Apps.
Een gebeurtenisgestuurde app met behulp van de Azure WebJobs SDK App Configureer een schaalregel voor elke gebeurtenisbron.

Concepten

Een Container Apps-omgeving is een veilige grens rond een of meer container-apps en -taken. Voor taken zijn enkele belangrijke concepten betrokken:

  • Taak: Een taak definieert de standaardconfiguratie die wordt gebruikt voor elke taakuitvoering. De configuratie bevat de containerinstallatiekopieën die moeten worden gebruikt, de resources die moeten worden toegewezen en de opdracht die moet worden uitgevoerd.
  • Taakuitvoering: Een taakuitvoering is één uitvoering van een taak die handmatig wordt geactiveerd, volgens een planning of als reactie op een gebeurtenis.
  • Taakreplica: Bij een normale taakuitvoering wordt één replica uitgevoerd die is gedefinieerd door de configuratie van de taak. In geavanceerde scenario's kan een taakuitvoering meerdere replica's uitvoeren.

Overzicht van Azure Container Apps-taken.

Machtigingen

Als u een container-app-taak wilt starten, zijn de juiste machtigingen vereist. Zorg ervoor dat aan uw gebruikersaccount of service-principal de volgende rollen zijn toegewezen:

  • Inzender voor Azure Container Apps: hiermee kunt u machtigingen voor het maken en beheren van container-apps en -taken toestaan.
  • Azure Monitor Reader (optioneel): Hiermee kunt u bewakingsgegevens voor taken weergeven.
  • Aangepaste rol: Voor gedetailleerdere machtigingen kunt u een aangepaste rol maken met de volgende acties:
  • Microsoft.App/containerApps/jobs/start/action
  • Microsoft.App/containerApps/jobs/read
  • Microsoft.App/containerApps/jobs/executions/read

Zie Op rollen gebaseerd toegangsbeheer van Azure voor meer informatie over het toewijzen van rollen en machtigingen.

Typen taaktriggers

Het triggertype van een taak bepaalt hoe de taak wordt gestart. De volgende triggertypen zijn beschikbaar:

  • Handmatig: Handmatige taken worden op aanvraag geactiveerd.
  • Planning: Geplande taken worden op specifieke tijdstippen geactiveerd en kunnen herhaaldelijk worden uitgevoerd.
  • Gebeurtenis: Gebeurtenissen, zoals een bericht dat binnenkomt in een wachtrij, activeren gebeurtenisgestuurde taken.

Handmatige taken

Handmatige taken worden op aanvraag geactiveerd met behulp van de Azure CLI, Azure Portal of een aanvraag voor de Azure Resource Manager-API.

Voorbeelden van handmatige taken zijn:

  • Eenmalig verwerken van taken, zoals het migreren van gegevens van het ene systeem naar het andere.
  • Een e-commercesite die als container-app wordt uitgevoerd, start een taakuitvoering om inventaris te verwerken wanneer een bestelling wordt geplaatst.

Als u een handmatige taak wilt maken, gebruikt u het taaktype Manual.

Als u een handmatige taak wilt maken met behulp van de Azure CLI, gebruikt u de az containerapp job create opdracht. In het volgende voorbeeld wordt een handmatige taak gemaakt met de naam my-job van een resourcegroep my-resource-group en een Container Apps-omgeving met de naam 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"

De mcr.microsoft.com/k8se/quickstart-jobs:latest installatiekopieën zijn een openbare voorbeeldcontainerinstallatiekopieën waarmee een taak wordt uitgevoerd die een paar seconden wacht, een bericht naar de console afdrukt en vervolgens wordt afgesloten. Zie Containers als u een privécontainerinstallatiekopieën wilt verifiëren en gebruiken.

Met de bovenstaande opdracht wordt alleen de taak gemaakt. Zie Een taakuitvoering starten op aanvraag om een taakuitvoering te starten.

Geplande jobs

Als u een geplande taak wilt maken, gebruikt u het taaktype Schedule.

Container Apps-taken maken gebruik van cron-expressies om planningen te definiëren. Het ondersteunt de standaard cron-expressie-indeling met vijf velden voor minuut, uur, dag van maand, maand en dag van de week. Hier volgen enkele voorbeelden van cron-expressies:

Expression Beschrijving
*/5 * * * * Wordt elke 5 minuten uitgevoerd.
0 */2 * * * Wordt elke twee uur uitgevoerd.
0 0 * * * Wordt elke dag om middernacht uitgevoerd.
0 0 * * 0 Wordt elke zondag om middernacht uitgevoerd.
0 0 1 * * Wordt uitgevoerd op de eerste dag van elke maand om middernacht.

Cron-expressies in geplande taken worden geëvalueerd in Coordinated Universal Time (UTC).

Als u een geplande taak wilt maken met behulp van de Azure CLI, gebruikt u de az containerapp job create opdracht. In het volgende voorbeeld wordt een geplande taak gemaakt met de naam my-job my-resource-group in een resourcegroep en een Container Apps-omgeving met de naam 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 * * * *"

De mcr.microsoft.com/k8se/quickstart-jobs:latest installatiekopieën zijn een openbare voorbeeldcontainerinstallatiekopieën waarmee een taak wordt uitgevoerd die een paar seconden wacht, een bericht naar de console afdrukt en vervolgens wordt afgesloten. Zie Containers als u een privécontainerinstallatiekopieën wilt verifiëren en gebruiken.

Met de cron-expressie */1 * * * * wordt de taak elke minuut uitgevoerd.

Gebeurtenisgestuurde taken

Gebeurtenisgestuurde taken worden geactiveerd door gebeurtenissen van ondersteunde aangepaste schaalders. Voorbeelden van gebeurtenisgestuurde taken zijn:

  • Een taak die wordt uitgevoerd wanneer een nieuw bericht wordt toegevoegd aan een wachtrij, zoals Azure Service Bus, Kafka of RabbitMQ.
  • Een zelf-hostende GitHub Actions-runner of Azure DevOps-agent die wordt uitgevoerd wanneer een nieuwe taak in de wachtrij wordt geplaatst in een werkstroom of pijplijn.

Container-apps en gebeurtenisgestuurde taken maken gebruik van KEDA-schaalders . Ze evalueren beide schaalregels voor een polling-interval om het aantal gebeurtenissen voor een gebeurtenisbron te meten, maar de manier waarop ze de resultaten gebruiken, verschilt.

In een app verwerkt elke replica continu gebeurtenissen en een schaalregel bepaalt het aantal replica's dat moet worden uitgevoerd om te voldoen aan de vraag. In gebeurtenisgestuurde taken verwerkt elke taakuitvoering doorgaans één gebeurtenis en bepaalt een schaalregel het aantal taakuitvoeringen dat moet worden uitgevoerd.

Gebruik taken wanneer voor elke gebeurtenis een nieuw exemplaar van de container met toegewezen resources is vereist of dat deze lang moet worden uitgevoerd. Gebeurtenisgestuurde taken zijn conceptueel vergelijkbaar met KEDA-schaaltaken.

Als u een gebeurtenisgestuurde taak wilt maken, gebruikt u het taaktype Event.

Gebruik de az containerapp job create opdracht om een gebeurtenisgestuurde taak te maken met behulp van de Azure CLI. In het volgende voorbeeld wordt een gebeurtenisgestuurde taak gemaakt met de naam my-job my-resource-group in een resourcegroep en een Container Apps-omgeving met de naam 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>"

In het voorbeeld wordt een regel voor azure Storage-wachtrijschaal geconfigureerd.

Zie Een gebeurtenisgestuurde taak implementeren voor een volledige zelfstudie.

Een taakuitvoering starten op aanvraag

Voor elk taaktype kunt u een taakuitvoering op aanvraag starten.

Gebruik de az containerapp job start opdracht om een taak uit te voeren met behulp van de Azure CLI. In het volgende voorbeeld wordt een uitvoering gestart van een taak met de naam my-job in een resourcegroep met de naam my-resource-group:

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

Wanneer u een taakuitvoering start, kunt u ervoor kiezen om de configuratie van de taak te overschrijven. U kunt bijvoorbeeld een omgevingsvariabele of de opstartopdracht overschrijven om dezelfde taak met verschillende invoer uit te voeren. De overschreven configuratie wordt alleen gebruikt voor de huidige uitvoering en wijzigt de configuratie van de taak niet.

Belangrijk

Wanneer u de configuratie overschrijft, wordt de volledige sjabloonconfiguratie van de taak vervangen door de nieuwe configuratie. Zorg ervoor dat de nieuwe configuratie alle vereiste instellingen bevat.

Als u de configuratie van de taak wilt overschrijven tijdens het starten van een uitvoering, gebruikt u de az containerapp job start opdracht en geeft u een YAML-bestand door dat de sjabloon bevat die moet worden gebruikt voor de uitvoering. In het volgende voorbeeld wordt een uitvoering gestart van een taak met de naam my-job in een resourcegroep met de naam my-resource-group.

Haal de huidige configuratie van de taak op met de az containerapp job show opdracht en sla de sjabloon op in een bestand met de naam 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

De --query "properties.template" optie retourneert alleen de sjabloonconfiguratie van de taak.

Bewerk het my-job-template.yaml bestand om de configuratie van de taak te overschrijven. Als u bijvoorbeeld de omgevingsvariabelen wilt overschrijven, wijzigt u de env sectie:

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!"

Start de taak met behulp van de sjabloon:

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

Uitvoeringsgeschiedenis van taak ophalen

Elke Container Apps-taak onderhoudt een geschiedenis van recente taakuitvoeringen.

Gebruik de az containerapp job execution list opdracht om de statussen van taakuitvoeringen op te halen met behulp van de Azure CLI. In het volgende voorbeeld wordt de status geretourneerd van de meest recente uitvoering van een taak met de naam my-job in een resourcegroep met de naam my-resource-group:

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

De uitvoeringsgeschiedenis voor geplande en op gebeurtenissen gebaseerde taken is beperkt tot de meest recente 100 geslaagde en mislukte taakuitvoeringen.

Als u alle uitvoeringen van een taak wilt weergeven of gedetailleerde uitvoer van een taak wilt ophalen, voert u een query uit op de logboekprovider die is geconfigureerd voor uw Container Apps-omgeving.

Geavanceerde taakconfiguratie

Container Apps-taken ondersteunen geavanceerde configuratieopties, zoals containerinstellingen, nieuwe pogingen, time-outs en parallelle uitvoering.

Containerinstellingen

Containerinstellingen definiëren de containers die moeten worden uitgevoerd in elke replica van een taakuitvoering. Ze omvatten omgevingsvariabelen, geheimen en resourcelimieten. Zie Containers voor meer informatie. Het uitvoeren van meerdere containers in één taak is een geavanceerd scenario. De meeste taken voeren één container uit.

Taakinstellingen

De volgende tabel bevat de taakinstellingen die u kunt configureren:

Instelling Azure Resource Manager-eigenschap CLI-parameter Beschrijving
Functietype triggerType --trigger-type Het type taak. (Manual, Scheduleof Event)
Time-out voor replica replicaTimeout --replica-timeout De maximale tijd in seconden om te wachten totdat een replica is voltooid.
Peilinginterval pollingInterval --polling-interval De tijd in seconden om te wachten tussen polling voor gebeurtenissen. De standaardwaarde is 30 seconden.
Limiet voor opnieuw proberen van replica replicaRetryLimit --replica-retry-limit Het maximum aantal keren dat een mislukte replica opnieuw moet worden uitgevoerd. Als u een replica wilt mislukken zonder het opnieuw te proberen, stelt u de waarde in op 0.
Parallelle uitvoering parallelism --parallelism Het aantal replica's dat per uitvoering moet worden uitgevoerd. Stel voor de meeste taken de waarde in op 1.
Aantal replicavoltooiing replicaCompletionCount --replica-completion-count Het aantal replica's dat moet worden voltooid om de uitvoering te voltooien. De meeste zijn gelijk aan of kleiner dan de parallelle uitvoering. Stel voor de meeste taken de waarde in op 1.

Opmerking

In het volgende voorbeeld wordt een taak gemaakt met geavanceerde configuratieopties:

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"

Beperkingen voor taken

De volgende functies worden niet ondersteund:

  • Dapr
  • Inkomend verkeer en gerelateerde functies, zoals aangepaste domeinen en SSL-certificaten

Volgende stappen