Dela via


Självstudie: Distribuera ett Dapr-program till Azure Container Apps med hjälp av Azure CLI

Dapr (Distributed Application Runtime) hjälper utvecklare att skapa motståndskraftiga och tillförlitliga mikrotjänster. I den här självstudien distribueras ett Dapr-exempelprogram till Azure Container Apps.

Du lär dig att:

  • Skapa en Container Apps-miljö för dina containerappar
  • Skapa ett Azure Blob Storage-tillståndslager för containerappen
  • Distribuera två appar som producerar och använder meddelanden och bevarar dem i tillståndsarkivet
  • Kontrollera interaktionen mellan de två mikrotjänsterna.

Med Azure Container Apps får du en fullständigt hanterad version av Dapr-API:erna när du skapar mikrotjänster. När du använder Dapr i Azure Container Apps kan du göra så att sidovagnar kan köras bredvid dina mikrotjänster som ger en omfattande uppsättning funktioner. Tillgängliga Dapr-API:er är Service to Service-anrop, Pub/Sub, Event Bindings, State Stores och Actors.

I den här självstudien distribuerar du samma program från snabbstarten Dapr Hello World .

Programmet består av:

  • En klientcontainerapp (Python) för att generera meddelanden.
  • En tjänstcontainerapp (Node) för att använda och spara dessa meddelanden i ett tillståndsarkiv

Följande arkitekturdiagram illustrerar de komponenter som utgör den här självstudien:

Arkitekturdiagram för Dapr Hello World-mikrotjänster i Azure Container Apps

Ställ in

Om du vill logga in på Azure från CLI kör du följande kommando och följer anvisningarna för att slutföra autentiseringsprocessen.

az login

Kör uppgraderingskommandot för att säkerställa att du kör den senaste versionen av CLI.

az upgrade

Installera eller uppdatera sedan Azure Container Apps-tillägget för CLI.

Om du får fel om saknade parametrar när du kör az containerapp kommandon i Azure CLI eller cmdletar från modulen Az.App i Azure PowerShell kontrollerar du att den senaste versionen av Azure Container Apps-tillägget är installerad.

az extension add --name containerapp --upgrade

Kommentar

Från och med maj 2024 aktiverar Azure CLI-tillägg inte längre förhandsversionsfunktioner som standard. Om du vill komma åt förhandsversionsfunktioner för Container Apps installerar du containerapptillägget med --allow-preview true.

az extension add --name containerapp --upgrade --allow-preview true

Nu när det aktuella tillägget eller modulen har installerats registrerar du Microsoft.App namnrymderna och Microsoft.OperationalInsights .

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

Ange miljövariabler

Ange följande miljövariabler. Ersätt <PLACEHOLDERS> med dina värden:

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

Skapa en Azure-resursgrupp

Skapa en resursgrupp för att organisera de tjänster som är relaterade till distributionen av containerappen.

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

Skapa en miljö

En miljö i Azure Container Apps skapar en säker gräns runt en grupp med containerappar. Container Apps som distribueras till samma miljö distribueras i samma virtuella nätverk och skriver loggar till samma Log Analytics-arbetsyta.

Kör följande kommando för att skapa miljön:

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

Konfigurera ett tillståndslager

Skapa ett Azure Blob Storage-konto

När miljön har distribuerats är nästa steg att distribuera ett Azure Blob Storage-konto som används av en av mikrotjänsterna för att lagra data. Innan du distribuerar tjänsten måste du välja ett namn för lagringskontot. Lagringskontonamn måste vara unika i Azure, från 3 till 24 tecken långa och får endast innehålla siffror och gemener.

STORAGE_ACCOUNT_NAME="<storage account name>"

Använd följande kommando för att skapa Azure Storage-kontot.

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

Konfigurera en användartilldelad identitet för nodappen

Container Apps stöder både användartilldelad och systemtilldelad hanterad identitet, men en användartilldelad identitet ger den Dapr-aktiverade nodappen behörighet att komma åt bloblagringskontot.

  1. Skapa en användartilldelad identitet.
az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity" --output json

principalId Hämta egenskaperna och id och lagra i variabler.

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. Storage Blob Data Contributor Tilldela rollen till den användartilldelade identiteten

Hämta prenumerations-ID:t för din aktuella prenumeration.

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"

Konfigurera komponenten för tillståndsarkivet

Det finns flera sätt att autentisera till externa resurser via Dapr. Det här exemplet använder inte Dapr Secrets API vid körning, utan använder ett Azure-baserat tillståndsarkiv. Därför kan du avstå från att skapa en hemlig butikskomponent och i stället ge direkt åtkomst från nodappen till Blob Store med hjälp av hanterad identitet. Om du vill använda ett icke-Azure-tillståndsarkiv eller Dapr Secrets API vid körning kan du skapa en komponent för hemligt arkiv. Den här komponenten läser in körningshemligheter så att du kan referera till dem vid körning.

Öppna en textredigerare och skapa en konfigurationsfil med namnet statestore.yaml med de egenskaper som du hämtade från föregående steg. Den här filen hjälper din Dapr-app att få åtkomst till din tillståndsbutik. I följande exempel visas hur din statestore.yaml-fil ska se ut när den konfigureras för ditt Azure Blob Storage-konto:

# 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

Om du vill använda den här filen uppdaterar du platshållarna:

  • Ersätt <STORAGE_ACCOUNT_NAME> med värdet för den variabel som STORAGE_ACCOUNT_NAME du definierade. Kör följande kommando för att hämta dess värde:
echo $STORAGE_ACCOUNT_NAME
  • Ersätt <MANAGED_IDENTITY_CLIENT_ID> med värdet för den variabel som CLIENT_ID du definierade. Kör följande kommando för att hämta dess värde:
echo $CLIENT_ID

Gå till katalogen där du lagrade komponenten yaml-filen och kör följande kommando för att konfigurera Dapr-komponenten i Container Apps-miljön. Mer information om hur du konfigurerar Dapr-komponenter finns i Konfigurera Dapr-komponenter.

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

Distribuera tjänstprogrammet (HTTP-webbserver)

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'

Om du använder ett Azure Container Registry tar du med --registry-server <REGISTRY_NAME>.azurecr.io flaggan i kommandot .

Som standard hämtas avbildningen från Docker Hub.

Distribuera klientprogrammet (huvudlös klient)

Kör följande kommando för att distribuera klientcontainerappen.

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

Om du använder ett Azure Container Registry tar du med --registry-server <REGISTRY_NAME>.azurecr.io flaggan i kommandot .

Verifiera resultatet

Bekräfta lyckad tillståndsbeständighet

Du kan bekräfta att tjänsterna fungerar korrekt genom att visa data i ditt Azure Storage-konto.

  1. Öppna Azure Portal i webbläsaren och gå till ditt lagringskonto.

  2. Välj Menyn På vänster sida i Containrar .

  3. Välj mycontainer.

  4. Kontrollera att du kan se filen med namnet order i containern.

  5. Välj filen.

  6. Välj fliken Redigera .

  7. Välj knappen Uppdatera för att se hur data uppdateras automatiskt.

Visa loggfiler

Loggar från containerappar lagras i den ContainerAppConsoleLogs_CL anpassade tabellen på Log Analytics-arbetsytan. Du kan visa loggar via Azure Portal eller via CLI. Det kan till en början uppstå en liten fördröjning för tabellen som ska visas på arbetsytan.

Använd följande CLI-kommando för att visa loggar med hjälp av kommandoraden.

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

Följande utdata visar vilken typ av svar som kan förväntas av CLI-kommandot.

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

Rensa resurser

Grattis! Du har slutfört den här självstudien. Om du vill ta bort de resurser som skapats som en del av den här genomgången kör du följande kommando.

Varning

Det här kommandot tar bort den angivna resursgruppen och alla resurser som ingår i den. Om det finns resurser utanför omfånget för den här självstudien i den angivna resursgruppen tas de också bort.

az group delete --resource-group $RESOURCE_GROUP

Kommentar

Eftersom pythonapp kontinuerligt anropar nodeapp med meddelanden som sparas i ditt konfigurerade tillståndsarkiv är det viktigt att slutföra de här rensningsstegen för att undvika pågående fakturerbara åtgärder.

Dricks

Har du problem? Meddela oss på GitHub genom att öppna ett problem i Azure Container Apps-lagringsplatsen.

Nästa steg