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.
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 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 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.
Crie uma identidade atribuída pelo usuário.
az identity create --resource-group $RESOURCE_GROUP --name "nodeAppIdentity" --output json
Recupere as
principalId
propriedades eid
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 \")
Recupere o ID da assinatura atual.
SUBSCRIPTION_ID=$(az account show --query id --output tsv)
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.
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.
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.
Abra o portal do Azure em seu navegador e navegue até sua conta de armazenamento.
Selecione Contêineres de armazenamento de>dados no menu do lado esquerdo.
Selecione o aplicativo de contêiner.
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 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.