Zadania w usłudze Azure Container Apps
Zadania usługi Azure Container Apps umożliwiają uruchamianie konteneryzowanych zadań wykonywanych przez skończony czas trwania i zakończenie. Za pomocą zadań można wykonywać zadania, takie jak przetwarzanie danych, uczenie maszynowe lub dowolny scenariusz, w którym wymagane jest przetwarzanie na żądanie.
Aplikacje kontenerów i zadania są uruchamiane w tym samym środowisku, co umożliwia udostępnianie możliwości, takich jak sieć i rejestrowanie.
Porównanie aplikacji i zadań kontenera
Istnieją dwa typy zasobów obliczeniowych w usłudze Azure Container Apps: aplikacje i zadania.
Aplikacje to usługi, które działają w sposób ciągły. Jeśli kontener w aplikacji zakończy się niepowodzeniem, zostanie on uruchomiony automatycznie. Przykładami aplikacji są interfejsy API HTTP, aplikacje internetowe i usługi w tle, które stale przetwarzają dane wejściowe.
Zadania to zadania, które są uruchamiane, uruchamiane przez skończony czas trwania i kończą się po zakończeniu. Każde wykonanie zadania zwykle wykonuje jedną jednostkę pracy. Wykonania zadań są uruchamiane ręcznie, zgodnie z harmonogramem lub w odpowiedzi na zdarzenia. Przykłady zadań obejmują procesy wsadowe uruchamiane na żądanie i zaplanowane zadania.
Przykładowe scenariusze
W poniższej tabeli porównaliśmy typowe scenariusze dotyczące aplikacji i zadań:
Kontener | Zasób obliczeniowy | Uwagi |
---|---|---|
Serwer HTTP obsługujący zawartość internetową i żądania interfejsu API | Aplikacja | Skonfiguruj regułę skalowania HTTP. |
Proces, który generuje raporty finansowe w nocy | Zadanie | Użyj typu zadania Harmonogram i skonfiguruj wyrażenie cron. |
Stale uruchomiona usługa, która przetwarza komunikaty z kolejki usługi Azure Service Bus | Aplikacja | Skonfiguruj niestandardową regułę skalowania. |
Zadanie, które przetwarza pojedynczy komunikat lub małą partię komunikatów z kolejki platformy Azure i kończy działanie | Zadanie | Użyj typu zadania zdarzenia i skonfiguruj niestandardową regułę skalowania, aby wyzwolić wykonywanie zadań w przypadku komunikatów w kolejce. |
Zadanie w tle, które jest wyzwalane na żądanie i kończy działanie po zakończeniu | Zadanie | Użyj typu zadania ręcznego i rozpocznij wykonywanie ręcznie lub programowo przy użyciu interfejsu API. |
Własnego modułu uruchamiającego akcje GitHub Actions lub agenta usługi Azure Pipelines | Zadanie | Użyj typu zadania zdarzenia i skonfiguruj funkcję GitHub Actions lub regułę skalowania usługi Azure Pipelines. |
Aplikacja usługi Azure Functions | Aplikacja | Wdrażanie usługi Azure Functions w usłudze Container Apps. |
Aplikacja sterowana zdarzeniami przy użyciu zestawu SDK usługi Azure WebJobs | Aplikacja | Skonfiguruj regułę skalowania dla każdego źródła zdarzeń. |
Pojęcia
Środowisko Container Apps to bezpieczna granica wokół co najmniej jednej aplikacji i zadań kontenera. Zadania obejmują kilka kluczowych pojęć:
- Zadanie: Zadanie definiuje konfigurację domyślną używaną dla każdego wykonania zadania. Konfiguracja obejmuje obraz kontenera do użycia, zasoby do przydzielenia i polecenie do uruchomienia.
- Wykonanie zadania: wykonanie zadania to pojedyncze uruchomienie zadania wyzwalanego ręcznie, zgodnie z harmonogramem lub w odpowiedzi na zdarzenie.
- Replika zadania: typowe wykonanie zadania uruchamia jedną replikę zdefiniowaną przez konfigurację zadania. W zaawansowanych scenariuszach wykonywanie zadania może uruchamiać wiele replik.
Uprawnienia
Aby uruchomić zadanie aplikacji kontenera, wymagane są odpowiednie uprawnienia. Upewnij się, że twoje konto użytkownika lub jednostka usługi mają przypisane następujące role:
- Współautor usługi Azure Container Apps: umożliwia uprawnienia do tworzenia aplikacji i zadań kontenerów oraz zarządzania nimi.
- Czytelnik usługi Azure Monitor (opcjonalnie): umożliwia wyświetlanie danych monitorowania zadań.
- Rola niestandardowa: Aby uzyskać bardziej szczegółowe uprawnienia, możesz utworzyć rolę niestandardową z następującymi akcjami:
- Microsoft.App/containerApps/jobs/start/action
- Microsoft.App/containerApps/jobs/read
- Microsoft.App/containerApps/jobs/executions/read
Aby uzyskać więcej informacji na temat przypisywania ról i uprawnień, zobacz Kontrola dostępu oparta na rolach platformy Azure.
Typy wyzwalaczy zadań
Typ wyzwalacza zadania określa sposób uruchamiania zadania. Dostępne są następujące typy wyzwalaczy:
- Ręczne: zadania ręczne są wyzwalane na żądanie.
- Harmonogram: Zaplanowane zadania są wyzwalane w określonych godzinach i mogą być uruchamiane wielokrotnie.
- Zdarzenie: zdarzenia, takie jak komunikat przychodzący do kolejki, wyzwalają zadania sterowane zdarzeniami.
Zadania ręczne
Zadania ręczne są wyzwalane na żądanie przy użyciu interfejsu wiersza polecenia platformy Azure, witryny Azure Portal lub żądania do interfejsu API usługi Azure Resource Manager.
Przykłady zadań ręcznych obejmują:
- Jednokrotne przetwarzanie zadań, takich jak migrowanie danych z jednego systemu do innego.
- Witryna handlu elektronicznego uruchomiona jako aplikacja kontenera uruchamia wykonywanie zadania w celu przetworzenia spisu po złożeniu zamówienia.
Aby utworzyć zadanie ręczne, użyj typu Manual
zadania .
Aby utworzyć zadanie ręczne przy użyciu interfejsu wiersza polecenia platformy Azure, użyj az containerapp job create
polecenia . Poniższy przykład tworzy zadanie ręczne o nazwie my-job
w grupie zasobów o nazwie i środowisku usługi Container Apps o nazwie my-environment
my-resource-group
:
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"
mcr.microsoft.com/k8se/quickstart-jobs:latest
Obraz to publiczny przykładowy obraz kontenera, który uruchamia zadanie, które czeka kilka sekund, wyświetla komunikat do konsoli, a następnie kończy działanie. Aby uwierzytelnić się i użyć prywatnego obrazu kontenera, zobacz Kontenery.
Powyższe polecenie tworzy tylko zadanie. Aby rozpocząć wykonywanie zadania, zobacz Uruchamianie wykonywania zadania na żądanie.
Zaplanowane zadania
Aby utworzyć zaplanowane zadanie, użyj typu Schedule
zadania .
Zadania usługi Container Apps używają wyrażeń cron do definiowania harmonogramów. Obsługuje standardowy format wyrażenia cron z pięcioma polami minut, godziny, dnia miesiąca, miesiąca i dnia tygodnia. Poniżej przedstawiono przykłady wyrażeń cron:
Expression | opis |
---|---|
*/5 * * * * |
Uruchamiany co 5 minut. |
0 */2 * * * |
Uruchamiany co dwie godziny. |
0 0 * * * |
Działa codziennie o północy. |
0 0 * * 0 |
Uruchamiany w każdą niedzielę o północy. |
0 0 1 * * |
Uruchamiany w pierwszym dniu każdego miesiąca o północy. |
Wyrażenia Cron w zaplanowanych zadaniach są oceniane w uniwersalnym czasie koordynowanym (UTC).
Aby utworzyć zaplanowane zadanie przy użyciu interfejsu wiersza polecenia platformy Azure, użyj az containerapp job create
polecenia . Poniższy przykład umożliwia utworzenie zaplanowanego zadania o nazwie my-job
w grupie zasobów o nazwie i środowisku usługi Container Apps o nazwie my-resource-group
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 * * * *"
mcr.microsoft.com/k8se/quickstart-jobs:latest
Obraz to publiczny przykładowy obraz kontenera, który uruchamia zadanie, które czeka kilka sekund, wyświetla komunikat do konsoli, a następnie kończy działanie. Aby uwierzytelnić się i użyć prywatnego obrazu kontenera, zobacz Kontenery.
Wyrażenie */1 * * * *
cron uruchamia zadanie co minutę.
Zadania sterowane zdarzeniami
Zadania sterowane zdarzeniami są wyzwalane przez zdarzenia z obsługiwanych niestandardowych modułów skalowania. Przykłady zadań sterowanych zdarzeniami obejmują:
- Zadanie uruchamiane po dodaniu nowego komunikatu do kolejki, takiej jak Azure Service Bus, Kafka lub RabbitMQ.
- Self-hosted GitHub Actions runner lub Azure DevOps agent , który jest uruchamiany, gdy nowe zadanie jest w kolejce w przepływie pracy lub potoku.
Aplikacje kontenerów i zadania sterowane zdarzeniami używają skalowania KEDA . Obaj oceniają reguły skalowania w interwale sondowania w celu mierzenia liczby zdarzeń dla źródła zdarzeń, ale sposób ich używania różni się.
W aplikacji każda replika stale przetwarza zdarzenia, a reguła skalowania określa liczbę replik do uruchomienia w celu spełnienia wymagań. W przypadku zadań sterowanych zdarzeniami każde wykonanie zadania zwykle przetwarza pojedyncze zdarzenie, a reguła skalowania określa liczbę wykonań zadań do uruchomienia.
Używaj zadań, gdy każde zdarzenie wymaga nowego wystąpienia kontenera z dedykowanymi zasobami lub musi działać przez długi czas. Zadania sterowane zdarzeniami są koncepcyjnie podobne do zadań skalowania KEDA.
Aby utworzyć zadanie sterowane zdarzeniami, użyj typu Event
zadania .
Aby utworzyć zadanie sterowane zdarzeniami przy użyciu interfejsu wiersza polecenia platformy Azure, użyj az containerapp job create
polecenia . Poniższy przykład tworzy zadanie sterowane zdarzeniami o nazwie my-job
w grupie zasobów o nazwie i środowisku usługi Container Apps o nazwie my-resource-group
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>"
W przykładzie skonfigurowana jest reguła skalowania kolejek usługi Azure Storage.
Aby zapoznać się z kompletnym samouczkiem, zobacz Wdrażanie zadania sterowanego zdarzeniami.
Uruchamianie wykonywania zadania na żądanie
W przypadku dowolnego typu zadania można uruchomić wykonywanie zadania na żądanie.
Aby rozpocząć wykonywanie zadania przy użyciu interfejsu wiersza polecenia platformy az containerapp job start
Azure, użyj polecenia . Poniższy przykład rozpoczyna wykonywanie zadania o nazwie my-job
w grupie zasobów o nazwie my-resource-group
:
az containerapp job start --name "my-job" --resource-group "my-resource-group"
Po uruchomieniu wykonywania zadania możesz zastąpić konfigurację zadania. Można na przykład zastąpić zmienną środowiskową lub polecenie uruchamiania, aby uruchomić to samo zadanie z różnymi danymi wejściowymi. Przesłonięć konfigurację jest używana tylko do bieżącego wykonywania i nie zmienia konfiguracji zadania.
Ważne
Podczas zastępowania konfiguracji cała konfiguracja szablonu zadania jest zastępowana nową konfiguracją. Upewnij się, że nowa konfiguracja zawiera wszystkie wymagane ustawienia.
Aby zastąpić konfigurację zadania podczas uruchamiania wykonywania, użyj az containerapp job start
polecenia i przekaż plik YAML zawierający szablon do użycia do wykonania. Poniższy przykład rozpoczyna wykonywanie zadania o nazwie my-job
w grupie zasobów o nazwie my-resource-group
.
Pobierz bieżącą konfigurację zadania za az containerapp job show
pomocą polecenia i zapisz szablon w pliku o nazwie 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
Opcja --query "properties.template"
zwraca tylko konfigurację szablonu zadania.
Edytuj plik, my-job-template.yaml
aby zastąpić konfigurację zadania. Aby na przykład zastąpić zmienne środowiskowe, zmodyfikuj sekcję 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!"
Uruchom zadanie przy użyciu szablonu:
az containerapp job start --name "my-job" --resource-group "my-resource-group" \
--yaml my-job-template.yaml
Pobieranie historii wykonywania zadania
Każde zadanie usługi Container Apps przechowuje historię ostatnich wykonań zadań.
Aby uzyskać stan wykonywania zadań przy użyciu interfejsu wiersza polecenia platformy Azure, użyj az containerapp job execution list
polecenia . Poniższy przykład zwraca stan ostatniego wykonania zadania o nazwie w grupie zasobów o nazwie my-job
my-resource-group
:
az containerapp job execution list --name "my-job" --resource-group "my-resource-group"
Historia wykonywania zaplanowanych i opartych na zdarzeniach zadań jest ograniczona do ostatnich 100 zakończonych pomyślnie i zakończonych niepowodzeniem wykonań zadań.
Aby wyświetlić listę wszystkich wykonań zadania lub uzyskać szczegółowe dane wyjściowe z zadania, wykonaj zapytanie o dostawcę dzienników skonfigurowanego dla środowiska usługi Container Apps.
Konfiguracja zadania zaawansowanego
Zadania usługi Container Apps obsługują zaawansowane opcje konfiguracji, takie jak ustawienia kontenera, ponawianie prób, przekroczenia limitu czasu i równoległość.
Ustawienia kontenerów
Ustawienia kontenera definiują kontenery do uruchomienia w każdej repliki wykonywania zadania. Obejmują one zmienne środowiskowe, wpisy tajne i limity zasobów. Aby uzyskać więcej informacji, zobacz Kontenery. Uruchamianie wielu kontenerów w jednym zadaniu jest zaawansowanym scenariuszem. Większość zadań uruchamia pojedynczy kontener.
Ustawienia zadania
Poniższa tabela zawiera ustawienia zadania, które można skonfigurować:
Ustawienie | Właściwość usługi Azure Resource Manager | Parametr interfejsu wiersza polecenia | opis |
---|---|---|---|
Typ zadania | triggerType |
--trigger-type |
Typ zadania. (Manual , Schedule , lub Event ) |
Limit czasu repliki | replicaTimeout |
--replica-timeout |
Maksymalny czas w sekundach oczekiwania na ukończenie repliki. |
Interwał sondowania | pollingInterval |
--polling-interval |
Czas oczekiwania w sekundach między sondowaniem zdarzeń. Wartość domyślna to 30 sekund. |
Limit ponawiania prób repliki | replicaRetryLimit |
--replica-retry-limit |
Maksymalna liczba ponownych prób ponawiania próby repliki, która zakończyła się niepowodzeniem. Aby zakończyć się niepowodzeniem repliki bez ponawiania próby, ustaw wartość na 0 . |
Równoległość | parallelism |
--parallelism |
Liczba replik do uruchomienia na wykonanie. W przypadku większości zadań ustaw wartość na 1 . |
Liczba uzupełniania repliki | replicaCompletionCount |
--replica-completion-count |
Liczba replik, które mają zakończyć się pomyślnie, aby wykonanie zakończyło się pomyślnie. Większość jest równa lub mniejsza niż równoległość. W przypadku większości zadań ustaw wartość na 1 . |
Przykład
Poniższy przykład tworzy zadanie z zaawansowanymi opcjami konfiguracji:
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"
Ograniczenia zadań
Następujące funkcje nie są obsługiwane:
- Dapr
- Ruch przychodzący i powiązane funkcje, takie jak domeny niestandardowe i certyfikaty SSL