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:
Requisitos previos
- Instalación de la CLI de Azure
- Instalar Git
- 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 contargetPort: 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 denodeapp
para almacenar el estado - el dapr habilitado, sin encabezado
pythonapp
que invoca el servicio mediante la invocaciónnodeapp
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.
En el explorador, abra Azure Portal.
Vaya a la cuenta de almacenamiento recién creada en el grupo de recursos.
Seleccione Containers (Contenedores) en el menú de la izquierda.
Seleccione el contenedor creado.
Compruebe que puede ver el archivo denominado
order
en el contenedor.Seleccione el archivo .
Seleccione la pestaña Editar.
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.