Dela via


Snabbstart: 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 snabbstarten får du lära dig hur du gör så att Dapr-sidovagnar kan köras tillsammans med dina containerappar för mikrotjänster. Du kommer att:

  • Skapa en Container Apps-miljö och Azure Blog Storage-tillståndsarkiv för dina containerappar.
  • Distribuera en Python-containerapp som publicerar meddelanden.
  • Distribuera en Node.js containerapp som prenumererar på meddelanden och bevarar dem i ett tillståndslager.
  • Kontrollera interaktionen mellan de två mikrotjänsterna med hjälp av Azure Portal.

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

Den här snabbstarten speglar de program som du distribuerar i snabbstarten Dapr Hello World med öppen källkod.

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. <PLACEHOLDERS> Ersätt 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 distribuerar du ett Azure Blob Storage-konto som används av Node.js containerapp för att lagra data. Innan du distribuerar tjänsten väljer du 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 Node.js-appen behörighet att komma åt bloblagringskontot.

  1. Skapa en användartilldelad identitet.

    az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity"     --output json
    
  2. 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 \")
    
  3. Hämta prenumerations-ID:t för din aktuella prenumeration.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  4. Storage Blob Data Contributor Tilldela rollen till den användartilldelade identiteten.

    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

Du har flera alternativ för att autentisera till externa resurser via Dapr. I det här exemplet används ett Azure-baserat tillståndsarkiv, så att du kan ge direkt åtkomst från Node.js-appen till Blob Store med hjälp av hanterad identitet.

  1. I en textredigerare skapar du en fil med namnet statestore.yaml med de egenskaper som du hämtade från föregående steg.

    # 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
    

    Den här filen hjälper din Dapr-app att få åtkomst till din tillståndsbutik.

  2. Gå till katalogen där du lagrade yaml-filen och kör följande kommando för att konfigurera Dapr-komponenten i Container Apps-miljön.

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

Distribuera Node.js-programmet

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 Python-programmet

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 Datalagringscontainrar> på menyn till vänster.

  3. Välj containerappen.

  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.

Visa loggar med hjälp av kommandoraden med följande CLI-kommando.

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

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.

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

Dricks

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

Nästa steg