Esercitazione: Distribuire un'applicazione Distributed Apps Runtime in App contenitore di Azure 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 di 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 specificarla con l'assegnazione di ruolo appropriata per l'autenticazione nell'archivio stati Dapr
- Verificare l'interazione tra le due app
Con App contenitore di Azure si ottiene una versione completamente gestita delle API Dapr durante la creazione di microservizi. Quando si usa Dapr in App contenitore di Azure, è possibile abilitare l'esecuzione di sidecar accanto ai microservizi che offrono un set completo di funzionalità.
In questa esercitazione, si distribuisce la soluzione dall'avvio rapido Dapr 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:
Prerequisiti
- Installare l' interfaccia della riga di comando di Azure
- Installare Git
- È richiesto un account Azure con una sottoscrizione attiva. Se non è già disponibile, è possibile creare un account gratuitamente.
- Un account GitHub. Se non si dispone già di uno, iscriversi per ottenere una versione di valutazione gratuita.
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
Assicurarsi di eseguire l'ultima versione dell'interfaccia della riga di comando eseguire il comando di aggiornamento.
az upgrade
Installare o aggiornare quindi l'estensione App contenitore di Azure per l'interfaccia della riga di comando.
Se si ricevono errori relativi ai parametri mancanti quando si eseguono comandi az containerapp
nell'interfaccia della riga di comando di Azure o nei cmdlet del modulo Az.App
in Azure PowerShell, assicurarsi di avere installato la versione più recente dell'estensione App contenitore di Azure.
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, registrare gli spazi dei nomi 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 i <SEGNAPOSTO> 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 delle 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 di Azure e un contenitore di archiviazione predefinito
- un componente Dapr per l'account di archiviazione BLOB
- l'applicazione contenitore nodo, abilitata per Dapr con un'identità gestita assegnata dall'utente: hello-k8s-node
- l'applicazione contenitore python, abilitata per Dapr: hello-k8s-python
- un'assegnazione di ruolo Microsoft Entra ID per l'app nodo 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 server app
nodeapp
in esecuzione sutargetPort: 3000
con Dapr abilitato e configurato usando:"appId": "nodeapp"
e"appPort": 3000
, oltre a un'identità assegnata dall'utente con accesso all'archiviazione BLOB di Azure tramite un'assegnazione di ruolo Collaboratore dati di archiviazione - Un componente Dapr di
"type": "state.azure.blobstorage"
che può essere utilizzato danodeapp
per archiviare lo stato - il servizio headless abilitato per Dapr
pythonapp
che invoca il servizionodeapp
utilizzando l'invocazione di servizio Dapr
Verificare il risultato
Conferma l'avvenuta persistenza dello stato
È possibile verificare che i servizi funzionino correttamente visualizzando i dati nell'account di Archiviazione di Azure.
Aprire il portale di Azure nel browser.
Passare all'account di archiviazione appena creato nel gruppo di risorse.
Selezionare Contenitori dal menu a sinistra.
Selezionare il contenitore creato.
Verificare che sia possibile visualizzare il file denominato
order
nel contenitore.Selezionare il file .
Selezionare la scheda Modifica.
Selezionare il pulsante Aggiorna per osservare gli aggiornamenti.
Visualizza registri
I dati registrati tramite un'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 dalla riga di comando. Attendere alcuni minuti il primo arrivo dei dati analitici 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 i problemi su GitHub aprendo un ticket nel repository App contenitore di Azure.