Share via


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

Dapr (Distributed Application Runtime) helpt ontwikkelaars bij het bouwen van tolerante, betrouwbare microservices. In deze zelfstudie wordt een Dapr-voorbeeldtoepassing geïmplementeerd in Azure Container Apps.

U leert het volgende:

  • Een Container Apps-omgeving maken voor uw container-apps
  • Een Azure Blob Storage-statusarchief maken voor de container-app
  • Implementeer twee apps die berichten produceren en gebruiken en persistent maken in de statusopslag
  • Controleer de interactie tussen de twee microservices.

Met Azure Container Apps krijgt u 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 naast uw microservices die een uitgebreide set mogelijkheden bieden. Beschikbare Dapr-API's omvatten Service to Service-aanroepen, Pub/Sub, Gebeurtenisbindingen, State Stores en Actors.

In deze zelfstudie implementeert u dezelfde toepassingen uit de Dapr Hallo wereld quickstart.

De toepassing bestaat uit:

  • Een clientcontainer-app (Python) voor het genereren van berichten.
  • Een servicecontainer-app (Node) voor het verbruik en persistent maken van deze berichten in een statusarchief

In het volgende architectuurdiagram ziet u de onderdelen waaruit deze zelfstudie bestaat:

Architectuurdiagram voor Dapr Hallo wereld microservices in Azure Container Apps

Instellingen

Als u zich wilt aanmelden bij Azure vanuit de CLI, voert u de volgende opdracht uit en volgt u de aanwijzingen om het verificatieproces te voltooien.

az login

Voer de upgradeopdracht uit om ervoor te zorgen dat u de nieuwste versie van de CLI uitvoert.

az upgrade

Installeer of werk vervolgens de Azure Container Apps-extensie voor de CLI bij.

az extension add --name containerapp --upgrade

Nu de huidige extensie of module is geïnstalleerd, registreert u de Microsoft.App en Microsoft.OperationalInsights naamruimten.

Notitie

Azure Container Apps-resources zijn gemigreerd van de Microsoft.Web naamruimte naar de Microsoft.App naamruimte. Raadpleeg de naamruimtemigratie van Microsoft.Web naar Microsoft.App in maart 2022 voor meer informatie.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

Omgevingsvariabelen instellen

Stel de volgende omgevingsvariabelen in. Vervang <TIJDELIJKE AANDUIDINGEN> door uw waarden:

RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"

Maak een Azure-resourcegroep

Maak een resourcegroep om de services te ordenen die betrekking hebben op de implementatie van uw container-app.

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

Een omgeving maken

Een omgeving in Azure Container Apps maakt een veilige grens rond 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.

Voer de volgende opdracht uit om de omgeving te maken:

az containerapp env create \
  --name $CONTAINERAPPS_ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION"

Een statusarchief instellen

Een Azure Blob Storage-account maken

Wanneer de omgeving is geïmplementeerd, is de volgende stap het implementeren van een Azure Blob Storage-account dat wordt gebruikt door een van de microservices voor het opslaan van gegevens. Voordat u de service implementeert, moet u een naam voor het opslagaccount kiezen. Namen van opslagaccounts moeten uniek zijn binnen Azure, van 3 tot 24 tekens lang en mogen alleen cijfers en kleine letters bevatten.

STORAGE_ACCOUNT_NAME="<storage account name>"

Gebruik de volgende opdracht om het Azure Storage-account te maken.

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

Een door de gebruiker toegewezen identiteit configureren voor de knooppunt-app

Hoewel Container Apps zowel door de gebruiker toegewezen als door het systeem toegewezen beheerde identiteit ondersteunt, biedt een door de gebruiker toegewezen identiteit de knooppunt-app met dapr-functionaliteit met machtigingen voor toegang tot het blob-opslagaccount.

  1. Maak een door de gebruiker toegewezen identiteit.
az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity" --output json

Haal de principalId en eigenschappen op id en sla deze op in variabelen.

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 \")
  1. De rol toewijzen aan de door de Storage Blob Data Contributor gebruiker toegewezen identiteit

Haal de abonnements-id voor uw huidige abonnement op.

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

Het statusarchiefonderdeel configureren

Er zijn meerdere manieren om te verifiëren bij externe resources via Dapr. In dit voorbeeld wordt de Dapr Secrets-API niet gebruikt tijdens runtime, maar wordt een op Azure gebaseerde statusopslag gebruikt. Daarom kunt u een geheim archiefonderdeel maken en in plaats daarvan directe toegang bieden vanuit de knooppunt-app naar de blobopslag met behulp van beheerde identiteit. Als u tijdens runtime een niet-Azure-statusarchief of de Dapr Secrets-API wilt gebruiken, kunt u een geheimarchiefonderdeel maken. Met dit onderdeel worden runtimegeheimen geladen, zodat u er tijdens runtime naar kunt verwijzen.

Open een teksteditor en maak een configuratiebestand met de naam statestore.yaml met de eigenschappen die u uit de vorige stappen hebt opgehaald. Dit bestand helpt uw Dapr-app toegang te krijgen tot uw statusarchief. In het volgende voorbeeld ziet u hoe uw statestore.yaml-bestand eruit moet zien wanneer het is geconfigureerd voor uw Azure Blob Storage-account:

# 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

Als u dit bestand wilt gebruiken, werkt u de tijdelijke aanduidingen bij:

  • Vervang door <STORAGE_ACCOUNT_NAME> de waarde van de variabele die STORAGE_ACCOUNT_NAME u hebt gedefinieerd. Voer de volgende opdracht uit om de waarde te verkrijgen:
echo $STORAGE_ACCOUNT_NAME
  • Vervang door <MANAGED_IDENTITY_CLIENT_ID> de waarde van de variabele die CLIENT_ID u hebt gedefinieerd. Voer de volgende opdracht uit om de waarde te verkrijgen:
echo $CLIENT_ID

Navigeer naar de map waarin u het yaml-bestand van het onderdeel hebt opgeslagen en voer de volgende opdracht uit om het Dapr-onderdeel in de Container Apps-omgeving te configureren. Zie Dapr-onderdelen configureren voor meer informatie over het configureren van Dapr-onderdelen.

az containerapp env dapr-component set \
    --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP \
    --dapr-component-name statestore \
    --yaml statestore.yaml

De servicetoepassing implementeren (HTTP-webserver)

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'

De installatiekopie wordt standaard opgehaald uit Docker Hub.

De clienttoepassing implementeren (headless client)

Voer de volgende 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

De resultaten controleren

Persistentie van geslaagde status bevestigen

U kunt controleren of de services correct werken door gegevens in uw Azure Storage-account weer te geven.

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

  2. Selecteer het linkermenu Containers .

  3. Selecteer mycontainer.

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

  5. Selecteer het bestand.

  6. Selecteer het tabblad Bewerken .

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

Logboeken bekijken

Logboeken van container-apps worden opgeslagen in de ContainerAppConsoleLogs_CL aangepaste tabel in de Log Analytics-werkruimte. U kunt logboeken bekijken via Azure Portal of via de CLI. Er kan in eerste instantie een kleine vertraging optreden voordat de tabel in de werkruimte wordt weergegeven.

Gebruik de volgende CLI-opdracht om logboeken weer te geven met behulp van de opdrachtregel.

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

In de volgende uitvoer ziet u het type antwoord 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

Resources opschonen

Gefeliciteerd U hebt deze zelfstudie voltooid. Als u de resources wilt verwijderen die zijn gemaakt als onderdeel van dit scenario, voert u de volgende opdracht uit.

Let op

Met deze opdracht verwijdert u de opgegeven resourcegroep en alle resources erin. Als resources buiten het bereik van deze zelfstudie in de opgegeven resourcegroep bestaan, worden ze ook verwijderd.

az group delete --resource-group $RESOURCE_GROUP

Notitie

Aangezien pythonapp u continu aanroepen uitvoert nodeapp met berichten die worden bewaard in uw geconfigureerde statusarchief, is het belangrijk om deze opschoonstappen te voltooien om lopende factureerbare bewerkingen te voorkomen.

Tip

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

Volgende stappen