Compartilhar via


Início Rápido: implantar um aplicativo Dapr nos Aplicativos de Contêiner do Azure usando a CLI do Azure

O Dapr (Distributed Application Runtime) ajuda os desenvolvedores a criar microsserviços confiáveis e resilientes. Neste início rápido, você aprenderá como habilitar os sidecars do Dapr a serem executados ao lado dos seus aplicativos de contêineres de microsserviços. Você vai:

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

Diagrama de arquitetura para microsserviços Dapr

Este início rápido replica os aplicativos que você implanta no início rápido Olá, Mundo do Dapr de código aberto.

Instalação

Para entrar no Azure usando a CLIl, execute o comando a seguir 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 dos Aplicativos de Contêiner do Azure para a CLI.

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

az extension add --name containerapp --upgrade

Observação

A partir de maio de 2024, as extensões da CLI do Azure já não permitem funcionalidades de versão prévia do recurso por padrão. Para acessar as versões prévias dos recursos dos Aplicativos de Contêiner, instale a extensão Aplicativos de Contêiner com --allow-preview true.

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

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

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

Definir variáveis de ambiente

Defina as variáveis de ambiente a seguir. 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 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 um grupo de aplicativos de contêiner. Os Aplicativos de Contêiner implantados no mesmo ambiente são implantados na mesma rede virtual e registram 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 armazenamento de estado

Criar uma conta de Armazenamento de Blobs do Azure

Com o ambiente implantado, implante uma conta do Armazenamento de Blobs do Azure 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 precisam ser exclusivos no Azure, ter de 3 a 24 caracteres de comprimento e incluir 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 Microsoft 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ó

Embora os Aplicativos de Contêiner ofereçam suporte à identidade gerenciada atribuída pelo usuário e atribuída pelo sistema, uma identidade atribuída pelo usuário fornece ao aplicativo Node.js com Dapr habilitado permissões para acessar a conta de armazenamento de blobs.

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

    az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity"     --output json
    
  2. Recupere as propriedades principalId e id e as 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 a ID da assinatura para sua assinatura atual.

    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    
  4. Atribua a função Storage Blob Data Contributor à 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

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

  1. Em um editor de texto, crie um arquivo de configuração 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 permite que o seu aplicativo Dapr acesse o armazenamento de estado.

  2. Navegue até o diretório no qual você armazenou o arquivo yaml e execute o comando a seguir para configurar o componente Dapr no ambiente dos Aplicativos de Contêiner.

    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 sinalizador --registry-server <REGISTRY_NAME>.azurecr.io no comando.

Por padrão, a imagem é retirada 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 sinalizador --registry-server <REGISTRY_NAME>.azurecr.io no comando.

Verifique os resultados

Confirmar a permanência de estado bem-sucedida

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

  1. No portal do Azure no navegador, acesse a sua conta de armazenamento.

  2. Selecione Armazenamento de Dados>Contêineres no menu à esquerda.

  3. Selecione o aplicativo contêiner.

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

  5. Selecione o arquivo .

  6. Selecione a guia Editar.

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

Exibir Logs

Os logs de aplicativos de contêiner são armazenados na tabela personalizada ContainerAppConsoleLogs_CL no workspace do Log Analytics. Você pode exibir logs pelo portal do Azure ou por meio da CLI. Pode haver um pequeno atraso inicial para a tabela aparecer no workspace.

Exiba logs usando a linha de comando com o comando da CLI a seguir.

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 mostra o tipo de resposta a esperar do comando da 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

Limpar os recursos

Como pythonapp faz chamadas continuamente para nodeapp com mensagens que são mantidas em seu armazenamento de estado configurado, é importante concluir essas etapas de limpeza para evitar operações de cobrança contínuas.

Se você quiser excluir os recursos criados como parte deste passo a passo, execute o comando a seguir.

Cuidado

O 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

Dica

Está enfrentando problemas? Deixe-nos saber sobre GitHub abrindo um problema no repositório dos Aplicativos de Contêiner do Azure.

Próximas etapas