Implantando microsserviço usando Devprime no Azure Container Apps
As aplicações baseadas na plataforma DevPrime incorporam nativamente uma abordagem de arquitetura dirigida por eventos (Event-Driven Architecture). Elas recebem eventos externos, processam regras de negócio, emitem eventos internos e, quando necessário, propagam os eventos externamente utilizando o adaptador Stream, que se conecta nativamente com Kafka e outras plataformas.
Agora, montaremos uma demonstração envolvendo um microsserviço chamado “Order”, receberá pedidos. É fundamental subir os containers MongoDB e Kafka para realizar os testes locais.
Cheklist e preperação do ambiente inicial:
- Abra uma conta na plataforma Devprime e adquira uma licença (Developer/Enterprise).
- Instale uma versão atualizada do .NET (Linux, macOS e Windows)
- Instale e/ou atualize o Visual Studio Code e/ou o Visual Studio 2023 Community / Professional / Enterprise.
- Instale e/ou atualize o Docker (Para Windows, utilize o WSL2).
- Inicialize os containers do MongoDB e Kafka no Docker e adicione a fila ‘orderevents’ e “paymentevents” no Kafka.
- Instale e ative a versão mais nova do Devprime CLI.
- Crie uma pasta para os seus projetos e defina as permissões de leitura e gravação.
- Consulte o artigo “Criando o primeiro microsserviço” para explorar os primeiros passos na Devprime.
- Uma conta ativa no Microsoft Azure.
- O Azure CLI instalado e ativo no ambiente local.
- Criar uma conta no Azure CosmosDB e obter as credenciais de conexão.
- Criar uma conta no Azure Event Hubs e obter as credenciais de conexão.
Criando o primeiro microsserviço “Order”
Nós utilizaremos o DevPrime CLI para a criação dos microsserviços. Neste exemplo, informaremos o nome da nova aplicação, o tipo de serviço de Stream como “Kafka” para emissão de eventos assíncronos e o State como “MongoDB” para a persistência dos dados. Para iniciar um novo microsserviço, utilize o comando de exemplo apresentado. Uma nova aplicação será criada em segundos e estará pronta para produção.
dp new order --stream kafka --state mongodb
Adicionando uma regra de negócio de pedidos via Devprime Marketplace
dp marketplace order
Executando acelerador para implementação de código baseado o Domain. Ao executar o comando a primeira vez nessa demonstração digite “A” para que possa avançar e realizar as alterações.
dp init
O acelerador implementa automaticamente as classes de “Domain Events” em Domain, “Event Handlers” em Application, “Domain Services” em Application, “Application Services” em Application, a persistência em State, as APIs em Web e alguns testes unitários em Tests como exemplo.
Criando um repositório no Azure Container Registry (ACR)
Nós utilizaremos o Azure Container Registry (ACR) para repositório de imagens docker privadas. Você pode acessar o portal do Azure e criar um novo repositório privado ou, se preferir, utilizar o Azure CLI e outras estratégias para provisionar os recursos.
Entre no portal e crie um novo Container Registry. No exemplo, nós utilizamos o nome de “devprimeregistry” e avançamos até ativar o serviço.

Após criar o ACR, localize o item “Settings > Access keys” e ative a opção “Admin user” para obter a credencial que será utilizada para se conectar ao serviço do Azure Container Registry (ACR) e realizar a publicação de uma imagem.

Na tabela abaixo, é apresentado um resumo das informações necessárias para conexão ao serviço do Azure Container Registry (ACR). É importante lembrar que você deve obter os dados no seu portal do Azure.
| Chave | Valor |
|---|---|
| Server | devprimeregistry.azurecr.io |
| Registry | devprimeregistry |
| Username | devprimeregistry |
| Password | 2t44H70qmRDGdBCo |
Efetuando login no repositório no Azure Container Registry (ACR)
Agora chegou o momento de utilizar o Azure CLI ou “az” para efetuar login no Azure Container Registry criado no passo anterior e permitir realizar o envio de imagens docker do seu ambiente local para o ACR. Antes de avançar, certifique-se de que você tem o Azure CLI ativado (az login) no seu ambiente.
Execute no prompt de comando:
|
|
Analisando a porta padrão no Dockerfile e na configuração do App
Os microsserviços desenvolvidos utilizando a plataforma Devprime são implementados automaticamente com um arquivo Dockerfile na pasta do projeto que deve ser configurado caso deseje modificar a porta interna para receber requests. Caso deseje modificar para 8080 ou outro valor, você deverá alterar no Dockerfile e também na configuração da aplicação.
Analisando a porta padrão no arquivo Dockerfile
Abra pelo Visual Studio Code:
|
|
|
|
Analisando a porta padrão no arquivo AppSettings
Abra pelo Visual Studio Code:
|
|
|
|
IMPORTANTE:
- O valor da porta exposta no Dockerfile tem que ser igual ao valor da porta configurada na chave
DevPrime_Webenviada como environment para o Azure Container App. - Caso modifique o Dockerfile é necessário publicar uma nova imagem no ACR.
Executando o Docker Build e criando uma tag
Entre na pasta do projeto e execute:
|
|
Liste a tag local no Docker:
|
|
Executando o push para o repositório do Azure Container Registry (ACR)
Entre na pasta do projeto e execute:
|
|
Ao final desse procedimento, o objetivo é conseguir visualizar no portal do Azure Container Registry a nossa imagem docker publicada no repositório privado docker do ACR e disponível para utilização no Azure Container Apps ou qualquer outro serviço do Azure, como o AKS.

Exportando as variaveis de ambiente para o Azure Container Apps
O Azure Container Apps adota um padrão paercido do Kubernetes permitindo receber as configurações da aplicação por meio de vaviaveis de ambientes o que permite a utilização de cofres como Azure Vault para proteger as credenciais e passar para o container no momento
da utilização.
A Devprime ofece no Devprime CLI o comando export que permitir gerar um arquivo yaml com as variaveis que devem ser aplicadas no ambiente da aplicação em produção. Utilize como referencia.
|
|

Abra pelo Visual Studio Code:
|
|
Na imagem abaixo, é possível conferir o ponto das variáveis de ambiente que copiaremos os itens de chave e valor que estiverem preenchidos para aplicar nas configurações de ambiente no Azure Container Apps.

- Nós utilizaremos as chaves
devprime_app,devprime_web,devprime_observability,devprime_stream1,devprime_state1,devprime_customedevprime_services. A chavedevprime_securitynão está sendo utilizada nesse projeto. - É importante lembrar que chaves não preenchidas não precisam ser utilizadas.
- A chaves
devprime_stateedevprime_streamdevem conter as credenciais e referências ao ambiente de produção e você pode utilizar valores salvos no Azure Key Vault.
Criando um novo Azure Container App
Utilizaremos o portal do Azure para criar o Azure Container App. Caso prefira, você pode utilizar o Azure CLI, Bicep, Terraform ou outras ferramentas para replicar o mesmo procedimento em sua estratégia de DevOps.
Definimos o nome do serviço como “devprime-container-app” e escolhemos a opção de publicação por meio de uma imagem “Container Image”. Como é a primeira vez que estamos criando o serviço, será necessário criar em conjunto um “Container Apps Environment”.

Após avançar na tela anterior, localize a aba “Container”. Você terá acesso a algumas configurações importantes, como a definição da “Image Source”, onde encontramos o nosso Azure Container Registry com o nome “devprimeregistry” e a imagem do microsserviço enviada anteriormente.

Nessa aba, encontramos informações iniciais importantes, como o tipo de CPU/Memory e, principalmente, as variáveis de ambiente exportadas anteriormente, que devem ser inseridas usando o modelo de chave/valor.

Neste momento, aplicamos as configurações nas chaves devprime_app, devprime_web, devprime_observability, devprime_stream1, devprime_state1, devprime_custom e devprime_services. A devprime_security não está sendo utilizada nesse projeto.

Habilitando o Ingress no Azure Container App
Ao seguir os passos anteriores, sua aplicação estará rodando e pronta para receber requests externos. Para isso, vamos habilitar o recurso de “Ingress”, disponível no portal do Azure Container App em Settings > Ingress. Habilite a funcionalidade e escolha a opção “Accepting traffic from anywhere”, com a “Target port” definida como “80”, para que o Ingress se conecte internamente com o seu Container. Essa configuração de porta é a mesma exposta no Dockerfile e na variável de ambiente “DevPrime_Web”.

Após ativar o Ingress, será gerado um link público com acesso direto ao seu microsserviço disponível por meio do Azure Container App.

Ajustando a escalabilidade dos Containers e variáveis de ambiente
Após executar o procedimento padrão pelo portal, caso deseje ajustar a escalabilidade das réplicas disponíveis, é possível defini-la como “zero” e rodar totalmente como serverless. Outro ponto importante é atualizar outros parâmetros, como as próprias variáveis de ambiente. Para modificá-las, acesse o menu “Application > Containers”.

Parabéns! 🚀 Você acabou de implantar um microsserviço desenvolvido com os aceleradores da plataforma Devprime no Azure Container Apps.
Sugestão para próximos passos
- Automatize esse processo utilizando Azure DevOps, Github…
- Adicione uma configuração de segurança na exposição das API’s
- Adicione um serviço do Azure API Management
- Adicione um Azuer Key Vault
Para saber mais:
Última modificação June 11, 2024 (06327e5d)