Aufträge in Azure Container Apps
Azure Container Apps-Aufträge ermöglichen die Ausführung containerisierter Aufgaben, die für einen begrenzten Zeitraum ausgeführt und dann beendet werden. Sie können Aufträge verwenden, um Aufgaben wie Datenverarbeitung, maschinelles Lernen oder beliebige Szenarien auszuführen, die eine bedarfsgesteuerte Verarbeitung erfordern.
Container-Apps und -Aufträge werden in der gleichen Umgebung ausgeführt, sodass sie Funktionen wie Netzwerk und Protokollierung gemeinsam nutzen können.
Vergleichen von Container-Apps und -Aufträgen
In Azure Container Apps gibt es zwei Arten von Computeressourcen: Apps und Aufträge.
Apps sind Dienste, die kontinuierlich ausgeführt werden. Wenn für einen Container in einer App ein Fehler auftritt, wird er automatisch neu gestartet. Beispiele für Apps sind HTTP-APIs, Web-Apps und Hintergrunddienste, die kontinuierlich Eingaben verarbeiten.
Aufträge sind Aufgaben, die gestartet, für einen begrenzten Zeitraum ausgeführt und nach Fertigstellung beendet werden. Bei jeder Ausführung eines Auftrags wird in der Regel eine einzelne Arbeitseinheit ausgeführt. Auftragsausführungen werden manuell, nach einem Zeitplan oder als Reaktion auf Ereignisse gestartet. Beispiele für Aufträge sind etwa Batchprozesse, die bei Bedarf ausgeführt werden, sowie geplante Aufgaben.
Beispielszenarien
In der folgenden Tabelle werden allgemeine Szenarien für Apps und Aufträge verglichen:
Container | Computeressource | Hinweise |
---|---|---|
Ein HTTP-Server, der Webinhalte und API-Anforderungen bereitstellt | App | Konfigurieren Sie eine HTTP-Skalierungsregel. |
Ein Prozess, der nachts Finanzberichte generiert | Auftrag | Verwenden Sie den Auftragstyp Zeitplan, und konfigurieren Sie einen Cron-Ausdruck. |
Ein kontinuierlich ausgeführter Dienst, der Nachrichten aus einer Azure Service Bus-Warteschlange verarbeitet | App | Konfigurieren Sie eine benutzerdefinierte Skalierungsregel. |
Ein Auftrag, der eine einzelne Nachricht oder einen kleinen Batch von Nachrichten aus einer Azure-Warteschlange verarbeitet und dann beendet wird | Auftrag | Verwenden Sie den Auftragstyp Ereignis, und konfigurieren Sie eine benutzerdefinierte Skalierungsregel, um Auftragsausführungen auszulösen, wenn Nachrichten in der Warteschlange vorhanden sind. |
Eine Hintergrundaufgabe, die bei Bedarf ausgelöst wird und beendet wird, wenn sie abgeschlossen ist | Auftrag | Verwenden Sie den Auftragstyp Manuell, und starten Sie Ausführungen manuell oder programmgesteuert mithilfe einer API. |
Ein selbst gehosteter GitHub Actions-Runner oder Azure Pipelines-Agent | Auftrag | Verwenden Sie den Auftragstyp Ereignis, und konfigurieren Sie eine GitHub Actions- oder Azure Pipelines-Skalierungsregel. |
Eine Azure Functions-App | App | Stellen Sie Azure Functions in Container Apps bereit. |
Eine ereignisgesteuerte App, die das Azure WebJobs SDK verwendet | App | Konfigurieren Sie eine Skalierungsregel für jede Ereignisquelle. |
Konzepte
Eine Container Apps-Umgebung ist eine sichere Grenze, die Container-Apps und Aufträge umgibt. Aufträge umfassen einige wichtige Konzepte:
- Auftrag: Ein Auftrag definiert die Standardkonfiguration, die für jede Auftragsausführung verwendet wird. Die Konfiguration enthält das zu verwendende Containerimage, die zuzuordnenden Ressourcen und den auszuführenden Befehl.
- Auftragsausführung: Eine Auftragsausführung ist eine einzelne Ausführung eines Auftrags, der manuell, gemäß einem Zeitplan oder als Reaktion auf ein Ereignis ausgelöst wird.
- Auftragsreplikat: Eine typische Auftragsausführung führt ein Replikat aus, das durch die Konfiguration des Auftrags definiert ist. In erweiterten Szenarien kann eine Auftragsausführung mehrere Replikate ausführen.
Berechtigungen
Um einen Container-App-Auftrag zu starten, sind die entsprechenden Berechtigungen erforderlich. Stellen Sie sicher, dass Ihrem Benutzerkonto oder Dienstprinzipal die folgenden Rollen zugewiesen sind:
- Azure Container Apps-Mitwirkender: Erteilt Berechtigungen zum Erstellen und Verwalten von Container-Apps und -Aufträgen.
- Leseberechtigter für Azure Monitor (optional): Ermöglicht das Anzeigen von Überwachungsdaten für Aufträge.
- Benutzerdefinierte Rolle: Um differenziertere Berechtigungen zu erhalten, können Sie eine benutzerdefinierte Rolle mit den folgenden Aktionen erstellen:
- Microsoft.App/containerApps/jobs/start/action
- Microsoft.App/containerApps/jobs/read
- Microsoft.App/containerApps/jobs/executions/read
Weitere Informationen zum Zuweisen von Rollen und Berechtigungen finden Sie unter Rollenbasierte Zugriffssteuerung in Azure.
Arten von Auftragstriggern
Der Triggertyp eines Auftrags bestimmt, wie der Auftrag gestartet wird. Folgende Triggertypen sind verfügbar:
- Manuell: Manuelle Aufträge werden bei Bedarf ausgelöst.
- Zeitplan: Geplante Aufträge werden zu bestimmten Zeiten ausgelöst und können wiederholt ausgeführt werden.
- Ereignis: Ereignisgesteuerte Aufträge werden durch Ereignisse ausgelöst – beispielsweise durch eine Nachricht, die bei einer Warteschlange eingeht.
Manuelle Aufträge
Manuelle Aufträge werden bei Bedarf über die Azure CLI, das Azure-Portal oder mithilfe einer Azure Resource Manager-API-Anforderung ausgelöst.
Beispiele für manuelle Aufträge:
- Einmalige Verarbeitungsaufgaben wie etwa das Migrieren von Daten zwischen Systemen
- Eine als Container-App ausgeführte E-Commerce-Website startet eine Auftragsausführung für die Bestandsverarbeitung, wenn eine Bestellung aufgegeben wird.
Verwenden Sie zum Erstellen eines manuellen Auftrags den Auftragstyp Manual
.
Wenn Sie einen manuellen Auftrag mit der Azure CLI erstellen möchten, können Sie den Befehl az containerapp job create
verwenden. Im folgenden Beispiel wird ein manueller Auftrag namens my-job
in einer Ressourcengruppe namens my-resource-group
und in einer Container Apps-Umgebung namens my-environment
erstellt:
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"
Das Image mcr.microsoft.com/k8se/quickstart-jobs:latest
ist ein öffentliches Beispielcontainerimage, das einen Auftrag ausführt, der einige Sekunden wartet, eine Nachricht auf der Konsole ausgibt und dann beendet wird. Informationen zum Authentifizieren und Verwenden eines privaten Containerimages finden Sie unter Container.
Mit dem obigen Befehl wird nur der Auftrag erstellt. Informationen zum Starten einer Auftragsausführung finden Sie unter Starten einer Auftragsausführung bei Bedarf.
Geplante Aufträge
Verwenden Sie zum Erstellen eines geplanten Auftrags den Auftragstyp Schedule
.
Container Apps-Aufträge verwenden Cron-Ausdrücke, um Zeitpläne zu definieren. Unterstützt wird das Standardformat für Cron-Ausdrücke mit fünf Feldern für Minute, Stunde, Tag des Monats, Monat und Wochentag. Beispiele für Cron-Ausdrücke:
Ausdruck | Beschreibung |
---|---|
*/5 * * * * |
Wird alle 5 Minuten ausgeführt. |
0 */2 * * * |
Wird alle zwei Stunden ausgeführt. |
0 0 * * * |
Wird täglich um Mitternacht ausgeführt. |
0 0 * * 0 |
Wird jeden Sonntag um Mitternacht ausgeführt. |
0 0 1 * * |
Wird am ersten Tag jedes Monats um Mitternacht ausgeführt. |
Cron-Ausdrücke in geplanten Aufträgen werden in koordinierter Weltzeit (Coordinated Universal Time, UTC) ausgewertet.
Wenn Sie einen geplanten Auftrag mit der Azure CLI erstellen möchten, können Sie den Befehl az containerapp job create
verwenden. Im folgenden Beispiel wird ein geplanter Auftrag namens my-job
in einer Ressourcengruppe namens my-resource-group
und in einer Container Apps-Umgebung namens my-environment
erstellt:
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 * * * *"
Das Image mcr.microsoft.com/k8se/quickstart-jobs:latest
ist ein öffentliches Beispielcontainerimage, das einen Auftrag ausführt, der einige Sekunden wartet, eine Nachricht auf der Konsole ausgibt und dann beendet wird. Informationen zum Authentifizieren und Verwenden eines privaten Containerimages finden Sie unter Container.
Mit dem Cron-Ausdruck */1 * * * *
wird der Auftrag im Minutentakt ausgeführt.
Ereignisgesteuerte Aufträge
Ereignisgesteuerte Aufträge werden durch Ereignisse von unterstützten benutzerdefinierten Skalierern ausgelöst. Beispiele für ereignisgesteuerte Aufträge:
- Ein Auftrag, der ausgeführt wird, wenn einer Warteschlange wie Azure Service Bus, Kafka oder RabbitMQ eine neue Nachricht hinzugefügt wird.
- Ein selbstgehosteter GitHub Actions-Runner oder Azure DevOps-Agent, der ausgeführt wird, wenn in einem Workflow oder einer Pipeline ein neuer Auftrag einer Warteschlange hinzugefügt wird.
Container-Apps und ereignisgesteuerte Aufträge verwenden Skalierer vom Typ KEDA. Beide werten Skalierungsregeln gemäß einem Abfrageintervall aus, um die Menge der Ereignisse für eine Ereignisquelle zu messen, aber die Verwendung der Ergebnisse unterscheidet sich jeweils.
In einer App verarbeitet jedes Replikat kontinuierlich Ereignisse, und eine Skalierungsregel bestimmt die Anzahl von Replikaten, die ausgeführt werden sollen, um den Bedarf zu decken. Bei ereignisgesteuerten Aufträgen verarbeitet jede Auftragsausführung üblicherweise ein einzelnes Ereignis, und eine Skalierungsregel bestimmt die Anzahl auszuführender Auftragsausführungen.
Verwenden Sie Aufträge, wenn jedes Ereignis eine neue Instanz des Containers mit dedizierten Ressourcen erfordert oder lange Zeit ausgeführt werden muss. Das Konzept ereignisgesteuerter Aufträge ist vergleichbar mit KEDA-Skalierungsaufträgen.
Verwenden Sie zum Erstellen eines ereignisgesteuerten Auftrags den Auftragstyp Event
.
Wenn Sie einen ereignisgesteuerten Auftrag mit der Azure CLI erstellen möchten, können Sie den Befehl az containerapp job create
verwenden. Im folgenden Beispiel wird ein ereignisgesteuerter Auftrag namens my-job
in einer Ressourcengruppe namens my-resource-group
und in einer Container Apps-Umgebung namens my-environment
erstellt:
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 dem Beispiel wird eine Azure Storage-Warteschlangenskalierungsregel konfiguriert.
Ein vollständiges Tutorial finden Sie unter Tutorial: Bereitstellen eines ereignisgesteuerten Auftrags mit Azure Container Apps.
Starten einer Auftragsausführung bei Bedarf
Für alle Auftragstypen kann eine Auftragsausführung bei Bedarf gestartet werden.
Verwenden Sie den Befehl az containerapp job start
, um eine Auftragsausführung mithilfe der Azure CLI zu starten. Im folgenden Beispiel wird die Ausführung eines Auftrags namens my-job
in einer Ressourcengruppe namens my-resource-group
gestartet:
az containerapp job start --name "my-job" --resource-group "my-resource-group"
Beim Starten einer Auftragsausführung können Sie die Konfiguration des Auftrags außer Kraft setzen. Sie können beispielsweise eine Umgebungsvariable oder den Startbefehl außer Kraft setzen, um denselben Auftrag mit verschiedenen Eingaben auszuführen. Die außer Kraft gesetzte Konfiguration wird nur für die aktuelle Ausführung verwendet und ändert nicht die Konfiguration des Auftrags.
Wichtig
Beim Außerkraftsetzen der Konfiguration wird die gesamte Vorlagenkonfiguration des Auftrags durch die neue Konfiguration ersetzt. Stellen Sie sicher, dass die neue Konfiguration alle erforderlichen Einstellungen enthält.
Um die Konfiguration des Auftrags beim Starten einer Ausführung außer Kraft zu setzen, verwenden Sie den Befehl az containerapp job start
, und übergeben Sie eine YAML-Datei, die die Vorlage für die Ausführung enthält. Im folgenden Beispiel wird die Ausführung eines Auftrags namens my-job
in einer Ressourcengruppe namens my-resource-group
gestartet.
Rufen Sie die aktuelle Konfiguration des Auftrags mit dem Befehl az containerapp job show
ab, und speichern Sie die Vorlage in einer Datei namens 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
Die Option --query "properties.template"
gibt nur die Vorlagenkonfiguration des Auftrags zurück.
Bearbeiten Sie die Datei my-job-template.yaml
, um die Konfiguration des Auftrags außer Kraft zu setzen. Um beispielsweise die Umgebungsvariablen außer Kraft zu setzen, ändern Sie den Abschnitt 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!"
Starten Sie den Auftrag mithilfe der Vorlage:
az containerapp job start --name "my-job" --resource-group "my-resource-group" \
--yaml my-job-template.yaml
Abrufen des Auftragsausführungsverlaufs
Jeder Container Apps-Auftrag verfügt über einen Verlauf mit den letzten Auftragsausführungen.
Verwenden Sie den Befehl az containerapp job execution list
, um den Status von Auftragsausführungen mithilfe der Azure CLI abzurufen. Im folgenden Beispiel wird der Status der letzten Ausführung eines Auftrags namens my-job
in einer Ressourcengruppe namens my-resource-group
zurückgegeben:
az containerapp job execution list --name "my-job" --resource-group "my-resource-group"
Der Ausführungsverlauf für geplante und ereignisbasierte Aufträge ist auf die letzten 100 erfolgreichen und fehlerhaften Auftragsausführungen beschränkt.
Wenn Sie alle Ausführungen eines Auftrags auflisten oder eine detaillierte Ausgabe von einem Auftrag erhalten möchten, fragen Sie den für Ihre Container Apps-Umgebung konfigurierten Protokollanbieter ab.
Erweiterte Auftragskonfiguration
Container Apps-Aufträge unterstützen erweiterte Konfigurationsoptionen wie Containereinstellungen, Wiederholungen, Timeouts und Parallelität.
Containereinstellungen
Containereinstellungen definieren die Container, die in den einzelnen Replikaten einer Auftragsausführung ausgeführt werden sollen. Sie umfassen Umgebungsvariablen, Geheimnisse und Ressourcenlimits. Weitere Informationen finden Sie unter Container. Das Ausführen mehrerer Container in einem einzelnen Auftrag ist ein erweitertes Szenario. Die meisten Aufträge führen einen einzelnen Container aus.
Auftragseinstellungen
Die folgende Tabelle enthält die konfigurierbaren Auftragseinstellungen:
Einstellung | „Azure-Ressourcen-Manager“-Eigenschaft | CLI-Parameter | Beschreibung |
---|---|---|---|
Auftragstyp | triggerType |
--trigger-type |
Typ des Auftrags. (Manual , Schedule oder Event ) |
Replikattimeout | replicaTimeout |
--replica-timeout |
Die maximale Wartezeit bis zum Abschluss eines Replikats (in Sekunden). |
Abrufintervall | pollingInterval |
--polling-interval |
Die Zeit in Sekunden, die zwischen dem Abruf von Ereignissen gewartet wird. Der Standardwert ist „30 Sekunden“. |
Wiederholungslimit für ein Replikat | replicaRetryLimit |
--replica-retry-limit |
Die maximale Anzahl von Wiederholungsversuchen für ein fehlerhaftes Replikat. Wenn ein Replikat ohne Wiederholung als fehlerhaft eingestuft werden soll, legen Sie den Wert auf 0 fest. |
Parallelität | parallelism |
--parallelism |
Die Anzahl von Replikaten, die pro Ausführung ausgeführt werden sollen. Für die meisten Aufträge legen Sie den Wert auf 1 fest. |
Anzahl abgeschlossener Replikate | replicaCompletionCount |
--replica-completion-count |
Die Anzahl von Replikaten, die erfolgreich abgeschlossen werden müssen, damit die Ausführung erfolgreich ist. Muss dem Wert für Parallelität entsprechen oder kleiner dieser Wert sein. Für die meisten Aufträge legen Sie den Wert auf 1 fest. |
Beispiel
Im folgenden Beispiel wird ein Auftrag mit erweiterten Konfigurationsoptionen erstellt:
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"
Auftragseinschränkungen
Die folgenden Funktionen werden nicht unterstützt:
- Dapr
- Eingang und verwandte Features wie benutzerdefinierte Domänen und SSL-Zertifikate