Condividi tramite


Guida introduttiva: Effettuare il deployment di un'applicazione Dapr in Azure Container Apps usando l'Azure CLI

Dapr (Distributed Application Runtime) consente agli sviluppatori di creare microservizi resilienti e affidabili. In questa guida introduttiva imparerai come abilitare i processi Dapr sidecar per l'esecuzione insieme alle app container di microservizi. Sarai:

  • Creare un ambiente per le app contenitore e un archivio stati di Archiviazione BLOB di Azure per le app contenitore.
  • Distribuire un'app contenitore Python che pubblica messaggi.
  • Distribuire un'app container Node.js che si iscrive ai messaggi e li memorizza in uno store di stato.
  • Verificare l'interazione tra i due microservizi usando il portale di Azure.

Diagramma dell'architettura per i microservizi Dapr Hello World nelle App contenitore di Azure

Questa guida introduttiva rispecchia le applicazioni che distribuisci nel quickstart di avvio rapido open source di Dapr Hello World.

Configurazione

Per accedere ad Azure dall'interfaccia della riga di comando, eseguire il comando seguente e seguire le istruzioni per completare il processo di autenticazione.

az login

Per assicurarsi di eseguire l'ultima versione della CLI, eseguire il comando di aggiornamento.

az upgrade

Installare o aggiornare l'estensione Azure Container Apps per il CLI.

Se ricevi errori relativi ai parametri mancanti quando esegui comandi nell'Azure CLI o cmdlet del modulo Az.App in PowerShell, assicurati di avere installato la versione più recente dell'estensione Azure Container Apps.

az extension add --name containerapp --upgrade

Nota

A partire da maggio 2024, le estensioni dell'interfaccia della riga di comando di Azure non abilitano più le funzionalità di anteprima per impostazione predefinita. Per accedere alle funzionalità di anteprima di App contenitore, installare l'estensione App contenitore con --allow-preview true.

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

Ora che l'estensione o il modulo corrente è installato, registra i namespace Microsoft.App e Microsoft.OperationalInsights.

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

Impostare le variabili di ambiente

Impostare le variabili di ambiente seguenti. Sostituire <placeholders> con i valori personali.

RESOURCE_GROUP="<new-resource-group>"
LOCATION="<location>"
CONTAINERAPPS_ENVIRONMENT="<containerapps-environment>"

Creare un gruppo di risorse di Azure

Creare un gruppo di risorse per organizzare i servizi correlati alla distribuzione dell'app contenitore.

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

Crea un ambiente

Un ambiente di App contenitore di Azure crea un limite sicuro intorno a un gruppo di app contenitore. Le app container distribuite nello stesso ambiente vengono distribuite nella stessa rete virtuale e scrivono i log nella stessa area di lavoro di Log Analytics.

Per creare l'ambiente, eseguire il comando seguente:

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

Configurare un archivio di stato

Creare un account di Archiviazione Blob di Azure

Una volta distribuito l'ambiente, distribuisci un account di archiviazione blob di Azure utilizzato dall'app container Node.js per archiviare i dati. Prima di distribuire il servizio, scegliere un nome per l'account di archiviazione. I nomi degli account di archiviazione devono essere univoci in Azure, avere una lunghezza compresa tra 3 e 24 caratteri e contenere solo numeri e lettere minuscole.

STORAGE_ACCOUNT_NAME="<storage account name>"

Usare il comando seguente per creare Account di archiviazione di Azure.

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

Configurare un'identità assegnata dall'utente per l'app nodo

Mentre le Container Apps supportano sia l'identità gestita assegnata dall'utente che quella assegnata dal sistema, un'identità assegnata dall'utente fornisce all'app di Node.js abilitata per Dapr le autorizzazioni per accedere all'account di archiviazione di blob.

  1. Creare un'identità assegnata dall'utente.

    az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity"     --output json
    
  2. Recuperare le proprietà principalId e id e archiviare nelle variabili.

    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. Recuperare l'ID sottoscrizione per la sottoscrizione corrente.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  4. Assegnare il ruolo Storage Blob Data Contributor all'identità assegnata dall'utente.

    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"
    

Configurare il componente dell'archivio stati

Anche se sono disponibili più opzioni per l'autenticazione a risorse esterne tramite Dapr. Questo esempio usa un archivio stati basato su Azure, quindi è possibile fornire l'accesso diretto dall'app Node.js all'archivio BLOB usando l'identità gestita.

  1. In un editor di testo creare un file denominato statestore.yaml con le proprietà di origine dei passaggi precedenti.

    # 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
    

    Questo file consente all'app Dapr di accedere all'archivio dello stato.

  2. Passare alla directory in cui è stato archiviato il file yaml ed eseguire il comando seguente per configurare il componente Dapr nell'ambiente App contenitore.

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

Distribuire l'applicazione Node.js

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'

Se si usa un Registro Azure Container, includere il flag --registry-server <REGISTRY_NAME>.azurecr.io nel comando.

Per impostazione predefinita, l'immagine viene estratta dal Docker Hub.

Distribuire l'applicazione Python

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

Se si usa un registro container di Azure, includere il flag --registry-server <REGISTRY_NAME>.azurecr.io nel comando.

Verificare i risultati

Confermare la persistenza riuscita dello stato

È possibile verificare che i servizi funzionino correttamente visualizzando i dati nell'account di Archiviazione di Azure.

  1. Aprire il portale di Azure nel browser e passare all'account di archiviazione.

  2. Selezionare Archiviazione dati>Contenitori nel menu a sinistra.

  3. Selezionare l'app contenitore.

  4. Verificare che sia possibile visualizzare il file denominato order nel contenitore.

  5. Selezionare il file .

  6. Selezionare la scheda Modifica.

  7. Selezionare il pulsante Aggiorna per osservare come i dati vengono aggiornati automaticamente.

Visualizza registri

I log delle app contenitore vengono archiviati nella tabella personalizzata ContainerAppConsoleLogs_CL nell'area di lavoro Log Analytics. È possibile visualizzare i log tramite il portale di Azure o tramite l'interfaccia della riga di comando. Inizialmente potrebbe verificarsi un piccolo ritardo per visualizzare la tabella nell'area di lavoro.

Visualizzare i log dalla riga di comando con il seguente comando CLI.

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

L'output seguente dimostra il tipo di risposta previsto dal comando CLI.

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

Pulire le risorse

Poiché pythonapp effettua continuamente chiamate a nodeapp con messaggi che vengono salvati in modo permanente nell'archivio stati configurato, è importante completare questi passaggi di pulizia per evitare operazioni fatturabili in corso.

Per eliminare le risorse create come parte di questa procedura dettagliata, eseguire il comando seguente.

Attenzione

Questo comando elimina il gruppo di risorse specificato e tutte le risorse contenute al suo interno. Se nel gruppo di risorse specificato sono presenti anche risorse diverse da quelle usate in questa esercitazione, verranno eliminate.

az group delete --resource-group $RESOURCE_GROUP

Suggerimento

Problemi? Fateci sapere su GitHub aprendo un problema nel repository Azure Container Apps.

Passaggi successivi