Esercitazione: Lavoro basato su eventi con associazioni Dapr
In questa esercitazione viene creato un microservizio per illustrare l'API Bindings di Dapr che lavora con sistemi esterni come input e output. Contenuto del modulo:
- Eseguire l'applicazione in locale con l'interfaccia della riga di comando di Dapr.
- Distribuire l'applicazione in App contenitore di Azure tramite Azure Developer CLI con il Bicep fornito.
Il servizio è in ascolto degli eventi di associazione di input da un CRON di sistema e quindi restituisce il contenuto dei dati locali a un'associazione di output PostgreSql.
Prerequisiti
- Installare Azure Developer CLI
- Installare e avviare Dapr
- Docker Desktop
- Installare Git
Eseguire l'applicazione Node.js in locale
Prima di distribuire l'applicazione in App contenitore di Azure, iniziare eseguendo il contenitore PostgreSQL e il servizio JavaScript in locale con Docker Compose e Dapr.
Preparare il progetto
Clonare l'applicazione di esempio nel computer locale.
git clone https://github.com/Azure-Samples/bindings-dapr-nodejs-cron-postgres.git
Passare alla directory radice dell'esempio.
cd bindings-dapr-nodejs-cron-postgres
Eseguire l'applicazione usando l'interfaccia della riga di comando di Dapr
Dalla directory radice dell'esempio modificare le directory in
db
.cd db
Eseguire il contenitore PostgreSQL con Docker Compose.
docker compose up -d
Aprire una nuova finestra del terminale e passare a
/batch
nella directory di esempio.cd bindings-dapr-nodejs-cron-postgres/batch
Installa le dipendenze.
npm install
Eseguire l'applicazione di servizio JavaScript.
dapr run --app-id batch-sdk --app-port 5002 --dapr-http-port 3500 --resources-path ../components -- node index.js
Il comando
dapr run
esegue l'applicazione di associazione in locale. Una volta eseguita correttamente l'applicazione, nella finestra del terminale vengono visualizzati i dati di associazione di output.Output previsto
Il servizio batch è in ascolto degli eventi di associazione di input da un CRON di sistema e quindi restituisce il contenuto dei dati locali a un'associazione di output PostgreSQL.
== APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch
Nel terminale
./db
arrestare il contenitore PostgreSQL.docker compose stop
Distribuire il modello di applicazione usando Azure Developer CLI
Ora che l'applicazione è stata eseguita in locale, distribuire l'applicazione binding in App contenitore di Azure usando azd
. Durante la distribuzione, il componente PostgreSQL in contenitori locale verrà scambiato per un componente PostgreSQL di Azure.
Preparare il progetto
Passare alla directory radice dell'esempio.
cd bindings-dapr-nodejs-cron-postgres
Effettuare il provisioning e la distribuzione usando Azure Developer CLI
Eseguire
azd init
per inizializzare il progetto.azd init
Quando richiesto nel terminale, specificare i parametri seguenti.
Parametro Descrizione Nome ambiente Prefisso per il gruppo di risorse creato per contenere tutte le risorse di Azure. Località di Azure Posizione di Azure per le risorse. Assicurarsi di selezionare un percorso disponibile per Azure PostgreSQL. Sottoscrizione di Azure Sottoscrizione di Azure per le risorse. Eseguire
azd up
per effettuare il provisioning dell'infrastruttura e distribuire l'applicazione in App contenitore di Azure in un singolo comando.azd up
Questo processo può richiedere del tempo. Al termine del comando
azd up
, l'output dell'interfaccia della riga di comando visualizza due collegamenti al portale di Azure per monitorare lo stato di avanzamento della distribuzione. L'output illustra anche comeazd up
:- Crea e configura tutte le risorse di Azure necessarie tramite i file Bicep forniti nella directory
./infra
usandoazd provision
. Dopo aver effettuato il provisioning da Azure Developer CLI, è possibile accedere a queste risorse tramite il portale di Azure. I file di cui è stato effettuato il provisioning delle risorse di Azure includono:main.parameters.json
main.bicep
- Una directory delle risorse
app
organizzata in base alle funzionalità - Libreria di riferimento
core
che contiene i moduli Bicep usati dal modello diazd
- Distribuisce il codice usando
azd deploy
Output previsto
Initializing a new project (azd init) Provisioning Azure resources (azd provision) Provisioning Azure resources can take some time You can view detailed progress in the Azure Portal: https://portal.azure.com/#blade/HubsExtension/DeploymentDetailsBlade/overview (✓) Done: Resource group: resource-group-name (✓) Done: Log Analytics workspace: log-analytics-name (✓) Done: Application Insights: app-insights-name (✓) Done: Portal dashboard: dashboard-name (✓) Done: Azure Database for PostgreSQL flexible server: postgres-server (✓) Done: Key vault: key-vault-name (✓) Done: Container Apps Environment: container-apps-env-name (✓) Done: Container App: container-app-name Deploying services (azd deploy) (✓) Done: Deploying service api - Endpoint: https://your-container-app-endpoint.region.azurecontainerapps.io/ SUCCESS: Your Azure app has been deployed! You can view the resources created under the resource group resource-group-name in Azure Portal: https://portal.azure.com/#@/resource/subscriptions/your-subscription-ID/resourceGroups/your-resource-group/overview
- Crea e configura tutte le risorse di Azure necessarie tramite i file Bicep forniti nella directory
Confermare la corretta distribuzione
Nel portale di Azure verificare che l'app contenitore batch registri ogni inserimento in Azure PostgreSQL ogni 10 secondi.
Copiare il nome dell'app contenitore dall'output del terminale.
Accedere al portale di Azure e cercare la risorsa dell'app contenitore in base al nome.
Nel dashboard dell'app contenitore selezionare Monitoraggio>Flusso di log.
Verificare che il contenitore registri lo stesso output del terminale in precedenza.
Che cosa è successo?
Al termine del comando azd up
:
- Azure Developer CLI ha effettuato il provisioning delle risorse di Azure a cui si fa riferimento nella directory
./infra
del progetto di esempio alla sottoscrizione di Azure specificata. È ora possibile visualizzare le risorse di Azure tramite il portale di Azure. - L'app distribuita in App contenitore di Azure. Dal portale è possibile esplorare l'app completamente funzionale.
Eseguire l'applicazione Python in locale
Preparare il progetto
Clonare l'applicazione di esempio nel computer locale.
git clone https://github.com/Azure-Samples/bindings-dapr-python-cron-postgres.git
Passare alla directory radice dell'esempio.
cd bindings-dapr-python-cron-postgres
Eseguire l'applicazione usando l'interfaccia della riga di comando di Dapr
Prima di distribuire l'applicazione in App contenitore di Azure, iniziare eseguendo il contenitore PostgreSQL e il servizio Python in locale con Docker Compose e Dapr.
Dalla directory radice dell'esempio modificare le directory in
db
.cd db
Eseguire il contenitore PostgreSQL con Docker Compose.
docker compose up -d
Aprire una nuova finestra del terminale e passare a
/batch
nella directory di esempio.cd bindings-dapr-python-cron-postgres/batch
Installa le dipendenze.
pip install -r requirements.txt
Eseguire l'applicazione di servizio Python.
dapr run --app-id batch-sdk --app-port 5001 --dapr-http-port 3500 --resources-path ../components -- python3 app.py
Il comando
dapr run
esegue l'applicazione di associazione in locale. Una volta eseguita correttamente l'applicazione, nella finestra del terminale vengono visualizzati i dati di associazione di output.Output previsto
Il servizio batch è in ascolto degli eventi di associazione di input da un CRON di sistema e quindi restituisce il contenuto dei dati locali a un'associazione di output PostgreSQL.
== APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch
Nel terminale
./db
arrestare il contenitore PostgreSQL.docker compose stop
Distribuire il modello di applicazione usando Azure Developer CLI
Ora che l'applicazione è stata eseguita in locale, distribuire l'applicazione binding in App contenitore di Azure usando azd
. Durante la distribuzione, il componente PostgreSQL in contenitori locale verrà scambiato per un componente PostgreSQL di Azure.
Preparare il progetto
Passare alla directory radice dell'esempio.
cd bindings-dapr-python-cron-postgres
Effettuare il provisioning e la distribuzione usando Azure Developer CLI
Eseguire
azd init
per inizializzare il progetto.azd init
Quando richiesto nel terminale, specificare i parametri seguenti.
Parametro Descrizione Nome ambiente Prefisso per il gruppo di risorse creato per contenere tutte le risorse di Azure. Località di Azure Posizione di Azure per le risorse. Assicurarsi di selezionare un percorso disponibile per Azure PostgreSQL. Sottoscrizione di Azure Sottoscrizione di Azure per le risorse. Eseguire
azd up
per effettuare il provisioning dell'infrastruttura e distribuire l'applicazione in App contenitore di Azure in un singolo comando.azd up
Questo processo può richiedere del tempo. Al termine del comando
azd up
, l'output dell'interfaccia della riga di comando visualizza due collegamenti al portale di Azure per monitorare lo stato di avanzamento della distribuzione. L'output illustra anche comeazd up
:- Crea e configura tutte le risorse di Azure necessarie tramite i file Bicep forniti nella directory
./infra
usandoazd provision
. Dopo aver effettuato il provisioning da Azure Developer CLI, è possibile accedere a queste risorse tramite il portale di Azure. I file di cui è stato effettuato il provisioning delle risorse di Azure includono:main.parameters.json
main.bicep
- Una directory delle risorse
app
organizzata in base alle funzionalità - Libreria di riferimento
core
che contiene i moduli Bicep usati dal modello diazd
- Distribuisce il codice usando
azd deploy
Output previsto
Initializing a new project (azd init) Provisioning Azure resources (azd provision) Provisioning Azure resources can take some time You can view detailed progress in the Azure Portal: https://portal.azure.com/#blade/HubsExtension/DeploymentDetailsBlade/overview (✓) Done: Resource group: resource-group-name (✓) Done: Log Analytics workspace: log-analytics-name (✓) Done: Application Insights: app-insights-name (✓) Done: Portal dashboard: dashboard-name (✓) Done: Azure Database for PostgreSQL flexible server: postgres-server (✓) Done: Key vault: key-vault-name (✓) Done: Container Apps Environment: container-apps-env-name (✓) Done: Container App: container-app-name Deploying services (azd deploy) (✓) Done: Deploying service api - Endpoint: https://your-container-app-endpoint.region.azurecontainerapps.io/ SUCCESS: Your Azure app has been deployed! You can view the resources created under the resource group resource-group-name in Azure Portal: https://portal.azure.com/#@/resource/subscriptions/your-subscription-ID/resourceGroups/your-resource-group/overview
- Crea e configura tutte le risorse di Azure necessarie tramite i file Bicep forniti nella directory
Confermare la corretta distribuzione
Nel portale di Azure verificare che l'app contenitore batch registri ogni inserimento in Azure PostgreSQL ogni 10 secondi.
Copiare il nome dell'app contenitore dall'output del terminale.
Accedere al portale di Azure e cercare la risorsa dell'app contenitore in base al nome.
Nel dashboard dell'app contenitore selezionare Monitoraggio>Flusso di log.
Verificare che il contenitore registri lo stesso output del terminale in precedenza.
Che cosa è successo?
Al termine del comando azd up
:
- Azure Developer CLI ha effettuato il provisioning delle risorse di Azure a cui si fa riferimento nella directory
./infra
del progetto di esempio alla sottoscrizione di Azure specificata. È ora possibile visualizzare le risorse di Azure tramite il portale di Azure. - L'app distribuita in App contenitore di Azure. Dal portale è possibile esplorare l'app completamente funzionale.
Eseguire l'applicazione .NET in locale
Preparare il progetto
Clonare l'applicazione di esempio nel computer locale.
git clone https://github.com/Azure-Samples/bindings-dapr-csharp-cron-postgres.git
Passare alla directory radice dell'esempio.
cd bindings-dapr-csharp-cron-postgres
Eseguire l'applicazione usando l'interfaccia della riga di comando di Dapr
Prima di distribuire l'applicazione in App contenitore di Azure, iniziare eseguendo il contenitore PostgreSQL e il servizio .NET in locale con Docker Compose e Dapr.
Dalla directory radice dell'esempio modificare le directory in
db
.cd db
Eseguire il contenitore PostgreSQL con Docker Compose.
docker compose up -d
Aprire una nuova finestra del terminale e passare a
/batch
nella directory di esempio.cd bindings-dapr-csharp-cron-postgres/batch
Installa le dipendenze.
dotnet build
Eseguire l'applicazione di servizio .NET.
dapr run --app-id batch-sdk --app-port 7002 --resources-path ../components -- dotnet run
Il comando
dapr run
esegue l'applicazione di associazione in locale. Una volta eseguita correttamente l'applicazione, nella finestra del terminale vengono visualizzati i dati di associazione di output.Output previsto
Il servizio batch è in ascolto degli eventi di associazione di input da un CRON di sistema e quindi restituisce il contenuto dei dati locali a un'associazione di output PostgreSQL.
== APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch == APP == {"sql": "insert into orders (orderid, customer, price) values (1, 'John Smith', 100.32);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (2, 'Jane Bond', 15.4);"} == APP == {"sql": "insert into orders (orderid, customer, price) values (3, 'Tony James', 35.56);"} == APP == Finished processing batch
Nel terminale
./db
arrestare il contenitore PostgreSQL.docker compose stop
Distribuire il modello di applicazione usando Azure Developer CLI
Ora che l'applicazione è stata eseguita in locale, distribuire l'applicazione binding in App contenitore di Azure usando azd
. Durante la distribuzione, il componente PostgreSQL in contenitori locale verrà scambiato per un componente PostgreSQL di Azure.
Preparare il progetto
Passare alla directory radice dell'esempio.
cd bindings-dapr-csharp-cron-postgres
Effettuare il provisioning e la distribuzione usando Azure Developer CLI
Eseguire
azd init
per inizializzare il progetto.azd init
Quando richiesto nel terminale, specificare i parametri seguenti.
Parametro Descrizione Nome ambiente Prefisso per il gruppo di risorse creato per contenere tutte le risorse di Azure. Località di Azure Posizione di Azure per le risorse. Assicurarsi di selezionare un percorso disponibile per Azure PostgreSQL. Sottoscrizione di Azure Sottoscrizione di Azure per le risorse. Eseguire
azd up
per effettuare il provisioning dell'infrastruttura e distribuire l'applicazione in App contenitore di Azure in un singolo comando.azd up
Questo processo può richiedere del tempo. Al termine del comando
azd up
, l'output dell'interfaccia della riga di comando visualizza due collegamenti al portale di Azure per monitorare lo stato di avanzamento della distribuzione. L'output illustra anche comeazd up
:- Crea e configura tutte le risorse di Azure necessarie tramite i file Bicep forniti nella directory
./infra
usandoazd provision
. Dopo aver effettuato il provisioning da Azure Developer CLI, è possibile accedere a queste risorse tramite il portale di Azure. I file di cui è stato effettuato il provisioning delle risorse di Azure includono:main.parameters.json
main.bicep
- Una directory delle risorse
app
organizzata in base alle funzionalità - Libreria di riferimento
core
che contiene i moduli Bicep usati dal modello diazd
- Distribuisce il codice usando
azd deploy
Output previsto
Initializing a new project (azd init) Provisioning Azure resources (azd provision) Provisioning Azure resources can take some time You can view detailed progress in the Azure Portal: https://portal.azure.com/#blade/HubsExtension/DeploymentDetailsBlade/overview (✓) Done: Resource group: resource-group-name (✓) Done: Log Analytics workspace: log-analytics-name (✓) Done: Application Insights: app-insights-name (✓) Done: Portal dashboard: dashboard-name (✓) Done: Azure Database for PostgreSQL flexible server: postgres-server (✓) Done: Key vault: key-vault-name (✓) Done: Container Apps Environment: container-apps-env-name (✓) Done: Container App: container-app-name Deploying services (azd deploy) (✓) Done: Deploying service api - Endpoint: https://your-container-app-endpoint.region.azurecontainerapps.io/ SUCCESS: Your Azure app has been deployed! You can view the resources created under the resource group resource-group-name in Azure Portal: https://portal.azure.com/#@/resource/subscriptions/your-subscription-ID/resourceGroups/your-resource-group/overview
- Crea e configura tutte le risorse di Azure necessarie tramite i file Bicep forniti nella directory
Confermare la corretta distribuzione
Nel portale di Azure verificare che l'app contenitore batch registri ogni inserimento in Azure PostgreSQL ogni 10 secondi.
Copiare il nome dell'app contenitore dall'output del terminale.
Accedere al portale di Azure e cercare la risorsa dell'app contenitore in base al nome.
Nel dashboard dell'app contenitore selezionare Monitoraggio>Flusso di log.
Verificare che il contenitore registri lo stesso output del terminale in precedenza.
Che cosa è successo?
Al termine del comando azd up
:
- Azure Developer CLI ha effettuato il provisioning delle risorse di Azure a cui si fa riferimento nella directory
./infra
del progetto di esempio alla sottoscrizione di Azure specificata. È ora possibile visualizzare le risorse di Azure tramite il portale di Azure. - L'app distribuita in App contenitore di Azure. Dal portale è possibile esplorare l'app completamente funzionale.
Pulire le risorse
Se non si intende continuare a usare questa applicazione, eliminare le risorse di Azure di cui è stato effettuato il provisioning con il comando seguente.
azd down
Passaggi successivi
- Altre informazioni sulla distribuzione di microservizi tramite Dapr in App contenitore di Azure.
- Abilitare l'autenticazione token per le richieste Dapr.
- Altre informazioni su Azure Developer CLI e su come rendere le applicazioni compatibili con
azd
. - Ridimensionare le applicazioni usando gli scaler KEDA