Compartilhar via


Tutorial: Implantar um aplicativo do Dapr nos Aplicativos de Contêiner do Azure usando um modelo do Azure Resource Manager ou Bicep

Dapr (Distributed Application Runtime) é um runtime que ajuda a criar microsserviços resilientes, sem estado e com estado. Neste tutorial, uma solução Dapr de exemplo é implantada nos Aplicativos de Contêiner do Azure por meio de um modelo do ARM (Azure Resource Manager) ou do Bicep.

Você aprenderá como:

  • Criar um Armazenamento de Blobs do Azure para uso como um armazenamento de estado Dapr
  • Implantar um ambiente de Aplicativos de Contêiner para hospedar aplicativos de contêiner
  • Implantar dois aplicativos de contêiner habilitados para dapr: um que produz pedidos e um que consome pedidos e os armazena
  • Atribua uma identidade atribuída pelo usuário a um aplicativo de contêiner e forneça a atribuição de função apropriada para autenticar no armazenamento de estado Dapr
  • Verificar a interação entre os dois microsserviços

Com os Aplicativos de Contêiner do Azure, você obtém uma versão totalmente gerenciada das APIs Dapr ao criar microsserviços. Ao usar a Dapr nos Aplicativos de Contêiner do Azure, você pode habilitar sidecars para executar ao lado de microsserviços que fornecem um conjunto avançado de funcionalidades.

Neste tutorial, você implantará a solução do guia de início rápido do Dapr Olá, Mundo.

Esse aplicativo consiste em:

  • Um aplicativo de contêiner de cliente (Python) para gerar mensagens.
  • Um aplicativo de contêiner de serviço (Node) para consumir e manter essas mensagens em um repositório de estado

O diagrama de arquitetura a seguir ilustra os componentes deste tutorial:

Diagrama de arquitetura para microsserviços Dapr

Pré-requisitos

  • É necessária uma conta do Azure com uma assinatura ativa. Se ainda não tem uma, crie uma conta gratuita.
  • Uma conta do GitHub. Caso ainda não tenha uma, inscreva-se gratuitamente.

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 os <espaços reservados> 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"

Preparar o repositório GitHub

Vá para o repositório que contém os modelos do ARM e Bicep usados para implantar a solução.

Selecione o botão Criar fork na parte superior do repositório para criar um fork do repositório em sua conta.

Agora você pode clonar seu fork para trabalhar com ele localmente.

Use o seguinte comando git para clonar seu repositório com fork no diretório acadapr-templates.

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

Implantar

O modelo implanta:

  • um ambiente de Aplicativos de Contêiner
  • um workspace do Log Analytics associado ao ambiente de Aplicativos de Contêiner
  • um recurso do Application Insights para rastreamento distribuído
  • uma conta de armazenamento de blobs e um contêiner de armazenamento padrão
  • um componente Dapr para a conta de armazenamento de blobs
  • o aplicativo de contêiner de nó habilitado para Dapr com uma identidade gerenciada atribuída pelo usuário: hello-k8s-node
  • o aplicativo de contêiner Python habilitado para Dapr: hello-k8s-python
  • uma atribuição de função do Microsoft Entra ID para o aplicativo de nó usado pelo componente Dapr para estabelecer uma conexão com o armazenamento de blobs

Navegue até o diretório acadapr-templates e execute o seguinte comando:

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

Um aviso (BCP081) pode ser exibido. Esse aviso não tem nenhum efeito sobre a implantação bem-sucedida do aplicativo.

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

Este comando implanta:

  • o ambiente de Aplicativos de Contêiner e o workspace do Log Analytics associado para hospedar a solução Dapr "Olá, Mundo"
  • uma instância de Application Insights para rastreamento distribuído do Dapr
  • o servidor de aplicativos nodeapp em execução no targetPort: 3000 com o Dapr habilitado e configurado usando: "appId": "nodeapp" e "appPort": 3000, e uma identidade atribuída pelo usuário com acesso ao Armazenamento de Blobs do Azure por meio de uma atribuição de função de Colaborador de dados de armazenamento
  • Um componente Dapr do escopo "type": "state.azure.blobstorage" para uso pelo nodeapp para o estado de armazenamento
  • o pythonapp sem periféricos habilitado para Dapr, que invoca o serviço nodeapp usando a invocação de serviço Dapr

Verifique o resultado

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. Abra o portal do Azure no navegador.

  2. Vá para a conta de armazenamento recém-criada em seu grupo de recursos.

  3. Selecione Contêineres no menu à esquerda.

  4. Selecione o contêiner criado.

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

  6. Selecione o arquivo .

  7. Selecione a guia Editar.

  8. Selecione o botão Atualizar para procurar atualizações.

Exibir Logs

Os dados registrados por meio de um aplicativo de contêiner são armazenados na tabela personalizada ContainerAppConsoleLogs_CL no workspace do Log Analytics. Você pode exibir logs por meio do portal do Azure ou da linha de comando. Antes de consultar os dados registrados, aguarde alguns minutos até que a análise chegue pela primeira vez.

Use o comando a seguir para exibir logs no Bash ou no 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

A saída a seguir mostra o tipo de resposta a esperar do 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

Limpar os recursos

Quando terminar, execute o comando a seguir para excluir o grupo de recursos junto com todos os recursos criados neste tutorial.

az group delete \
  --resource-group $RESOURCE_GROUP

Observação

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.


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