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.
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 , Schedule of 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