Share via


Esercitazione: Distribuire un'applicazione Dapr in App Azure Container con un modello di Azure Resource Manager o Bicep

Dapr (Distributed Application Runtime) è un runtime che consente di creare microservizi resilienti senza stato e con stato. In questa esercitazione viene distribuita una soluzione Dapr di esempio in App Contenitore di Azure tramite un modello di Azure Resource Manager (ARM) o Bicep.

Scopri come:

  • Creare un Archiviazione BLOB di Azure da usare come archivio stati dapr
  • Distribuire un ambiente app contenitore per ospitare app contenitore
  • Distribuire due app contenitore abilitate per la reimpostazione della password dapr: una che produce ordini e una che li utilizza e li archivia
  • Assegnare un'identità assegnata dall'utente a un'app contenitore e fornirla con l'assegnazione di ruolo appropriata per l'autenticazione nell'archivio stati dapr
  • Verificare l'interazione tra i due microservizi.

Con App Azure Container si ottiene una versione completamente gestita delle API Dapr durante la creazione di microservizi. Quando si usa Dapr nelle app Azure Container, è possibile abilitare l'esecuzione sidecars accanto ai microservizi che offrono un set completo di funzionalità.

In questa esercitazione si distribuisce la soluzione dall'avvio rapido Dipr Hello World .

L'applicazione è costituita da:

  • Un'app contenitore client (Python) per generare messaggi.
  • Un'app contenitore del servizio (Node) per utilizzare e rendere persistenti tali messaggi in un archivio stati

Il diagramma dell'architettura seguente illustra i componenti che costituiscono questa esercitazione:

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

Prerequisiti

Attrezzaggio

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 la versione più recente dell'interfaccia della riga di comando, eseguire il comando di aggiornamento.

az upgrade

Installare o aggiornare quindi l'estensione App Azure Container per l'interfaccia della riga di comando.

az extension add --name containerapp --upgrade

Ora che l'estensione o il modulo corrente è installato, registrare gli Microsoft.App spazi dei nomi e Microsoft.OperationalInsights .

Nota

Le risorse di App Azure Container sono state migrate dallo Microsoft.Web spazio dei nomi allo Microsoft.App spazio dei nomi . Per altri dettagli, vedere Migrazione dello spazio dei nomi da Microsoft.Web a Microsoft.App nel mese di marzo 2022.

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:

RESOURCE_GROUP="<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"

Preparare il repository GitHub

Passare al repository che contiene i modelli ARM e Bicep usati per distribuire la soluzione.

Selezionare il pulsante Fork nella parte superiore del repository per creare una copia tramite fork del repository nell'account.

È ora possibile clonare il fork per usarlo in locale.

Usare il comando git seguente per clonare il repository con fork nella directory acadapr-templates .

git clone https://github.com/$GITHUB_USERNAME/Tutorial-Deploy-Dapr-Microservices-ACA.git acadapr-templates

Distribuzione

Il modello distribuisce:

  • un ambiente app contenitore
  • un'area di lavoro Log Analytics associata all'ambiente App contenitore
  • una risorsa di Application Insights per la traccia distribuita
  • un account di archiviazione BLOB e un contenitore di archiviazione predefinito
  • un componente Dapr per l'account di archiviazione BLOB
  • il nodo, app contenitore abilitata per Dapr con un'identità gestita assegnata dall'utente: hello-k8s-node
  • l'app contenitore abilitata per Python, dapr-enabled: hello-k8s-python
  • un'assegnazione di ruolo di Active Directory per l'app node usata dal componente Dapr per stabilire una connessione all'archiviazione BLOB

Passare alla directory acadapr-templates ed eseguire il comando seguente:

az deployment group create \
  --resource-group "$RESOURCE_GROUP" \
  --template-file ./azuredeploy.json \
  --parameters environment_name="$CONTAINERAPPS_ENVIRONMENT"

Potrebbe essere visualizzato un avviso (BCP081). Questo avviso non ha alcun effetto sulla corretta distribuzione dell'applicazione.

az deployment group create \
  --resource-group "$RESOURCE_GROUP" \
  --template-file ./azuredeploy.bicep \
  --parameters environment_name="$CONTAINERAPPS_ENVIRONMENT"

Questo comando distribuisce:

  • l'ambiente App contenitore e l'area di lavoro Log Analytics associata per l'hosting della soluzione Dapr hello world
  • un'istanza di Application Insights per la traccia distribuita dapr
  • il nodeapp server app in esecuzione targetPort: 3000 con Dapr abilitato e configurato usando: "appId": "nodeapp" e "appPort": 3000e un'identità assegnata dall'utente con accesso all'archiviazione BLOB di Azure tramite un'assegnazione di ruolo collaboratore dati Archiviazione
  • Un componente Dapr con "type": "state.azure.blobstorage" ambito utilizzato da per l'archiviazione nodeapp dello stato
  • Dapr-enabled, headless pythonapp che richiama il nodeapp servizio usando la chiamata al servizio Dapr

Verificare il risultato

Confermare la persistenza dello stato riuscito

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

  1. Aprire il portale di Azure nel browser.

  2. Passare all'account di archiviazione appena creato nel gruppo di risorse.

  3. Selezionare Contenitori dal menu a sinistra.

  4. Selezionare il contenitore creato.

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

  6. Selezionare il file .

  7. Selezionare la scheda Modifica .

  8. Selezionare il pulsante Aggiorna per osservare gli aggiornamenti.

Visualizza registri

I dati registrati tramite un'app contenitore vengono archiviati nella ContainerAppConsoleLogs_CL tabella personalizzata nell'area di lavoro Log Analytics. È possibile visualizzare i log tramite il portale di Azure o dalla riga di comando. Attendere alcuni minuti prima che l'analisi arrivi per la prima volta prima di eseguire una query sui dati registrati.

Usare il comando seguente per visualizzare i log in bash o PowerShell.

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 | take 5" \
  --out table

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

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

Al termine, eseguire il comando seguente per eliminare il gruppo di risorse insieme a tutte le risorse create in questa esercitazione.

az group delete \
  --resource-group $RESOURCE_GROUP

Nota

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.


Suggerimento

Problemi? Segnalare il problema in GitHub aprendo un problema nel repository di App contenitore di Azure.

Passaggi successivi