Samouczek: wdrażanie zadania sterowanego zdarzeniami za pomocą usługi Azure Container Apps
Zadania usługi Azure Container Apps umożliwiają uruchamianie konteneryzowanych zadań wykonywanych przez skończony czas trwania i zakończenie. Wykonywanie zadania można wyzwolić ręcznie, zgodnie z harmonogramem lub na podstawie zdarzeń. Zadania najlepiej nadają się do zadań, takich jak przetwarzanie danych, uczenie maszynowe, oczyszczanie zasobów lub dowolny scenariusz, który wymaga bezserwerowych zasobów obliczeniowych.
Z tego samouczka dowiesz się, jak pracować z zadaniami sterowanymi zdarzeniami.
- Tworzenie środowiska usługi Container Apps w celu wdrożenia aplikacji kontenera
- Tworzenie kolejki usługi Azure Storage w celu wysyłania komunikatów do aplikacji kontenera
- Tworzenie obrazu kontenera, który uruchamia zadanie
- Wdrażanie zadania w środowisku usługi Container Apps
- Sprawdź, czy komunikaty kolejki są przetwarzane przez aplikację kontenera
Utworzone zadanie uruchamia wykonywanie dla każdego komunikatu wysyłanego do kolejki usługi Azure Storage. Każde wykonanie zadania uruchamia kontener, który wykonuje następujące kroki:
- Pobiera jeden komunikat z kolejki.
- Rejestruje komunikat w dziennikach wykonywania zadania.
- Usuwa komunikat z kolejki.
- Wyjścia.
Ważne
Program scaler monitoruje długość kolejki, aby określić liczbę zadań do uruchomienia. W celu dokładnego skalowania nie usuwaj komunikatu z kolejki, dopóki wykonanie zadania nie zakończy jego przetwarzania.
Kod źródłowy zadania uruchamianego w tym samouczku jest dostępny w repozytorium GitHub przykłady platformy Azure.
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją.
- Jeśli nie masz konta, możesz je utworzyć teraz za darmo.
- Zainstaluj interfejs wiersza polecenia platformy Azure.
- Zapoznaj się z ograniczeniami zadań, aby zapoznać się z listą ograniczeń.
Ustawienia
Aby zalogować się do platformy Azure z poziomu interfejsu wiersza polecenia, uruchom następujące polecenie i postępuj zgodnie z monitami, aby ukończyć proces uwierzytelniania.
az login
Upewnij się, że używasz najnowszej wersji interfejsu wiersza polecenia za pomocą polecenia uaktualnienia.
az upgrade
Zainstaluj najnowszą wersję rozszerzenia interfejsu wiersza polecenia usługi Azure Container Apps.
az extension add --name containerapp --upgrade
Microsoft.App
Zarejestruj przestrzenie nazw ,Microsoft.OperationalInsights
iMicrosoft.Storage
, jeśli nie zostały jeszcze zarejestrowane w ramach subskrypcji platformy Azure.az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights az provider register --namespace Microsoft.Storage
Teraz, gdy konfiguracja interfejsu wiersza polecenia platformy Azure została ukończona, możesz zdefiniować zmienne środowiskowe używane w tym artykule.
RESOURCE_GROUP="jobs-quickstart" LOCATION="northcentralus" ENVIRONMENT="env-jobs-quickstart" JOB_NAME="my-job"
Tworzenie środowiska usługi Container Apps
Środowisko usługi Azure Container Apps działa jako bezpieczna granica wokół aplikacji i zadań kontenerów, dzięki czemu mogą współużytkować tę samą sieć i komunikować się ze sobą.
Utwórz grupę zasobów przy użyciu poniższego polecenia.
az group create \ --name "$RESOURCE_GROUP" \ --location "$LOCATION"
Utwórz środowisko Container Apps przy użyciu następującego polecenia.
az containerapp env create \ --name "$ENVIRONMENT" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION"
Konfigurowanie kolejki magazynu
Zadanie używa kolejki usługi Azure Storage do odbierania komunikatów. W tej sekcji utworzysz konto magazynu i kolejkę.
Zdefiniuj nazwę konta magazynu.
STORAGE_ACCOUNT_NAME="<STORAGE_ACCOUNT_NAME>" QUEUE_NAME="myqueue"
Zastąp
<STORAGE_ACCOUNT_NAME>
ciąg unikatową nazwą konta magazynu. Nazwy kont magazynu muszą być unikatowe na platformie Azure i mieć długość od 3 do 24 znaków zawierających tylko cyfry i małe litery.Tworzenie konta usługi Azure Storage.
az storage account create \ --name "$STORAGE_ACCOUNT_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku Standard_LRS \ --kind StorageV2
Jeśli to polecenie zwraca błąd:
(SubscriptionNotFound) Subscription <SUBSCRIPTION_ID> was not found. Code: SubscriptionNotFound Message: Subscription <SUBSCRIPTION_ID> was not found.
Upewnij się, że zarejestrowano
Microsoft.Storage
przestrzeń nazw w ramach subskrypcji platformy Azure.az provider register --namespace Microsoft.Storage
Zapisz parametry połączenia kolejki w zmiennej.
QUEUE_CONNECTION_STRING=$(az storage account show-connection-string -g $RESOURCE_GROUP --name $STORAGE_ACCOUNT_NAME --query connectionString --output tsv)
Utwórz kolejkę komunikatów.
az storage queue create \ --name "$QUEUE_NAME" \ --account-name "$STORAGE_ACCOUNT_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"
Tworzenie tożsamości zarządzanej przypisanej przez użytkownika
Aby uniknąć używania poświadczeń administracyjnych, ściąganie obrazów z repozytoriów prywatnych w usłudze Microsoft Azure Container Registry przy użyciu tożsamości zarządzanych na potrzeby uwierzytelniania. Jeśli to możliwe, użyj tożsamości zarządzanej przypisanej przez użytkownika do ściągania obrazów.
Utwórz tożsamość zarządzaną przypisaną przez użytkownika. Przed uruchomieniem następujących poleceń wybierz nazwę tożsamości zarządzanej i zastąp ciąg
\<PLACEHOLDER\>
nazwą .IDENTITY="<YOUR_IDENTITY_NAME>"
az identity create \ --name $IDENTITY \ --resource-group $RESOURCE_GROUP
Pobierz identyfikator zasobu tożsamości.
IDENTITY_ID=$(az identity show \ --name $IDENTITY \ --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
Kompilowanie i wdrażanie zadania
Aby wdrożyć zadanie, należy najpierw skompilować obraz kontenera dla zadania i wypchnąć go do rejestru. Następnie możesz wdrożyć zadanie w środowisku Container Apps.
Zdefiniuj nazwę obrazu kontenera i rejestru.
CONTAINER_IMAGE_NAME="queue-reader-job:1.0" CONTAINER_REGISTRY_NAME="<CONTAINER_REGISTRY_NAME>"
Zastąp
<CONTAINER_REGISTRY_NAME>
ciąg unikatową nazwą rejestru kontenerów. Nazwy rejestru kontenerów muszą być unikatowe na platformie Azure i mieć długość od 5 do 50 znaków zawierających tylko cyfry i małe litery.Utwórz rejestr kontenerów.
az acr create \ --name "$CONTAINER_REGISTRY_NAME" \ --resource-group "$RESOURCE_GROUP" \ --location "$LOCATION" \ --sku Basic
Rejestr kontenerów musi zezwalać na tokeny odbiorców usługi Azure Resource Manager (ARM) na potrzeby uwierzytelniania w celu użycia tożsamości zarządzanej do ściągania obrazów.
Użyj następującego polecenia, aby sprawdzić, czy tokeny usługi ARM mogą uzyskiwać dostęp do usługi Azure Container Registry (ACR).
az acr config authentication-as-arm show --registry "$CONTAINER_REGISTRY_NAME"
Jeśli tokeny usługi ARM są dozwolone, polecenie zwraca następujące dane wyjściowe.
{ "status": "enabled" }
Jeśli parametr
status
madisabled
wartość , zezwól na tokeny usługi ARM za pomocą następującego polecenia.az acr config authentication-as-arm update --registry "$CONTAINER_REGISTRY_NAME" --status enabled
Kod źródłowy zadania jest dostępny w witrynie GitHub. Uruchom następujące polecenie, aby sklonować repozytorium i skompilować obraz kontenera w chmurze przy użyciu
az acr build
polecenia .az acr build \ --registry "$CONTAINER_REGISTRY_NAME" \ --image "$CONTAINER_IMAGE_NAME" \ "https://github.com/Azure-Samples/container-apps-event-driven-jobs-tutorial.git"
Obraz jest teraz dostępny w rejestrze kontenerów.
Utwórz zadanie w środowisku Container Apps.
az containerapp job create \ --name "$JOB_NAME" \ --resource-group "$RESOURCE_GROUP" \ --environment "$ENVIRONMENT" \ --trigger-type "Event" \ --replica-timeout "1800" \ --min-executions "0" \ --max-executions "10" \ --polling-interval "60" \ --scale-rule-name "queue" \ --scale-rule-type "azure-queue" \ --scale-rule-metadata "accountName=$STORAGE_ACCOUNT_NAME" "queueName=$QUEUE_NAME" "queueLength=1" \ --scale-rule-auth "connection=connection-string-secret" \ --image "$CONTAINER_REGISTRY_NAME.azurecr.io/$CONTAINER_IMAGE_NAME" \ --cpu "0.5" \ --memory "1Gi" \ --secrets "connection-string-secret=$QUEUE_CONNECTION_STRING" \ --registry-server "$CONTAINER_REGISTRY_NAME.azurecr.io" \ --mi-user-assigned "$IDENTITY_ID" \ --registry-identity "$IDENTITY_ID" \ --env-vars "AZURE_STORAGE_QUEUE_NAME=$QUEUE_NAME" "AZURE_STORAGE_CONNECTION_STRING=secretref:connection-string-secret"
W poniższej tabeli opisano kluczowe parametry używane w poleceniu .
Parametr Opis --replica-timeout
Maksymalny czas trwania repliki może zostać wykonany. --min-executions
Minimalna liczba wykonań zadań do uruchomienia na interwał sondowania. --max-executions
Maksymalna liczba wykonań zadań do uruchomienia w interwale sondowania. --polling-interval
Interwał sondowania, w którym ma być oceniana reguła skalowania. --scale-rule-name
Nazwa reguły skalowania. --scale-rule-type
Typ reguły skalowania do użycia. --scale-rule-metadata
Metadane reguły skalowania. --scale-rule-auth
Uwierzytelnianie dla reguły skalowania. --secrets
Wpisy tajne do użycia w zadaniu. --registry-server
Serwer rejestru kontenerów do użycia dla zadania. W przypadku usługi Azure Container Registry polecenie automatycznie konfiguruje uwierzytelnianie. --mi-user-assigned
Identyfikator zasobu tożsamości zarządzanej przypisanej przez użytkownika do przypisania do zadania. --registry-identity
Identyfikator zasobu tożsamości zarządzanej do uwierzytelniania na serwerze rejestru zamiast przy użyciu nazwy użytkownika i hasła. Jeśli to możliwe, dla tożsamości zostanie automatycznie utworzone przypisanie roli "acrpull". --env-vars
Zmienne środowiskowe do użycia dla zadania. Konfiguracja reguły skalowania definiuje źródło zdarzeń do monitorowania. Jest obliczana dla każdego interwału sondowania i określa liczbę wykonań zadań do wyzwolenia. Aby dowiedzieć się więcej, zobacz Ustawianie reguł skalowania.
Zadanie sterowane zdarzeniami jest teraz tworzone w środowisku usługi Container Apps.
Weryfikowanie wdrożenia
Zadanie jest skonfigurowane do oceny reguły skalowania co 60 sekund, która sprawdza liczbę komunikatów w kolejce. Dla każdego okresu oceny uruchamia nowe wykonanie zadania dla każdego komunikatu w kolejce, maksymalnie 10 wykonań.
Aby sprawdzić, czy zadanie zostało poprawnie skonfigurowane, możesz wysłać niektóre komunikaty do kolejki, potwierdzić, że wykonania zadania zostały uruchomione, a komunikaty są rejestrowane w dziennikach wykonywania zadania.
Wyślij komunikat do kolejki.
az storage message put \ --content "Hello Queue Reader Job" \ --queue-name "$QUEUE_NAME" \ --connection-string "$QUEUE_CONNECTION_STRING"
Wyświetlanie listy wykonań zadania.
az containerapp job execution list \ --name "$JOB_NAME" \ --resource-group "$RESOURCE_GROUP" \ --output json
Ponieważ zadanie jest skonfigurowane do oceny reguły skalowania co 60 sekund, uruchomienie zadania może potrwać do pełnej minuty. Powtórz to polecenie, dopóki nie zostanie wyświetlone wykonanie zadania i jego stan to
Succeeded
.Uruchom następujące polecenia, aby wyświetlić zarejestrowane komunikaty. Te polecenia wymagają rozszerzenia usługi Log Analytics, dlatego po zażądaniu zaakceptuj monit o zainstalowanie rozszerzenia.
LOG_ANALYTICS_WORKSPACE_ID=$(az containerapp env show --name $ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --output tsv) az monitor log-analytics query \ --workspace "$LOG_ANALYTICS_WORKSPACE_ID" \ --analytics-query "ContainerAppConsoleLogs_CL | where ContainerJobName_s == '$JOB_NAME' | order by _timestamp_d asc"
ContainerAppConsoleLogs_CL
Dopóki tabela nie będzie gotowa, polecenie zwróci błąd:BadArgumentError: The request had some invalid properties
. Odczekaj kilka minut i spróbuj ponownie.
Napiwek
Masz problemy? Poinformuj nas o usłudze GitHub, otwierając problem w repozytorium usługi Azure Container Apps.
Czyszczenie zasobów
Po zakończeniu uruchom następujące polecenie, aby usunąć grupę zasobów zawierającą zasoby usługi Container Apps.
Uwaga
Następujące polecenie usuwa określoną grupę zasobów i wszystkie zawarte w niej zasoby. Jeśli zasoby spoza zakresu tego samouczka istnieją w określonej grupie zasobów, zostaną również usunięte.
az group delete \
--resource-group $RESOURCE_GROUP