Udostępnij za pośrednictwem


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:

  1. Pobiera jeden komunikat z kolejki.
  2. Rejestruje komunikat w dziennikach wykonywania zadania.
  3. Usuwa komunikat z kolejki.
  4. 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

Ustawienia

  1. 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
    
  2. Upewnij się, że używasz najnowszej wersji interfejsu wiersza polecenia za pomocą polecenia uaktualnienia.

    az upgrade
    
  3. Zainstaluj najnowszą wersję rozszerzenia interfejsu wiersza polecenia usługi Azure Container Apps.

    az extension add --name containerapp --upgrade
    
  4. Microsoft.AppZarejestruj przestrzenie nazw , Microsoft.OperationalInsightsiMicrosoft.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
    
  5. 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ą.

  1. Utwórz grupę zasobów przy użyciu poniższego polecenia.

    az group create \
        --name "$RESOURCE_GROUP" \
        --location "$LOCATION"
    
  2. 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ę.

  1. 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.

  2. 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
    
  3. 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)
    
  4. 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.

  1. 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
    
  2. 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.

  1. 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.

  2. Utwórz rejestr kontenerów.

    az acr create \
        --name "$CONTAINER_REGISTRY_NAME" \
        --resource-group "$RESOURCE_GROUP" \
        --location "$LOCATION" \
        --sku Basic
    
  3. 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 ma disabledwartość , 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
    
  4. 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.

  5. 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.

  1. Wyślij komunikat do kolejki.

    az storage message put \
        --content "Hello Queue Reader Job" \
        --queue-name "$QUEUE_NAME" \
        --connection-string "$QUEUE_CONNECTION_STRING"
    
  2. 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.

  3. 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

Następne kroki