Freigeben über


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:

Architekturdiagramm für Dapr Hallo Welt-Microservices in Azure Container Apps

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 auf targetPort: 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 die nodeapp zum Speichern des Zustands ausgelegt ist.
  • Die Dapr-aktivierte, Headless-pythonapp, die den nodeapp-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.

  1. Öffnen Sie das Azure-Portal in Ihrem Browser.

  2. Wechseln Sie zu dem neu erstellten Speicherkonto in Ihrer Ressourcengruppe.

  3. Wählen Sie im Menü auf der linken Seite Container aus.

  4. Wählen Sie den erstellten Container aus.

  5. Vergewissern Sie sich, dass die Datei mit dem Namen order im Container angezeigt wird.

  6. Wählen Sie die Datei aus.

  7. Wählen Sie die Registerkarte Bearbeiten aus.

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

Nächste Schritte