Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
- Azure CLI.
Aby uzyskać informacje o funkcjach, które zadania usługi Container Apps nie obsługują, zobacz Ograniczenia zadań.
Przygotowywanie środowiska
Aby zalogować się do platformy Azure z poziomu interfejsu wiersza polecenia platformy Azure, uruchom następujące polecenie i postępuj zgodnie z monitami, aby ukończyć proces uwierzytelniania.
az loginUpewnij się, że używasz najnowszej wersji Azure CLI, uruchamiając komendę
az upgrade.az upgradeZainstaluj najnowszą wersję rozszerzenia interfejsu wiersza polecenia usługi Container Apps.
az extension add --name containerapp --upgradeZarejestruj przestrzenie nazw
Microsoft.App,Microsoft.OperationalInsights, iMicrosoft.Storage, jeśli nie zostały jeszcze zarejestrowane w subskrypcji Azure.az provider register --namespace Microsoft.App az provider register --namespace Microsoft.OperationalInsights az provider register --namespace Microsoft.StorageZdefiniuj 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 Container Apps działa jako granica izolacji wokół aplikacji kontenerowych i prac, pozwalając im współużytkować tę samą sieć i komunikować się ze sobą.
Utwórz grupę zasobów przy użyciu następującego polecenia.
az group create \ --name "$RESOURCE_GROUP" \ --location "$LOCATION"Utwórz środowisko usługi 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 StorageV2Jeś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.Storageprzestrzeń nazw w ramach subskrypcji platformy Azure.az provider register --namespace Microsoft.StorageZapisz 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_GROUPPobierz 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 BasicRejestr 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
statusmadisabledwartość , 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 enabledKod ź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 buildpolecenia .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-timeoutMaksymalny czas trwania repliki może zostać wykonany. --min-executionsMinimalna liczba wykonań zadań do uruchomienia na interwał sondowania. --max-executionsMaksymalna liczba wykonań zadań do uruchomienia w interwale sondowania. --polling-intervalInterwał sondowania, w którym ma być oceniana reguła skalowania. --scale-rule-nameNazwa reguły skalowania. --scale-rule-typeTyp reguły skalowania do użycia. --scale-rule-metadataMetadane reguły skalowania. --scale-rule-authUwierzytelnianie dla reguły skalowania. --secretsWpisy tajne do użycia w zadaniu. --registry-serverSerwer rejestru kontenerów do użycia dla zadania. W przypadku usługi Azure Container Registry polecenie automatycznie konfiguruje uwierzytelnianie. --mi-user-assignedIdentyfikator zasobu tożsamości zarządzanej przypisanej przez użytkownika do przypisania do zadania. --registry-identityIdentyfikator 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-varsZmienne ś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 jsonPonieważ 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_CLDopó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