Tutorial: Bereitstellen einer Dapr-Anwendung in Azure Container Apps mithilfe einer Azure Resource Manager- oder Bicep-Vorlage
Dapr (Distributed Application Runtime) ist eine Runtime, mit der resiliente, zustandslose und zustandsbehaftete Microservices erstellt werden können. In diesem Tutorial wird eine Dapr-Beispiellösung in Azure Container Apps über eine Azure Resource Manager (ARM)- oder Bicep-Vorlage bereitgestellt.
Folgendes wird vermittelt:
- Erstellen eines Azure Blob Storage-Kontos zur Verwendung als Dapr-Zustandsspeicher
- Bereitstellen einer Container Apps-Umgebung zum Hosten von Container Apps
- Bereitstellen von zwei Dapr-fähigen Container-Apps: eine, die Bestellungen erzeugt, und eine, die Bestellungen nutzt und speichert
- Weisen Sie einer Container-App eine benutzerseitig zugewiesene Identität zu, und geben Sie sie mit der geeigneten Rollenzuweisung an, um sich beim Dapr-Zustandsspeicher zu authentifizieren.
- Überprüfen Sie die Interaktion zwischen den beiden Microservices.
Mit Azure Container Apps erhalten Sie eine vollständig verwaltete Version der Dapr-APIs beim Erstellen von Microservices. Wenn Sie Dapr in Azure Container Apps verwenden, können Sie Sidecars für die Ausführung neben Ihren Microservices aktivieren, die einen umfangreichen Satz von Funktionen bieten.
In diesem Tutorial stellen Sie die Lösung aus der Schnellstartversion von Dapr Hello World bereit.
Die Anwendung besteht aus Folgendem:
- Eine Clientcontainer-App (Python) zum Generieren von Nachrichten.
- Eine Dienstcontainer-App (Node) zum Nutzen und dauerhaften Speichern dieser Nachrichten in einem Zustandsspeicher.
Das folgende Architekturdiagramm veranschaulicht die Komponenten, aus denen sich dieses Tutorial zusammensetzt:
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement ist erforderlich. Falls Sie noch über keins verfügen, können Sie ein kostenloses Konto erstellen.
- Ein GitHub-Konto. Falls Sie noch nicht über ein Konto verfügen, können Sie sich kostenlos registrieren.
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 <PLATZHALTER> durch Ihre 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"
Klonen Sie das GitHub-Repository
Wechseln Sie zu dem Repository, das die ARM- und Bicep-Vorlagen enthält, das zum Bereitstellen der Lösung verwendet wird.
Wählen Sie oben im Repository die Schaltfläche Forken aus, um das Repository in Ihr Konto zu forken.
Jetzt können Sie Ihren Fork klonen, um mit diesem lokal zu arbeiten.
Verwenden Sie den folgenden git-Befehl, um Ihr geforktes Repository in das Verzeichnis acadapr-templates zu klonen.
git clone https://github.com/$GITHUB_USERNAME/Tutorial-Deploy-Dapr-Microservices-ACA.git acadapr-templates
Bereitstellen
Die Vorlage stellt Folgendes bereit:
- Eine Container Apps-Umgebung
- Einen Log Analytics-Arbeitsbereich, der der Container Apps-Umgebung zugeordnet ist
- Eine Application Insights-Ressource für die verteilte Ablaufverfolgung
- Ein Blob Storage-Konto und einen Standardspeichercontainer
- Eine Dapr-Komponente für das Blob Storage-Konto
- Den Knoten, Dapr-aktivierte Container-App mit einer benutzerseitig zugewiesenen verwalteten Identität: hello-k8s-knoten
- Den Python, Dapr-aktivierte Container-App: hello-k8s-python
- Eine Microsoft Entra ID-Rollenzuweisung für die Knoten-App, die von der Dapr-Komponente verwendet wird, um eine Verbindung mit dem Blobspeicher herzustellen
Navigieren Sie zum Verzeichnis acadapr-templates, und führen Sie den folgenden Befehl aus:
az deployment group create \
--resource-group "$RESOURCE_GROUP" \
--template-file ./azuredeploy.json \
--parameters environment_name="$CONTAINERAPPS_ENVIRONMENT"
Möglicherweise wird eine Warnung (BCP081) angezeigt. Diese Warnung hat keine Auswirkungen auf die erfolgreiche Bereitstellung der Anwendung.
az deployment group create \
--resource-group "$RESOURCE_GROUP" \
--template-file ./azuredeploy.bicep \
--parameters environment_name="$CONTAINERAPPS_ENVIRONMENT"
Mit diesem Befehl wird Folgendes bereitgestellt:
- Die Container Apps-Umgebung und der zugehörige Log Analytics-Arbeitsbereich zum Hosten der Dapr-Lösung
- Eine Application Insights-Instanz für die verteilte Dapr-Ablaufverfolgung
- Den
nodeapp
-App-Server, der mit aktiviertem und konfiguriertem Dapr auftargetPort: 3000
ausgeführt wird:"appId": "nodeapp"
und"appPort": 3000
sowie eine benutzerseitig zugewiesene Identität mit Zugriff auf den Azure Blob Storage über eine „Mitwirkender an Speicherdaten“-Rollenzuweisung. - Eine Dapr-Komponente von
"type": "state.azure.blobstorage"
, die auf die Verwendung durch dienodeapp
zum Speichern des Zustands ausgelegt ist. - Die Dapr-aktivierte, Headless-
pythonapp
, die dennodeapp
-Dienst mithilfe von Dapr-Dienstaufrufen aufruft
Überprüfen des Ergebnisses
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.
Wechseln Sie zu dem neu erstellten Speicherkonto in Ihrer Ressourcengruppe.
Wählen Sie im Menü auf der linken Seite Container aus.
Wählen Sie den erstellten Container 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 Updates zu sehen.
Protokolle anzeigen
Daten, die über eine Container-App protokolliert werden, werden in der benutzerdefinierten Tabelle ContainerAppConsoleLogs_CL
im Log Analytics-Arbeitsbereich gespeichert. Sie können Protokolle im Azure-Portal oder über die Befehlszeile anzeigen. Warten Sie ein paar Minuten, bis die Analyse zum ersten Mal ankommt, bevor Sie die protokollierten Daten abfragen.
Verwenden Sie den folgenden Befehl, um Protokolle in Bash oder PowerShell anzeigen zu können.
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 | take 5" \
--out table
Die folgende Ausgabe veranschaulicht den Typ der Antwort, die vom 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
Wenn Sie fertig sind, führen Sie den folgenden Befehl aus, um Ihre Ressourcengruppe zusammen mit allen in diesem Tutorial erstellten Ressourcen zu löschen.
az group delete \
--resource-group $RESOURCE_GROUP
Hinweis
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.
Tipp
Treten Probleme auf? Informieren Sie uns über GitHub, indem Sie ein Problem im Azure Container Apps-Repository öffnen.