Freigeben über


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.

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

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.

  1. Erstellen Sie eine benutzerseitig zugewiesene Identität.

    az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity"     --output json
    
  2. Rufen Sie die Eigenschaften principalId und id 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 \")
    
  3. Rufen Sie die Abonnement-ID für Ihr aktuelles Abonnement ab.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  4. 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.

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

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

  1. Öffnen Sie das Azure-Portal in Ihrem Browser, und navigieren Sie zu Ihrem Speicherkonto.

  2. Wählen Sie im linken Menü Datenspeicher>Container aus.

  3. Wählen Sie die Container-App aus.

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

  5. Wählen Sie die Datei aus.

  6. Wählen Sie die Registerkarte Bearbeiten aus.

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

Nächste Schritte