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

Dapr (Distributed Application Runtime) är en körningstid som hjälper dig att skapa motståndskraftiga, tillståndslösa och tillståndslösa mikrotjänster. I den här självstudien distribueras ett Dapr-exempelprogram till Azure Container Apps.

Lär dig att:

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

Azure Container Apps erbjuder 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 aktivera att sidovagnar körs bredvid dina mikrotjänster som tillhandahåller en omfattande uppsättning funktioner. Tillgängliga Dapr-API:er inkluderar tjänst-till-tjänst-anrop, pub/sub,händelsebindningar, tillståndslageroch aktörer.

I den här självstudien distribuerar du samma program från snabbstarten dapr Hello World, som består av en klientapp (Python) som genererar meddelanden och en tjänstapp (Node) som använder och sparar dessa meddelanden i ett konfigurerat tillståndslager. 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

Förutsättningar

Innan du börjar

I den här guiden används följande miljövariabler:

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

Kodfragmentet ovan kan användas för att ange miljövariabler med hjälp av bash, zsh eller PowerShell.

STORAGE_ACCOUNT="<storage account name>"

Välj ett namn för STORAGE_ACCOUNT . Den skapas i följande steg. Storage måste vara unika i Azure och mellan 3 och 24 tecken långa och får endast innehålla siffror och gemener.

Installation

Börja med att logga in på Azure från CLI.

Kör följande kommando och följ anvisningarna för att slutföra autentiseringsprocessen.

az login

Kontrollera att du kör den senaste versionen av CLI via uppgraderingskommandot.

az upgrade

Installera sedan tillägget Azure Container Apps till CLI.

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

Nu när tillägget har installerats registrerar du Microsoft.Web namnområdet.

az provider register --namespace Microsoft.Web

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

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

När CLI har uppgraderats och en ny resursgrupp är tillgänglig kan du skapa en Container Apps-miljö och distribuera din containerapp.

Skapa en miljö

Azure Container Apps-miljöer fungerar som isoleringsgränser mellan en grupp med containerappar. Containerappar som distribueras till samma miljö distribueras i samma virtuella nätverk och skriver loggar till samma Log Analytics-arbetsyta.

Azure Log Analytics används för att övervaka din containerapp och krävs när du skapar en Container Apps-miljö.

Skapa en ny Log Analytics-arbetsyta med följande kommando:

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

Hämta sedan Log Analytics-klient-ID och klienthemlighet.

Se till att köra varje fråga separat för att ge tillräckligt med tid för att slutföra begäran.

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`

Enskilda containerappar distribueras till en Azure Container Apps-miljö. Kör följande kommando för att skapa miljön:

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"

Konfigurera ett tillståndslager

Skapa ett Azure Blob Storage konto

Använd följande kommando för att skapa ett nytt Azure Storage konto.

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

När ditt Azure Blob Storage-konto har skapats behövs följande värden för efterföljande steg i den här självstudien.

  • storage_account_name är värdet för STORAGE_ACCOUNT variabeln som du valde ovan.

  • storage_container_name är värdet för som STORAGE_ACCOUNT_CONTAINER definieras ovan (till exempel mycontainer ). Dapr skapar en container med det här namnet om den inte redan finns i ditt Azure Storage konto.

Hämta lagringskontonyckeln med följande kommando.

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

Konfigurera komponenten för tillståndslager

Med hjälp av de egenskaper som du skapade i stegen ovan skapar du en konfigurationsfil med namnet components.yaml. Den här filen hjälper dapr-appen att komma åt tillståndslagret. I följande exempel visas hur filen components.yaml bör se ut när den har konfigurerats för ditt Azure Blob Storage konto:

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

Om du vill använda den här filen ersätter du platshållarvärdena mellan <> hakparenteserna med dina egna värden.

Anteckning

Container Apps stöder för närvarande inte schemat för interna Dapr-komponenter. I exemplet ovan används det schema som stöds.

I ett program i produktionsklass följer du anvisningarna för hemlighetshantering för att hantera dina hemligheter på ett säkert sätt.

Distribuera tjänstprogrammet (HTTP-webbserver)

Gå till katalogen där du lagrade filen components.yaml och kör kommandot nedan för att distribuera tjänstcontainerappen.

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

Det här kommandot distribuerar tjänstappservern (Node) på (appens port) tillsammans med tillhörande Dapr-sidovagn som konfigurerats med och för identifiering och --target-port 3000 --dapr-app-id nodeapp --dapr-app-port 3000 anrop av tjänster. Tillståndslagret har konfigurerats med --dapr-components ./components.yaml , vilket gör att sidovagnen kan bevara tillståndet.

Distribuera klientprogrammet (huvudlös klient)

Kör kommandot nedan 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

Det här kommandot distribuerar som även körs med en Dapr-sidovagn som används för att leta upp och på ett säkert sätt anropa pythonapp Dapr-sidovagnen för nodeapp . Eftersom den här appen är fjärradrigt finns det inget behov av att starta en server, och det --target-port finns inte heller något behov av att aktivera ingress.

Verifiera resultatet

Bekräfta lyckad tillståndspersistence

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

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

  2. Välj Containrar till vänster.

  3. Välj mycontainer.

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

  5. Klicka på filen.

  6. Klicka på fliken Redigera.

  7. Klicka på knappen Uppdatera för att se hur data uppdateras automatiskt.

Visa loggfiler

Data som loggas via en containerapp lagras i ContainerAppConsoleLogs_CL den anpassade tabellen på Log Analytics-arbetsytan. Du kan visa loggar via Azure Portal eller med CLI. Du kan behöva vänta några minuter tills analyserna kommer första gången innan du kan köra frågor mot loggade data.

Använd följande CLI-kommando för att visa loggar på kommandoraden.

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

Följande utdata visar vilken typ av svar du kan förvänta dig från 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

Tips

Har du problem? Berätta för oss på GitHub genom att öppna ett problem i Azure Container Apps-lagringsplatsen.

Rensa resurser

När du är klar rensar du dina containerappresurser genom att köra följande kommando för att ta bort resursgruppen.

az group delete \
    --resource-group $RESOURCE_GROUP

Det här kommandot tar bort båda containerapparna, lagringskontot, containerappmiljön och andra resurser i resursgruppen.

Anteckning

Eftersom kontinuerligt gör anrop till med meddelanden som bevaras i ditt konfigurerade tillståndslager, är det viktigt att slutföra dessa rensningssteg för att undvika pågående pythonapp nodeapp fakturerbara åtgärder.

Nästa steg