Freigeben über


Schnellstart: Bereitstellen einer Dapr-Anwendung in Azure-Container-Apps mithilfe der Azure CLI

Distributed Application Runtime (Dapr) hilft Entwicklern, robuste, zuverlässige Microservices zu erstellen. In diesem Schnellstart erfahren Sie, wie Sie Dapr-Sidecars zusammen mit Ihren Microservice-Container-Apps ausführen. 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 diesem Schnellstart werden die Anwendungen widergespiegelt, die Sie im Dapr-Open-Source-Schnellstart Hallo Welt implementieren.

Voraussetzungen

Einrichtung

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 Fehler zu fehlenden Parametern auftreten, wenn Sie az containerapp-Befehle in der Azure CLI oder in Cmdlets aus dem Az.App-Modul in 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="<new-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 benutzerdefinierten Identität für die Node-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 vom Benutzer 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

Obwohl Sie mehrere Möglichkeiten zur Authentifizierung bei externen Ressourcen über Dapr haben. 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. Ersetzen Sie <placeholders> durch Ihre eigenen Werte.

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

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 "Datenspeichercontainer>" im Randleistenmenü 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. Es kann zunächst eine kleine Verzögerung geben, damit die Tabelle im Arbeitsbereich angezeigt wird.

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. Wenn Ressourcen außerhalb des Gültigkeitsbereichs dieses Lernprogramms in der angegebenen Ressourcengruppe vorhanden sind, 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ächster Schritt