Leer en inglés

Compartir a través de


Inicio rápido: Implementación de una aplicación Dapr en Azure Container Apps mediante la CLI de Azure

Dapr (Distributed Application Runtime) ayuda a los desarrolladores a crear microservicios resistentes y de confianza. En este inicio rápido, aprenderá a habilitar los sidecars de Dapr para que se ejecuten junto con sus aplicaciones de contenedores de microservicios. Hará lo siguiente:

  • Cree un entorno de Container Apps y un almacén de estado de Azure Blog Storage para las aplicaciones de contenedor.
  • Implemente una aplicación de contenedor de Python que publique mensajes.
  • Implemente una aplicación contenedora de Node.js que se suscriba a los mensajes y las conserve en un almacén de estado.
  • Compruebe la interacción entre los dos microservicios mediante Azure Portal.

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

Este inicio rápido refleja las aplicaciones que implementa en el inicio rápido de código abierto de Dapr Hola mundo.

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.

Azure CLI
az login

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

Azure CLI
az upgrade

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

Si recibe errores sobre los parámetros que faltan al ejecutar los comandos az containerapp en la CLI de Azure o cmdlets del módulo Az.App en PowerShell, asegúrese de que tiene instalada la versión más reciente de la extensión Azure Container Apps.

Azure CLI
az extension add --name containerapp --upgrade

Nota

A partir de mayo de 2024, las extensiones de la CLI de Azure ya no habilitan las características en versión preliminar de forma predeterminada. Para acceder a las características de la versión preliminar de Container Apps, instale la extensión Container Apps con --allow-preview true.

Azure CLI
az extension add --name containerapp --upgrade --allow-preview true

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

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

Establezca variables de entorno.

Establezca las siguientes variables de entorno. Reemplace <PLACEHOLDERS> por valores propios:

Azure CLI
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.

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

Crear un entorno

Un entorno de Azure Container Apps crea un límite seguro alrededor de un grupo de aplicaciones de contenedor. Las aplicaciones de contenedor implementadas en el mismo entorno se implementan en la misma red virtual y escriben registros en la misma área de trabajo de Log Analytics.

Para crear el entorno, ejecute el comando siguiente:

Azure CLI
az containerapp env create \
  --name $CONTAINERAPPS_ENVIRONMENT \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION"

Configuración de un almacén de estado

Creación de una cuenta de Azure Blob Storage

Con el entorno implementado, implemente una cuenta de Azure Blob Storage que usa la aplicación contenedora de Node.js para almacenar datos. Antes de implementar el servicio, elija un nombre para la cuenta de almacenamiento. Los nombres de las cuentas de almacenamiento deben ser únicos en Azure, deben tener entre 3 y 24 caracteres y deben contener solo números y letras en minúscula.

Azure CLI
STORAGE_ACCOUNT_NAME="<storage account name>"

Use el siguiente comando para crear la cuenta de Azure Storage.

Azure CLI
az storage account create \
  --name $STORAGE_ACCOUNT_NAME \
  --resource-group $RESOURCE_GROUP \
  --location "$LOCATION" \
  --sku Standard_RAGRS \
  --kind StorageV2

Configuración de una identidad asignada por el usuario para la aplicación de nodo

Aunque Container Apps admite tanto identidades administradas asignadas por el usuario como por el sistema, una identidad asignada por el usuario proporciona a la aplicación Node.js habilitada para Dapr permisos para acceder a la cuenta de Blob Storage.

  1. Cree una identidad asignada por el usuario.

    Azure CLI
    az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity"     --output json
    
  2. Recupere las propiedades principalId y id y almacénelas en variables.

    Azure CLI
    PRINCIPAL_ID=$(az identity show -n "nodeAppIdentity" --resource-group     $RESOURCE_GROUP --query principalId | tr -d \")
    IDENTITY_ID=$(az identity show -n "nodeAppIdentity" --resource-group     $RESOURCE_GROUP --query id | tr -d \")
    CLIENT_ID=$(az identity show -n "nodeAppIdentity" --resource-group $RESOURCE_GROUP     --query clientId | tr -d \")
    
  3. Recupere el id. de la suscripción actual.

    Azure CLI
    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  4. Asignación del rol Storage Blob Data Contributor a la identidad asignada por el usuario.

    Azure CLI
    az role assignment create --assignee $PRINCIPAL_ID  \
    --role "Storage Blob Data Contributor" \
    --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/    Microsoft.Storage/storageAccounts/$STORAGE_ACCOUNT_NAME"
    

Configuración del componente del almacén de estado

Aunque tiene varias opciones para autenticarse en recursos externos a través de Dapr. Este ejemplo usa un almacén de estado basado en Azure, por lo que puede proporcionar acceso directo desde la aplicación Node.js al almacén de Blob usando Identidad administrada.

  1. En un editor de texto, cree un archivo denominado statestore.yaml con las propiedades de origen de los pasos anteriores.

    YAML
    # statestore.yaml for Azure Blob storage component
    componentType: state.azure.blobstorage
    version: v1
    metadata:
      - name: accountName
        value: "<STORAGE_ACCOUNT_NAME>"
      - name: containerName
        value: mycontainer
      - name: azureClientId
        value: "<MANAGED_IDENTITY_CLIENT_ID>"
    scopes:
      - nodeapp
    

    Este archivo ayuda a permitir que la aplicación Dapr acceda al almacén de estado.

  2. Vaya al directorio en el que almacenó el archivo yaml y ejecute el siguiente comando para configurar el componente Dapr en el entorno de Container Apps.

    Azure CLI
    az containerapp env dapr-component set \
        --name $CONTAINERAPPS_ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --dapr-component-name statestore \
        --yaml statestore.yaml
    

Implementación de la aplicación de Node.js

Azure CLI
az containerapp create \
  --name nodeapp \
  --resource-group $RESOURCE_GROUP \
  --user-assigned $IDENTITY_ID \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --image dapriosamples/hello-k8s-node:latest \
  --min-replicas 1 \
  --max-replicas 1 \
  --enable-dapr \
  --dapr-app-id nodeapp \
  --dapr-app-port 3000 \
  --env-vars 'APP_PORT=3000'

Si usa una instancia de Azure Container Registry, incluya la marca --registry-server <REGISTRY_NAME>.azurecr.io en el comando.

De forma predeterminada, la imagen se extrae de Docker Hub.

Implementación de la aplicación de Python

Azure CLI
az containerapp create \
  --name pythonapp \
  --resource-group $RESOURCE_GROUP \
  --environment $CONTAINERAPPS_ENVIRONMENT \
  --image dapriosamples/hello-k8s-python:latest \
  --min-replicas 1 \
  --max-replicas 1 \
  --enable-dapr \
  --dapr-app-id pythonapp

Si usa una instancia de Azure Container Registry, incluya la marca --registry-server <REGISTRY_NAME>.azurecr.io en el comando.

Verificación de los resultados

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. Abra Azure Portal en el navegador y vaya a la cuenta de almacenamiento.

  2. Seleccione Almacenamiento de datos>Contenedores en el menú izquierdo.

  3. Seleccione la aplicación contenedora.

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

  5. Seleccione el archivo .

  6. Seleccione la pestaña Editar.

  7. Seleccione el botón Actualizar para ver cómo se actualizan automáticamente los datos.

Ver registros

Los registros de una aplicación de contenedor se almacenan en la tabla personalizada ContainerAppConsoleLogs_CL del área de trabajo de Log Analytics. Puede ver los registros mediante Azure Portal o la CLI. Inicialmente, la tabla puede tardar un breve período de tiempo en aparecer en el área de trabajo.

Vea los registros mediante la línea de comandos mediante el siguiente comando de la CLI.

Azure CLI
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 | sort by TimeGenerated | take 5" \
  --out table

En la salida siguiente, se muestra el tipo de respuesta que se espera del comando de la CLI.

Bash
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

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.

Si quiere eliminar los recursos creados como parte de este tutorial, ejecute el siguiente comando.

Precaución

Este comando elimina el grupo de recursos especificado y todos los recursos que contiene. Si existen recursos en el grupo de recursos especificado que están fuera del ámbito de este tutorial, también se eliminarán.

Azure CLI
az group delete --resource-group $RESOURCE_GROUP

Sugerencia

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

Pasos siguientes