Udostępnij za pośrednictwem


Szybki start: wdrażanie aplikacji dapr w usłudze Azure Container Apps przy użyciu interfejsu wiersza polecenia platformy Azure

Dapr (rozproszone środowisko uruchomieniowe aplikacji) ułatwia deweloperom tworzenie odpornych, niezawodnych mikrousług. Z tego przewodnika Szybki start dowiesz się, jak umożliwić uruchamianie przyczepek dapr obok aplikacji kontenera mikrousług. Wykonasz następujące informacje:

  • Utwórz środowisko usługi Container Apps i magazyn stanów usługi Azure Blog Storage dla aplikacji kontenera.
  • Wdróż aplikację kontenera języka Python publikującą komunikaty.
  • Wdróż aplikację kontenera Node.js, która subskrybuje komunikaty i utrzymuje je w magazynie stanów.
  • Sprawdź interakcję między dwiema mikrousługami przy użyciu witryny Azure Portal.

Diagram architektury dla mikrousług Hello World w usłudze Azure Container Apps

Ten przewodnik Szybki start odzwierciedla aplikacje wdrażane w przewodniku Szybki start języka Dapr Hello World typu open source.

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

Aby upewnić się, że używasz najnowszej wersji interfejsu wiersza polecenia, uruchom polecenie uaktualniania.

az upgrade

Następnie zainstaluj lub zaktualizuj rozszerzenie usługi Azure Container Apps dla interfejsu wiersza polecenia.

Jeśli podczas uruchamiania az containerapp poleceń w interfejsie wiersza polecenia platformy Azure lub poleceniach cmdlet z modułu Az.App w programie Azure PowerShell wystąpią błędy dotyczące brakujących parametrów, upewnij się, że masz zainstalowaną najnowszą wersję rozszerzenia Azure Container Apps.

az extension add --name containerapp --upgrade

Uwaga

Począwszy od maja 2024 r., rozszerzenia interfejsu wiersza polecenia platformy Azure domyślnie nie włączają funkcji w wersji zapoznawczej. Aby uzyskać dostęp do funkcji usługi Container Apps w wersji zapoznawczej, zainstaluj rozszerzenie Container Apps za pomocą polecenia --allow-preview true.

az extension add --name containerapp --upgrade --allow-preview true

Teraz, po zainstalowaniu bieżącego rozszerzenia lub modułu Microsoft.App , zarejestruj przestrzenie nazw i Microsoft.OperationalInsights .

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

Ustawianie zmiennych środowiskowych

Ustaw następujące zmienne środowiskowe. Zastąp element swoimi <PLACEHOLDERS> wartościami:

RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"

Tworzenie grupy zasobów platformy Azure

Utwórz grupę zasobów, aby zorganizować usługi związane z wdrożeniem aplikacji kontenera.

az group create \
  --name $RESOURCE_GROUP \
  --location "$LOCATION"

Utwórz środowisko

Środowisko w usłudze Azure Container Apps tworzy bezpieczną granicę wokół grupy aplikacji kontenera. Aplikacje kontenera wdrożone w tym samym środowisku są wdrażane w tej samej sieci wirtualnej i zapisują dzienniki w tym samym obszarze roboczym usługi Log Analytics.

Aby utworzyć środowisko, uruchom następujące polecenie:

az containerapp env create \
  --name $CONTAINERAPPS_ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION"

Konfigurowanie magazynu stanów

Tworzenie konta usługi Azure Blob Storage

Po wdrożeniu środowiska wdróż konto usługi Azure Blob Storage używane przez aplikację kontenera Node.js do przechowywania danych. Przed wdrożeniem usługi wybierz nazwę konta magazynu. Nazwy kont magazynu muszą być unikatowe na platformie Azure, od 3 do 24 znaków i muszą zawierać tylko cyfry i małe litery.

STORAGE_ACCOUNT_NAME="<storage account name>"

Użyj następującego polecenia, aby utworzyć konto usługi Azure Storage.

az storage account create \
  --name $STORAGE_ACCOUNT_NAME \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION" \
  --sku Standard_RAGRS \
  --kind StorageV2

Konfigurowanie tożsamości przypisanej przez użytkownika dla aplikacji node

Usługa Container Apps obsługuje zarówno tożsamość zarządzaną przypisaną przez użytkownika, jak i przypisaną przez system, ale tożsamość przypisana przez użytkownika zapewnia aplikację Node.js z obsługą języka Dapr z uprawnieniami dostępu do konta magazynu obiektów blob.

  1. Utwórz tożsamość przypisaną przez użytkownika.

    az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity"     --output json
    
  2. principalId Pobierz właściwości i id i zapisz je w zmiennych.

    PRINCIPAL_ID=$(az identity show -n "nodeAppIdentity" --resource-group     $RESOURCE_GROUP --query principalId | tr -d \")
    IDENTITY_ID=$(az identity show -n "nodeAppIdentity" --resource-group     $RESOURCE_GROUP --query id | tr -d \")
    CLIENT_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP     --query clientId | tr -d \")
    
  3. Pobierz identyfikator subskrypcji dla bieżącej subskrypcji.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  4. Storage Blob Data Contributor Przypisz rolę do tożsamości przypisanej przez użytkownika.

    az role assignment create --assignee $PRINCIPAL_ID  \
    --role "Storage Blob Data Contributor" \
    --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/    Microsoft.Storage/storageAccounts/$STORAGE_ACCOUNT_NAME"
    

Konfigurowanie składnika magazynu stanów

Istnieje wiele opcji uwierzytelniania w zasobach zewnętrznych za pośrednictwem języka Dapr. W tym przykładzie jest używany magazyn stanów oparty na platformie Azure, dzięki czemu można zapewnić bezpośredni dostęp z aplikacji Node.js do magazynu obiektów blob przy użyciu tożsamości zarządzanej.

  1. W edytorze tekstów utwórz plik o nazwie statestore.yaml z właściwościami pochodzącymi z poprzednich kroków.

    # statestore.yaml for Azure Blob storage component
    componentType: state.azure.blobstorage
    version: v1
    metadata:
      - name: accountName
        value: "<STORAGE_ACCOUNT_NAME>"
      - name: containerName
        value: mycontainer
      - name: azureClientId
        value: "<MANAGED_IDENTITY_CLIENT_ID>"
    scopes:
      - nodeapp
    

    Ten plik ułatwia aplikacji Dapr uzyskiwanie dostępu do magazynu stanów.

  2. Przejdź do katalogu, w którym został zapisany plik yaml, i uruchom następujące polecenie, aby skonfigurować składnik Dapr w środowisku Container Apps.

    az containerapp env dapr-component set \
        --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --dapr-component-name statestore \
        --yaml statestore.yaml
    

Wdrażanie aplikacji Node.js

az containerapp create \
  --name nodeapp \
  --resource-group $RESOURCE_GROUP \
  --user-assigned $IDENTITY_ID \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --image dapriosamples/hello-k8s-node:latest \
  --min-replicas 1 \
  --max-replicas 1 \
  --enable-dapr \
  --dapr-app-id nodeapp \
  --dapr-app-port 3000 \
  --env-vars 'APP_PORT=3000'

Jeśli używasz usługi Azure Container Registry, dołącz flagę --registry-server <REGISTRY_NAME>.azurecr.io w poleceniu .

Domyślnie obraz jest ściągany z usługi Docker Hub.

Wdrażanie aplikacji w języku Python

az containerapp create \
  --name pythonapp \
  --resource-group $RESOURCE_GROUP \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --image dapriosamples/hello-k8s-python:latest \
  --min-replicas 1 \
  --max-replicas 1 \
  --enable-dapr \
  --dapr-app-id pythonapp

Jeśli używasz usługi Azure Container Registry, dołącz flagę --registry-server <REGISTRY_NAME>.azurecr.io w poleceniu .

Weryfikowanie wyników

Potwierdzanie trwałości stanu pomyślnego

Możesz potwierdzić, że usługi działają prawidłowo, wyświetlając dane na koncie usługi Azure Storage.

  1. Otwórz witrynę Azure Portal w przeglądarce i przejdź do swojego konta magazynu.

  2. Wybierz pozycję Kontenery magazynu>danych w menu po lewej stronie.

  3. Wybierz aplikację kontenera.

  4. Sprawdź, czy w kontenerze jest widoczny plik o nazwie order .

  5. Wybierz plik.

  6. Wybierz kartę Edytuj .

  7. Wybierz przycisk Odśwież, aby zobaczyć, jak dane są automatycznie aktualizowane.

Wyświetl dzienniki

Dzienniki z aplikacji kontenera są przechowywane w tabeli niestandardowej ContainerAppConsoleLogs_CL w obszarze roboczym usługi Log Analytics. Dzienniki można wyświetlać za pośrednictwem witryny Azure Portal lub interfejsu wiersza polecenia. Początkowo w obszarze roboczym może występować niewielkie opóźnienie.

Wyświetl dzienniki przy użyciu wiersza polecenia przy użyciu następującego polecenia interfejsu wiersza polecenia.

LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az containerapp env show --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP --query properties.appLogsConfiguration.logAnalyticsConfiguration.customerId --out tsv`

az monitor log-analytics query \
  --workspace $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
  --analytics-query "ContainerAppConsoleLogs_CL | where ContainerAppName_s == 'nodeapp' and (Log_s contains 'persisted' or Log_s contains 'order') | project ContainerAppName_s, Log_s, TimeGenerated | sort by TimeGenerated | take 5" \
  --out table

Poniższe dane wyjściowe przedstawiają typ odpowiedzi oczekiwanej z poziomu polecenia interfejsu wiersza polecenia.

ContainerAppName_s    Log_s                            TableName      TimeGenerated
--------------------  -------------------------------  -------------  ------------------------
nodeapp               Got a new order! Order ID: 61    PrimaryResult  2021-10-22T21:31:46.184Z
nodeapp               Successfully persisted state.    PrimaryResult  2021-10-22T21:31:46.184Z
nodeapp               Got a new order! Order ID: 62    PrimaryResult  2021-10-22T22:01:57.174Z
nodeapp               Successfully persisted state.    PrimaryResult  2021-10-22T22:01:57.174Z
nodeapp               Got a new order! Order ID: 63    PrimaryResult  2021-10-22T22:45:44.618Z

Czyszczenie zasobów

Ponieważ pythonapp ciągłe nawiązywanie połączeń nodeapp z komunikatami utrwalone w skonfigurowanym magazynie stanów jest ważne, aby wykonać te kroki oczyszczania, aby uniknąć bieżących operacji rozliczanych.

Jeśli chcesz usunąć zasoby utworzone w ramach tego przewodnika, uruchom następujące polecenie.

Uwaga

To 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

Napiwek

Masz problemy? Poinformuj nas o usłudze GitHub, otwierając problem w repozytorium usługi Azure Container Apps.

Następne kroki