Partilhar via


Guia de início rápido: implantar um aplicativo Dapr em aplicativos de contêiner do Azure usando a CLI do Azure

O Dapr (Distributed Application Runtime) ajuda os desenvolvedores a criar microsserviços resilientes e confiáveis. Neste guia de início rápido, você aprenderá a habilitar sidecars Dapr para serem executados junto com seus aplicativos de contêiner de microsserviços. Você:

  • Crie um ambiente de Aplicativos de Contêiner e um armazenamento de estado de Armazenamento de Blog do Azure para seus aplicativos de contêiner.
  • Implante um aplicativo de contêiner Python que publique mensagens.
  • Implante um aplicativo de contêiner Node.js que assina mensagens e as persiste em um armazenamento de estado.
  • Verifique a interação entre os dois microsserviços usando o portal do Azure.

Diagrama de arquitetura para microsserviços Dapr Hello World em Aplicativos de Contêiner do Azure

Este guia de início rápido espelha os aplicativos que você implanta no início rápido de código aberto do Dapr Hello World .

Configurar

Para entrar no Azure a partir da CLI, execute o seguinte comando e siga os prompts para concluir o processo de autenticação.

az login

Para garantir que você esteja executando a versão mais recente da CLI, execute o comando upgrade.

az upgrade

Em seguida, instale ou atualize a extensão Aplicativos de Contêiner do Azure para a CLI.

Se você receber erros sobre parâmetros ausentes ao executar az containerapp comandos na CLI do Azure ou cmdlets do Az.App módulo no Azure PowerShell, certifique-se de ter a versão mais recente da extensão Aplicativos de Contêiner do Azure instalada.

az extension add --name containerapp --upgrade

Nota

A partir de maio de 2024, as extensões da CLI do Azure não habilitam mais recursos de visualização por padrão. Para acessar os recursos de visualização do Container Apps, instale a extensão Container Apps com --allow-preview trueo .

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

Agora que a extensão ou módulo atual está instalado, registre os Microsoft.App namespaces e Microsoft.OperationalInsights .

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

Definir variáveis de ambiente

Defina as seguintes variáveis de ambiente. Substitua o <PLACEHOLDERS> pelos seus valores:

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

Criar um grupo de recursos do Azure

Crie um grupo de recursos para organizar os serviços relacionados à implantação do seu aplicativo de contêiner.

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

Criar um ambiente

Um ambiente em Aplicativos de Contêiner do Azure cria um limite seguro em torno de um grupo de aplicativos de contêiner. Os aplicativos de contêiner implantados no mesmo ambiente são implantados na mesma rede virtual e gravam logs no mesmo espaço de trabalho do Log Analytics.

Para criar o ambiente, execute o seguinte comando:

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

Configurar um repositório de estado

Criar uma conta de Armazenamento de Blob do Azure

Com o ambiente implantado, implante uma conta de Armazenamento de Blob do Azure que é usada pelo aplicativo de contêiner Node.js para armazenar dados. Antes de implantar o serviço, escolha um nome para a conta de armazenamento. Os nomes de conta de armazenamento devem ser exclusivos no Azure, de 3 a 24 caracteres de comprimento e devem conter apenas números e letras minúsculas.

STORAGE_ACCOUNT_NAME="<storage account name>"

Use o comando a seguir para criar a conta de Armazenamento do Azure.

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

Configurar uma identidade atribuída pelo usuário para o aplicativo de nó

Enquanto os Aplicativos de Contêiner oferecem suporte à identidade gerenciada atribuída pelo usuário e pelo sistema, uma identidade atribuída pelo usuário fornece ao aplicativo Node.js habilitado para Dpr permissões para acessar a conta de armazenamento de blob.

  1. Crie uma identidade atribuída pelo usuário.

    az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity"     --output json
    
  2. Recupere as principalId propriedades e id armazene em variáveis.

    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 o ID da assinatura atual.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  4. Atribua a Storage Blob Data Contributor função à identidade atribuída pelo usuário.

    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"
    

Configurar o componente de armazenamento de estado

Enquanto você tem várias opções para autenticar em recursos externos via Dapr. Este exemplo usa um armazenamento de estado baseado no Azure, para que você possa fornecer acesso direto do aplicativo Node.js ao repositório de Blob usando a Identidade Gerenciada.

  1. Em um editor de texto, crie um arquivo chamado statestore.yaml com as propriedades originadas das etapas anteriores.

    # 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
    

    Esse arquivo ajuda a habilitar seu aplicativo Dapr para acessar sua loja estadual.

  2. Navegue até o diretório no qual você armazenou o arquivo yaml e execute o seguinte comando para configurar o componente Dapr no ambiente Container Apps.

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

Implantar o aplicativo Node.js

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'

Se você estiver usando um Registro de Contêiner do Azure, inclua o --registry-server <REGISTRY_NAME>.azurecr.io sinalizador no comando.

Por padrão, a imagem é extraída do Docker Hub.

Implantar o aplicativo Python

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

Se você estiver usando um Registro de Contêiner do Azure, inclua o --registry-server <REGISTRY_NAME>.azurecr.io sinalizador no comando.

Verificar os resultados

Confirmar persistência de estado bem-sucedida

Você pode confirmar se os serviços estão funcionando corretamente exibindo dados em sua conta de Armazenamento do Azure.

  1. Abra o portal do Azure em seu navegador e navegue até sua conta de armazenamento.

  2. Selecione Contêineres de armazenamento de>dados no menu do lado esquerdo.

  3. Selecione o aplicativo de contêiner.

  4. Verifique se você pode ver o arquivo nomeado order no contêiner.

  5. Selecione o arquivo.

  6. Selecione a guia Editar .

  7. Selecione o botão Atualizar para observar como os dados são atualizados automaticamente.

Ver registos

Os logs de aplicativos de contêiner são armazenados na ContainerAppConsoleLogs_CL tabela personalizada no espaço de trabalho do Log Analytics. Você pode exibir logs por meio do portal do Azure ou da CLI. Pode haver um pequeno atraso inicialmente para que a tabela apareça no espaço de trabalho.

Exiba logs usando a linha de comando usando o seguinte comando da 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

A saída a seguir demonstra o tipo de resposta a esperar do comando CLI.

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

Clean up resources (Limpar recursos)

Como pythonapp continuamente faz chamadas com nodeapp mensagens que persistem em seu armazenamento de estado configurado, é importante concluir essas etapas de limpeza para evitar operações faturáveis contínuas.

Se quiser excluir os recursos criados como parte desta explicação passo a passo, execute o seguinte comando.

Atenção

Este comando exclui o grupo de recursos especificado e todos os recursos contidos nele. Se existirem recursos fora do escopo deste tutorial no grupo de recursos especificado, eles também serão excluídos.

az group delete --resource-group $RESOURCE_GROUP

Gorjeta

Tem problemas? Informe-nos no GitHub abrindo um problema no repositório de Aplicativos de Contêiner do Azure.

Próximos passos