Share via


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

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

Sabe como:

  • Criar um Armazenamento de Blob do Azure para uso como um armazenamento de estado Dapr
  • Implantar um ambiente de aplicativos de contêiner para hospedar aplicativos de contêiner
  • Implante dois aplicativos de contêiner habilitados para dapr: um que produz pedidos e outro que consome pedidos e os armazena
  • Atribua uma identidade atribuída pelo usuário a um aplicativo de contêiner e forneça-a com a atribuição de função apropriada para autenticar no armazenamento de estado do Dapr
  • Verifique 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 do Dapr ao criar microsserviços. Ao usar o Dapr nos Aplicativos de Contêiner do Azure, você pode habilitar sidecars para serem executados ao lado de seus microsserviços que fornecem um rico conjunto de recursos.

Neste tutorial, você implanta a solução a partir do início rápido do Dapr Hello World .

O pedido consiste em:

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

O diagrama de arquitetura a seguir ilustra os componentes que compõem este tutorial:

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

Pré-requisitos

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.

az extension add --name containerapp --upgrade

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

Nota

Os recursos dos Aplicativos de Contêiner do Azure migraram do Microsoft.Web namespace para o Microsoft.App namespace. Consulte Migração de namespace de Microsoft.Web para Microsoft.App em março de 2022 para obter mais detalhes.

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 <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"

Preparar o repositório GitHub

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

Selecione o botão Fork na parte superior do repositório para bifurcar o repositório para sua conta.

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

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

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

Implementar

O modelo implanta:

  • um ambiente de aplicativos de contêiner
  • um espaço de trabalho do Log Analytics associado ao ambiente Container Apps
  • um recurso do Application Insights para rastreamento distribuído
  • Uma conta de armazenamento de blob e um contêiner de armazenamento padrão
  • um componente Dapr para a conta de armazenamento de blob
  • o nó, aplicativo de contêiner habilitado para Dapr com uma identidade gerenciada atribuída pelo usuário: hello-k8s-node
  • o aplicativo de contêiner habilitado para python, Dapr: hello-k8s-python
  • uma atribuição de função do Ative Directory para o aplicativo de nó usado pelo componente Dapr para estabelecer uma conexão com o armazenamento de blob

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 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 Container Apps e o espaço de trabalho associado do Log Analytics para hospedar a solução hello world Dapr
  • uma instância do Application Insights para rastreamento distribuído do Dapr
  • o nodeapp servidor de aplicativos em targetPort: 3000 execução 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 Blob do Azure por meio de uma atribuição de função de Colaborador de Dados de Armazenamento
  • Um componente Dapr do "type": "state.azure.blobstorage" escopo para uso pelo nodeapp estado de armazenamento
  • o headless pythonapp habilitado para Dapr que invoca o serviço usando a invocação de nodeapp serviço Dapr

Verificar o resultado

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. No browser, abra o portal do Azure.

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

  3. Selecione Contêineres no menu do lado esquerdo.

  4. Selecione o contêiner criado.

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

  6. Selecione o arquivo.

  7. Selecione a guia Editar .

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

Ver registos

Os dados registrados por meio de um aplicativo 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 linha de comando. Aguarde alguns minutos até que a análise chegue pela primeira vez antes de consultar os dados registrados.

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 demonstra 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

Clean up resources (Limpar recursos)

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

az group delete \
  --resource-group $RESOURCE_GROUP

Nota

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.


Gorjeta

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

Próximos passos