Share via


Tutorial: Implementación de una aplicación Dapr en Azure Container Apps con una plantilla de Azure Resource Manager o Bicep

Dapr (Distributed Application Runtime) es un entorno de ejecución que ayuda a crear microservicios resistentes, sin estado y con estado. En este tutorial, se implementa una solución Dapr de muestra en Azure Container Apps mediante una plantilla de Azure Resource Manager (ARM) o Bicep.

Aprenderá a:

  • Crear una instancia de Azure Blob Storage para su uso como almacén de estado de Dapr
  • Implementar un entorno de Container Apps para hospedar aplicaciones de contenedor
  • Implementar dos aplicaciones de contenedor habilitadas para Dapr: una que genera pedidos y otra que consume pedidos y los almacena
  • Asignar una identidad asignada por el usuario a una aplicación contenedora y proporcionarla con la asignación de roles adecuada para autenticarse en el almacén de estado de Dapr
  • Comprobar la interacción entre los dos microservicios.

Con Azure Container Apps se obtiene una versión totalmente administrada de las API de Dapr al compilar microservicios. Al usar Dapr en Azure Container Apps, puede habilitar sidecars para que se ejecuten junto a los microservicios que proporcionan un amplio conjunto de funcionalidades.

En este tutorial, implementará las mismas soluciones del inicio rápido Hola mundo de Dapr.

La aplicación consta de:

  • Una aplicación contenedora de cliente (Python) para generar mensajes.
  • Una aplicación contenedora de servicio (Node) para consumir y conservar esos mensajes en un almacén de estado

En el siguiente diagrama de arquitectura se muestran los componentes que conforman este tutorial:

Diagrama de arquitectura de Dapr Hola mundo microservicios en Azure Container Apps

Requisitos previos

  • Se requiere una cuenta de Azure con una suscripción activa. Si no la tiene, puede crear una cuenta gratis.
  • Una cuenta de GitHub. Si no tiene ninguna aún, regístrese gratis.

Configurar

Para iniciar sesión en Azure desde la CLI, ejecute el siguiente comando y siga las indicaciones para completar el proceso de autenticación.

az login

Para asegurar que ejecuta la versión más reciente de la CLI, ejecute el comando de actualización.

az upgrade

Luego, instale o actualice la extensión de Azure Container Apps para la CLI.

az extension add --name containerapp --upgrade

Ahora que la extensión o módulo actualizado está instalado, registre los espacios de nombre Microsoft.App y Microsoft.OperationalInsights.

Nota:

Los recursos de Azure Container Apps han migrado desde el espacio de nombres Microsoft.Web al espacio de nombres Microsoft.App. Consulte Migración del espacio de nombres de Microsoft.Web a Microsoft.App marzo de 2022 para obtener más detalles.

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

Establecimiento de variables de entorno

Establezca las siguientes variables de entorno. Reemplace los <MARCADORES DE POSICIÓN> por sus valores:

RESOURCE_GROUP="<RESOURCE_GROUP>"
LOCATION="<LOCATION>"
CONTAINERAPPS_ENVIRONMENT="<CONTAINERAPPS_ENVIRONMENT>"

Creación de un grupo de recursos de Azure

Cree un grupo de recursos para organizar los servicios relacionados con la implementación de la aplicación contenedora.

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

Preparación del repositorio de GitHub

Vaya al repositorio que contiene las plantillas de ARM y Bicep que se usan para implementar la solución.

Seleccione el botón Bifurcar situado en la parte superior del repositorio para bifurcar el repositorio en su cuenta.

Ahora puede clonar la bifurcación para trabajar con ella localmente.

Use el siguiente comando de Git para clonar el repositorio bifurcado en el directorio acadapr-templates.

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

Implementar

La plantilla implementa:

  • un entorno de Container Apps
  • un área de trabajo de Log Analytics asociada para el entorno de Container Apps
  • un recurso de Application Insights para el seguimiento distribuido
  • un cuenta de blobs de almacenamiento y un contenedor de almacenamiento predeterminado
  • un componente Dapr para la cuenta de almacenamiento de blobs
  • el nodo, la aplicación contenedora habilitada para Dapr con una identidad administrada asignada por el usuario: hello-k8s-node
  • el python, la aplicación contenedora habilitada para Dapr para Python: hello-k8s-python
  • una asignación de roles de Active Directory para la aplicación de nodo usada por el componente Dapr para establecer una conexión a Blob Storage

Vaya al directorio acadapr-templates y ejecute el siguiente comando:

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

Puede que se muestre una advertencia (BCP081). Esta advertencia no tiene ningún efecto en la implementación correcta de la aplicación.

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

Este comando implementa:

  • el entorno de Container Apps y el área de trabajo de Log Analytics asociada para hospedar la solución Hola mundo de dapr
  • una instancia de Application Insights para el seguimiento distribuido de Dapr
  • el servidor de aplicaciones nodeapp que se ejecuta con targetPort: 3000 con Dapr habilitado y configurado mediante: "appId": "nodeapp" y "appPort": 3000, y una identidad asignada por el usuario con acceso a Azure Blob Storage a través de una asignación de roles colaborador de datos de almacenamiento
  • Un componente de Dapr de "type": "state.azure.blobstorage" con ámbito para su uso por parte de nodeapp para almacenar el estado
  • el dapr habilitado, sin encabezado pythonapp que invoca el servicio mediante la invocación nodeapp del servicio Dapr

Comprobar el resultado

Confirmación de la persistencia de estado correcta

Puede confirmar que los servicios funcionan correctamente mediante la visualización de datos en la cuenta de Azure Storage.

  1. En el explorador, abra Azure Portal.

  2. Vaya a la cuenta de almacenamiento recién creada en el grupo de recursos.

  3. Seleccione Containers (Contenedores) en el menú de la izquierda.

  4. Seleccione el contenedor creado.

  5. Compruebe que puede ver el archivo denominado order en el contenedor.

  6. Seleccione el archivo .

  7. Seleccione la pestaña Editar.

  8. Seleccione el botón Actualizar para ver las actualizaciones.

Ver registros

Los datos registrados mediante una aplicación de contenedor se almacenan en la tabla personalizada ContainerAppConsoleLogs_CL del área de trabajo de Log Analytics. Puede ver los registros en Azure Portal o desde la línea de comandos. Espere unos minutos para que el análisis llegue por primera vez antes de consultar los datos registrados.

Use el comando siguiente para ver los registros en 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

En la salida siguiente se muestra el tipo de respuesta que se espera del 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

Limpieza de recursos

Cuando haya terminado, ejecute el comando siguiente para eliminar el grupo de recursos junto con todos los recursos que ha creado en este tutorial.

az group delete \
  --resource-group $RESOURCE_GROUP

Nota:

Puesto que pythonapp realiza llamadas continuas a nodeapp con mensajes que se conservan en el almacén de estado configurado, es importante completar estos pasos de limpieza para evitar las operaciones facturables en curso.


Sugerencia

¿Tiene problemas? Háganoslo saber en GitHub abriendo una incidencia en el repositorio de Azure Container Apps.

Pasos siguientes