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-lhe 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:
Pré-requisitos
- Instalar a CLI do Azure
- Instalar o Git
- É necessária uma conta do Azure com uma subscrição ativa. Se ainda não tiver uma, pode criar uma conta gratuitamente.
- Uma conta do GitHub. Se você ainda não tem um, inscreva-se gratuitamente.
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 true
o .
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 <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 de ID do Microsoft Entra 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 emtargetPort: 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 pelonodeapp
estado de armazenamento - o headless
pythonapp
habilitado para Dapr que invoca o serviço usando a invocação denodeapp
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.
No browser, abra o portal do Azure.
Vá para a conta de armazenamento recém-criada no seu grupo de recursos.
Selecione Contêineres no menu do lado esquerdo.
Selecione o contêiner criado.
Verifique se você pode ver o arquivo nomeado
order
no contêiner.Selecione o arquivo.
Selecione a guia Editar .
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.