Schnellstart: Bereitstellen einer Dapr-Anwendung in Azure Container Apps mithilfe der Azure CLI
Dapr (Distributed Application Runtime) hilft Entwicklern, resiliente, zuverlässige Microservices zu erstellen. In dieser Schnellstartanleitung erfahren Sie, wie Sie die Ausführung von Dapr-Sidecars zusammen mit Ihren Microservicecontainer-Apps ermöglichen. Sie werden folgende Aufgaben durchführen:
- Erstellen Sie eine Container Apps-Umgebung und den Azure Blob Storage-Zustandsspeicher für Ihre Container-Apps.
- Stellen Sie eine Python-Container-App bereit, die Nachrichten veröffentlicht.
- Stellen Sie eine Node.js Container-App bereit, die Nachrichten abonniert und in einem Zustandsspeicher beibehält.
- Überprüfen Sie die Interaktion zwischen den beiden Microservices über das Azure-Portal.
In dieser Schnellstartanleitung werden die Anwendungen gespiegelt, die Sie im Open-Source-Schnellstart Hallo Welt für Dapr bereitstellen.
Setup
Um sich ausgehend von der CLI bei Azure anzumelden, führen Sie den folgenden Befehl aus und befolgen Sie die Anweisungen, um den Authentifizierungsprozess abzuschließen.
az login
Verwenden Sie den Upgradebefehl, um sicherzustellen, dass Sie die neueste Version der CLI ausführen.
az upgrade
Installieren oder aktualisieren Sie als Nächstes die Azure Container Apps-Erweiterung für die CLI.
Falls Sie Fehler aufgrund fehlender Parameter erhalten, wenn Sie az containerapp
-Befehle in der Azure CLI oder Cmdlets aus dem Az.App
-Modul in Azure PowerShell ausführen, stellen Sie sicher, dass die aktuelle Version der Azure Container Apps-Erweiterung installiert ist.
az extension add --name containerapp --upgrade
Hinweis
Ab Mai 2024 aktivieren Azure CLI-Erweiterungen standardmäßig keine Previewfunktionen mehr. Um auf Previewfunktionen von Container Apps zuzugreifen, installieren Sie die Container Apps-Erweiterung mit --allow-preview true
.
az extension add --name containerapp --upgrade --allow-preview true
Nachdem die aktuelle Erweiterung oder das aktuelle Modul installiert ist, registrieren Sie nun die Namespaces Microsoft.App
und Microsoft.OperationalInsights
.
az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights
Festlegen von Umgebungsvariablen
Legen Sie die folgenden Umgebungsvariablen fest. Ersetzen Sie <PLACEHOLDERS>
durch Ihre eigenen Werte:
RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"
Erstellen einer Azure-Ressourcengruppe
Erstellen Sie eine Ressourcengruppe, um die Dienste im Zusammenhang mit der Bereitstellung Ihrer Container-App zu organisieren.
az group create \
--name $RESOURCE_GROUP \
--location "$LOCATION"
Erstellen einer Umgebung
Eine Umgebung in Azure Container Apps erstellt eine sichere Grenze für eine Gruppe von Container-Apps. Container-Apps, die in derselben Umgebung bereitgestellt werden, werden im gleichen virtuellen Netzwerk bereitgestellt und schreiben Protokolle in denselben Log Analytics-Arbeitsbereich.
Führen Sie den folgenden Befehl aus, um die Umgebung zu erstellen:
az containerapp env create \
--name $CONTAINERAPPS_ENVIRONMENT \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION"
Einrichten eines Zustandsspeichers
Erstellen eines Azure Blob Storage-Kontos
Die Umgebung wurde bereitgestellt. Stellen Sie nun ein Azure Blob Storage-Konto bereit, das von der Node.js-Container-App zum Speichern von Daten verwendet wird. Bevor Sie den Dienst bereitstellen, wählen Sie einen Namen für das Speicherkonto aus. Speicherkontonamen müssen innerhalb von Azure eindeutig und zwischen 3 und 24 Zeichen lang sein und dürfen nur Zahlen und Kleinbuchstaben enthalten.
STORAGE_ACCOUNT_NAME="<storage account name>"
Verwenden Sie den folgenden Befehl, um das Azure-Speicherkonto zu erstellen.
az storage account create \
--name $STORAGE_ACCOUNT_NAME \
--resource-group $RESOURCE_GROUP \
--location "$LOCATION" \
--sku Standard_RAGRS \
--kind StorageV2
Konfigurieren einer benutzerseitig zugewiesenen Identität für die Knoten-App
Während Container Apps sowohl benutzerseitig als auch systemseitig zugewiesene verwaltete Identitäten unterstützt, gewährt eine benutzerseitig zugewiesene Identität der Dapr-aktivierten Node.js-App Berechtigungen zum Zugriff auf das Blobspeicherkonto.
Erstellen Sie eine benutzerseitig zugewiesene Identität.
az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity" --output json
Rufen Sie die Eigenschaften
principalId
undid
ab, und speichern Sie sie in Variablen.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 \")
Rufen Sie die Abonnement-ID für Ihr aktuelles Abonnement ab.
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
Weisen Sie die Rolle
Storage Blob Data Contributor
der benutzerseitig zugewiesenen Identität zu.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"
Konfigurieren der Zustandsspeicherkomponente
Sie haben mehrere Optionen für die Authentifizierung bei externen Ressourcen über Dapr. In diesem Beispiel wird ein Azure-basierter Zustandsspeicher verwendet, sodass Sie mithilfe einer verwalteten Identität direkten Zugriff von der Node.js-App auf den Blobspeicher bereitstellen können.
Erstellen Sie in einem Text-Editor eine Datei namens statestore.yaml mit den Eigenschaften, die Sie aus den vorherigen Schritten bezogen haben.
# 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
Mit dieser Datei kann Ihre Dapr-App auf Ihren Zustandsspeicher zugreifen.
Navigieren Sie zu dem Verzeichnis, in dem Sie die YAML-Datei gespeichert haben, und führen Sie den folgenden Befehl aus, um die Dapr-Komponente in der Container Apps-Umgebung zu konfigurieren.
az containerapp env dapr-component set \ --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP \ --dapr-component-name statestore \ --yaml statestore.yaml
Bereitstellen der Node.js-Anwendung
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'
Wenn Sie eine Azure Container-Registrierung verwenden, fügen Sie das Flag --registry-server <REGISTRY_NAME>.azurecr.io
in den Befehl ein.
Standardmäßig wird das Bild von Docker Hub gepullt.
Bereitstellen der Python-Anwendung
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
Wenn Sie eine Azure Container-Registrierung verwenden, fügen Sie das Flag --registry-server <REGISTRY_NAME>.azurecr.io
in den Befehl ein.
Überprüfen der Ergebnisse
Bestätigen der erfolgreichen Zustandspersistenz
Sie können überprüfen, ob die Dienste ordnungsgemäß funktionieren, indem Sie Daten in Ihrem Azure-Speicherkonto anzeigen.
Öffnen Sie das Azure-Portal in Ihrem Browser, und navigieren Sie zu Ihrem Speicherkonto.
Wählen Sie im linken Menü Datenspeicher>Container aus.
Wählen Sie die Container-App aus.
Vergewissern Sie sich, dass die Datei mit dem Namen
order
im Container angezeigt wird.Wählen Sie die Datei aus.
Wählen Sie die Registerkarte Bearbeiten aus.
Wählen Sie die Schaltfläche Aktualisieren aus, um zu sehen, wie die Daten automatisch aktualisiert werden.
Protokolle anzeigen
Protokolle aus Container-Apps werden in der benutzerdefinierten Tabelle ContainerAppConsoleLogs_CL
im Log Analytics-Arbeitsbereich gespeichert. Sie können Protokolle über das Azure-Portal oder mithilfe der CLI anzeigen. Möglicherweise kommt es bei der Anzeige der Tabelle im Arbeitsbereich anfangs zu einer kleinen Verzögerung.
Verwenden Sie den folgenden CLI-Befehl, um Protokolle über die Befehlszeile anzuzeigen.
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
Die folgende Ausgabe veranschaulicht den Typ der Antwort, die vom CLI-Befehl erwartet wird.
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
Bereinigen von Ressourcen
Da pythonapp
kontinuierlich Aufrufe von nodeapp
mit Nachrichten vornimmt, die in Ihrem konfigurierten Zustandsspeicher gespeichert werden, ist es wichtig, diese Bereinigungsschritte auszuführen, um laufende abrechenbare Vorgänge zu vermeiden.
Wenn Sie die im Rahmen dieser exemplarischen Vorgehensweise erstellten Ressourcen löschen möchten, führen Sie den folgenden Befehl aus.
Achtung
Mit diesem Befehl werden die angegebene Ressourcengruppe und alle darin enthaltenen Ressourcen gelöscht. Falls in der angegebenen Ressourcengruppe Ressourcen enthalten sind, die nicht zum Umfang dieses Tutorials gehören, werden sie ebenfalls gelöscht.
az group delete --resource-group $RESOURCE_GROUP
Tipp
Treten Probleme auf? Informieren Sie uns über GitHub, indem Sie ein Problem im Azure Container Apps-Repository öffnen.