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.
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.
Utwórz tożsamość przypisaną przez użytkownika.
az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity" --output json
principalId
Pobierz właściwości iid
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 \")
Pobierz identyfikator subskrypcji dla bieżącej subskrypcji.
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
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.
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.
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.
Otwórz witrynę Azure Portal w przeglądarce i przejdź do swojego konta magazynu.
Wybierz pozycję Kontenery magazynu>danych w menu po lewej stronie.
Wybierz aplikację kontenera.
Sprawdź, czy w kontenerze jest widoczny plik o nazwie
order
.Wybierz plik.
Wybierz kartę Edytuj .
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.