Zelfstudie: Een Dapr-toepassing implementeren in Azure Container Apps met behulp van de Azure CLI

Dapr (Distributed Application Runtime) is een runtime die helpt bij het bouwen van robuuste, stateless en stateful microservices. In deze zelfstudie wordt een voorbeeld van een Dapr-toepassing geïmplementeerd in Azure Container Apps.

In deze zelfstudie leert u procedures om het volgende te doen:

  • Een Container Apps-omgeving maken voor uw container-apps
  • Een Azure Blob Storage statusopslag voor de container-app
  • Twee apps implementeren die berichten produceren en verbruiken en deze persistent maken met behulp van de statusopslag
  • Controleer de interactie tussen de twee microservices.

Azure Container Apps biedt een volledig beheerde versie van de Dapr-API's bij het bouwen van microservices. Wanneer u Dapr in Azure Container Apps gebruikt, kunt u sidecars inschakelen om uit te voeren naast uw microservices die een uitgebreide set mogelijkheden bieden. Beschikbare Dapr-API's zijn service-naar-service-aanroepen, Pub/Sub, Gebeurtenisbindingen, State Storesen Actors.

In deze zelfstudie implementeert u dezelfde toepassingen uit de quickstart dapr Hallo wereld, die bestaat uit een client-app (Python) die berichten genereert, en een service-app (Node) die deze berichten verbruikt en persistent maakt in een geconfigureerde statusopslag. Het volgende architectuurdiagram illustreert de onderdelen waaruit deze zelfstudie bestaat:

Architectuurdiagram voor Dapr Hallo wereld microservices in Azure Container Apps

Vereisten

Voordat u begint

In deze handleiding wordt gebruik gemaakt van de volgende omgevingsvariabelen:

RESOURCE_GROUP="my-containerapps"
LOCATION="canadacentral"
CONTAINERAPPS_ENVIRONMENT="containerapps-env"
LOG_ANALYTICS_WORKSPACE="containerapps-logs"
STORAGE_ACCOUNT_CONTAINER="mycontainer"

Het bovenstaande fragment kan worden gebruikt om de omgevingsvariabelen in te stellen met behulp van bash, zsh of PowerShell.

STORAGE_ACCOUNT="<storage account name>"

Kies een naam voor STORAGE_ACCOUNT. Deze wordt in een volgende stap gemaakt. Storage accountnamen moeten uniek zijn binnen Azure en tussen de 3 en 24 tekens lang zijn en mogen alleen cijfers en kleine letters bevatten.

Instellen

Begin met het aanmelden bij Azure vanuit de CLI.

Voer de volgende opdracht uit en volg de aanwijzingen om het verificatieproces te voltooien.

az login

Zorg ervoor dat u de nieuwste versie van de CLI hebt uitgevoerd via de upgradeopdracht.

az upgrade

Installeer vervolgens de Azure Container Apps-extensie naar de CLI.

az extension add \
  --source https://workerappscliextension.blob.core.windows.net/azure-cli-extension/containerapp-0.2.0-py2.py3-none-any.whl 

Nu de extensie is geïnstalleerd, registreert u Microsoft.Web de naamruimte.

az provider register --namespace Microsoft.Web

Maak een resourcegroep om de services te organiseren die betrekking hebben op uw nieuwe container-app.

az group create \
  --name $RESOURCE_GROUP \
  --location "$LOCATION"

Nu de CLI is bijgewerkt en er een nieuwe resourcegroep beschikbaar is, kunt u een Container Apps-omgeving maken en uw container-app implementeren.

Een omgeving maken

Azure Container Apps-omgevingen fungeren als isolatiegrenzen tussen een groep container-apps. Container Apps die in dezelfde omgeving zijn geïmplementeerd, worden geïmplementeerd in hetzelfde virtuele netwerk en schrijven logboeken naar dezelfde Log Analytics-werkruimte.

Azure Log Analytics wordt gebruikt om uw container-app te bewaken en is vereist bij het maken van een Container Apps-omgeving.

Maak een nieuwe Log Analytics-werkruimte met de volgende opdracht:

az monitor log-analytics workspace create \
  --resource-group $RESOURCE_GROUP \
  --workspace-name $LOG_ANALYTICS_WORKSPACE

Haal vervolgens de Log Analytics-client-id en het clientgeheim op.

Zorg ervoor dat u elke query afzonderlijk uitvoert om voldoende tijd te geven om de aanvraag te voltooien.

LOG_ANALYTICS_WORKSPACE_CLIENT_ID=`az monitor log-analytics workspace show --query customerId -g $RESOURCE_GROUP -n $LOG_ANALYTICS_WORKSPACE --out tsv`
LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET=`az monitor log-analytics workspace get-shared-keys --query primarySharedKey -g $RESOURCE_GROUP -n $LOG_ANALYTICS_WORKSPACE --out tsv`

Afzonderlijke container-apps worden geïmplementeerd in een Azure Container Apps-omgeving. Voer de volgende opdracht uit om de omgeving te maken:

az containerapp env create \
  --name $CONTAINERAPPS_ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --logs-workspace-id $LOG_ANALYTICS_WORKSPACE_CLIENT_ID \
  --logs-workspace-key $LOG_ANALYTICS_WORKSPACE_CLIENT_SECRET \
  --location "$LOCATION"

Een statusopslag instellen

Een Azure Blob Storage maken

Gebruik de volgende opdracht om een nieuw Azure Storage maken.

az storage account create \
  --name $STORAGE_ACCOUNT \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION" \
  --sku Standard_RAGRS \
  --kind StorageV2

Zodra uw Azure Blob Storage account is gemaakt, zijn de volgende waarden nodig voor de volgende stappen in deze zelfstudie.

  • storage_account_name is de waarde van de STORAGE_ACCOUNT variabele die u hierboven hebt gekozen.

  • storage_container_name is de waarde van STORAGE_ACCOUNT_CONTAINER die hierboven is gedefinieerd (bijvoorbeeld mycontainer ). Dapr maakt een container met deze naam als deze nog niet bestaat in uw Azure Storage account.

Haal de sleutel van het opslagaccount op met de volgende opdracht.

STORAGE_ACCOUNT_KEY=`az storage account keys list --resource-group $RESOURCE_GROUP --account-name $STORAGE_ACCOUNT --query '[0].value' --out tsv`
echo $STORAGE_ACCOUNT_KEY

Het onderdeel statusopslag configureren

Maak met behulp van de eigenschappen uit de bovenstaande stappen een configuratiebestand met de naam components.yaml. Met dit bestand kan uw Dapr-app toegang krijgen tot uw statusopslag. In het volgende voorbeeld ziet u hoe het bestand components.yaml eruit moet zien wanneer het is geconfigureerd voor uw Azure Blob Storage account:

# components.yaml for Azure Blob storage component
- name: statestore
  type: state.azure.blobstorage
  version: v1
  metadata:
  # Note that in a production scenario, account keys and secrets 
  # should be securely stored. For more information, see
  # https://docs.dapr.io/operations/components/component-secrets
  - name: accountName
    value: <YOUR_STORAGE_ACCOUNT_NAME>
  - name: accountKey
    value: <YOUR_STORAGE_ACCOUNT_KEY>
  - name: containerName
    value: <YOUR_STORAGE_CONTAINER_NAME>

Als u dit bestand wilt gebruiken, moet u de waarden van de tijdelijke aanduiding tussen de <> haakjes vervangen door uw eigen waarden.

Notitie

Container Apps biedt momenteel geen ondersteuning voor het systeemeigen dapr-onderdelenschema. In het bovenstaande voorbeeld wordt het ondersteunde schema gebruikt.

Volg in een toepassing op productiekwaliteit de instructies voor geheimbeheer om uw geheimen veilig te beheren.

De servicetoepassing implementeren (HTTP-webserver)

Navigeer naar de map waarin u het bestand components.yaml hebt opgeslagen en voer de onderstaande opdracht uit om de servicecontainer-app te implementeren.

az containerapp create \
  --name nodeapp \
  --resource-group $RESOURCE_GROUP \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --image dapriosamples/hello-k8s-node:latest \
  --target-port 3000 \
  --ingress 'external' \
  --min-replicas 1 \
  --max-replicas 1 \
  --enable-dapr \
  --dapr-app-port 3000 \
  --dapr-app-id nodeapp \
  --dapr-components ./components.yaml

Met deze opdracht wordt de service-app-server (Node) op (de poort van de app) geïmplementeerd, samen met de bijbehorende Dapr-sidecar die is geconfigureerd met en voor servicedetectie en --target-port 3000 --dapr-app-id nodeapp --dapr-app-port 3000 -aanroep. Uw statusopslag is geconfigureerd met --dapr-components ./components.yaml behulp van , waarmee de sidecar de status kan persistent maken.

De clienttoepassing implementeren (headless client)

Voer de onderstaande opdracht uit om de clientcontainer-app te implementeren.

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

Met deze opdracht wordt geïmplementeerd dat ook wordt uitgevoerd met een Dapr-sidecar die wordt gebruikt om de pythonapp Dapr-sidecar op te zoeken en veilig aan te roepen voor nodeapp . Omdat deze app headless is, hoeft u geen server te starten en hoeft u geen --target-port ingress in te stellen.

Het resultaat controleren

Bevestig dat de status persistentie is geslaagd

U kunt controleren of de services correct werken door gegevens in uw Azure Storage bekijken.

  1. Open de Azure Portal in uw browser en navigeer naar uw opslagaccount.

  2. Selecteer Containers aan de linkerkant.

  3. Selecteer mycontainer.

  4. Controleer of u het bestand met de naam order kunt zien in de container.

  5. Klik op het bestand.

  6. Klik op het tabblad Bewerken.

  7. Klik op de knop Vernieuwen om te zien hoe de gegevens automatisch worden bijgewerkt.

Logboeken bekijken

Gegevens die zijn geregistreerd via een container-app, worden opgeslagen in de ContainerAppConsoleLogs_CL aangepaste tabel in de Log Analytics-werkruimte. U kunt logboeken weergeven via Azure Portal of met de CLI. Mogelijk moet u een paar minuten wachten totdat de analyse voor het eerst aankomt voordat u een query kunt uitvoeren op de vastgelegde gegevens.

Gebruik de volgende CLI-opdracht om logboeken op de opdrachtregel weer te geven.

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

De volgende uitvoer toont het type reactie dat u kunt verwachten van de CLI-opdracht.

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

Tip

Ondervindt u problemen? Laat het ons weten GitHub door een probleem te openen in de Azure Container Apps-repo.

Resources opschonen

Wanneer u klaar bent, schoont u uw Container App-resources op door de volgende opdracht uit te voeren om de resourcegroep te verwijderen.

az group delete \
    --resource-group $RESOURCE_GROUP

Met deze opdracht worden zowel container-apps, het opslagaccount, de omgeving voor container-apps als alle andere resources in de resourcegroep verwijderd.

Notitie

Omdat continu aanroepen naar doet met berichten die worden opgeslagen in uw geconfigureerde statusopslag, is het belangrijk om deze opschoonstappen uit te voeren om doorlopende pythonapp nodeapp factureerbare bewerkingen te voorkomen.

Volgende stappen