Azure Container Apps
A implementação desse ambiente envolvendo dois microsserviços Devprime e do Azure Container Apps utilizará adicionalmente os serviços Azure Container Registry (ACR), Azure Log Analytics, Azure Container Apps Environment, Azure CosmosDB, Azure EventHub.
A imagem abaixo demonstra como ficará o ambiente final após iniciamos todos os procedimentos de criação do ambiente e publicação do microsserviços.
Itens necessários em seu ambiente
- Instale o .NET SDK 8 ou superior
- Visual Studio Code
- Uma conta ativa no Microsoft Azure
- Uma conta ativa na plataforma Devprime e licença de uso Devloper ou Enterprise.
- Devprime CLI instalado e ativo (
dp auth
) - Azure CLI instalado e ativo (
az login
) - Docker local ativo
- Microsoft Powershell instalado
- Microsoft Bicep instalado (
az bicep install
) - GIT
Neste artigo nós utilizaremos dois microsserviços construidos pelo Devprime e implementados conforme apresentado no artigo Asynchronous microsserviços Communication. Você pode executar previamente o exemplo citado ou ir direto no código disponibilizado pelo github.
Esse projeto utiliza scripts baseados no powershell e no bicep para criar o ambiente do Azure Container Apps no Azure. Você pode adaptar os scripts conforme a sua necessidade.
Primeiros passos
a) Execute um clone do projeto no github
git clone https://github.com/devprime/azure-container-apps-bicep
b) Verifique a pasta inicial com os itens Order e Payment. Cada pasta dessa tem um microsserviço desenvolvimento com a plataforma Devprime.
c)Entre na pasta ‘order’ e adicione a sua licença Devprime. Após executar o comando ele vai alterar
o arquivo ‘order\src\App\appsettings.json’
dp license
d)Entre na pasta ‘payment’ e adicione a sua licença Devprime. Após executar ele vai alterar
o arquivo ‘payment\src\App\appsettings.json’
dp license
Credenciais locais do banco de dados e stream
Para executar o microsserviço locamente adicionando as credenciais de um banco de dados mongodb e um cluster kafka no projeto order e no projeto payment editando o arquivo ‘appsettings.json’ conforme exemplo abaixo. No momento do deployment nós utilizaremos as credenciais do ambiente Azure.
Opcionalmente localize as chaves ‘State’ e ‘Stream’ e altere os valores com credenciais de serviços mongodb e/ou kafka nas pastas ‘order’ e ‘payment’
code order\src\App\appsettings.json
code payment\src\App\appsettings.json
Executando o microsserviço localmente
Entre na pasta order ou payment e execute
.\run.ps1 ou ./run.sh (Linux, macOS)
Exportando configurações dos microsserviços
Entre na pasta ‘order’ e execute o comando export do Devprime CLI para criação de um arquivo de deployment. Repita o mesmo procedimento na pasta e ‘payment’. Nós cópiaremos alguns parâmetros.
dp export kubernetes
Agora retorne a pasta raiz e abra os arquivos para observar os parâmetros que serão enviados
durante do deployment do Azure Container Apps. Visualize a chave ‘env:’ nos arquivos abaixo.
code order\.Devprime\kubernetes\deployment.yml
code payment\.Devprime\kubernetes\deployment.yml
[Environment variables]
Ao executar os microsserviços Order e Payment na instância do Azure Container Apps é necessário configurar as variáveis de ambiente. Esse procedimento é muito parecido com o utilizado no Docker e Kubernetes e você poderá ter uma visualização na imagem abaixo.
Definindo as variáveis de ambiente
a) Edite o arquivo 1-docker-build-push.ps1, 2-deploy-azure.ps1 e 3-cleanup.ps1 setando um novo valor na variável $app. Não utilize caracteres especiais.
b) Edite o arquivo deploy\main.bicep para alterar as configurações das variáveis de ambiente.
code deploy\main.bicep
c) Copie o conteúdo da chave ‘Devprime_app’ no arquivo ‘order.Devprime\kubernetes\deployment.yml’ em Order e altere no arquivo deploy\main.bicep na chave do microsserviço Order. Observe que no main.bicep nós criaremos duas instâncias do Azure Container Apps e você deve repetir os pasos no Payment.
// Container Apps: Order
// Container Apps: Payment
Nesse exemplo não alteraremos outras configurações. Caso necessite definir mais parâmetros para a sua aplicação repita o procedimento as outras chaves.
Executando a criação do ambiente no Azure Container Apps
Nós executaremos os scripts para que possa acompanhar passo a passo. Ao final se tudo correr bem você já terá nos logs a url do Azure Container Apps e consultará os serviços no portal do Azure.
a) Inicieremos com a criação dos serviços Azure Resource Group, Azure Container Registry (ACR), Docker Build e Push das imagens dos microsserviços para o repostório privado no ACR.
.\1-docker-build-push.ps1
b) Agora utillizaremos o bicep para criar Azure Container Apps, Azure Container App Environment, Azure CosmosDB, Log Analytics, Event Hubs.
.\2-deploy-azure.ps1
Acessando os microsservices no Azure Container Apps
Em nosso exemplo ao criar os serviços no Container Apps nós estamos utilizando a opção de receber requests (ingress) por meio de um endpoint público.
As urls abaixo são exemplos dos acessos disponibilizados. Obtenha os seus.
-
https://appDevprimeorder.calmbush-62be1470.canadacentral.azurecontainerapps.io
-
https://appDevprimepayment.calmbush-62be1470.canadacentral.azurecontainerapps.io
Ao fazer um post na API do Order ele vai processar a regra de negócio, persistência no mongodb (Azure CosmosDB) e depois emitirá um evento pelo Kafka (Azure EventHub).
O segundo microsserviços regiará ao evento e efetuará o seu ciclo natural de processamento conforme a regra de negócio implementada.
Excluindo todo o ambiente criado
Para excluir todos os serviços criados no Azure execute o script abaixo. Antes de confirmar certifique-se sobre o nome do Resource Group criado nessa demonstração
.\3-cleanup.ps1
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
Para saber mais:
Azure Container Apps documentation
How to deploy Azure Container Apps with Bicep
Deploy to Azure Container App from using a CI/CD Azure DevOps
How to Build and Deliver Apps Fast and Scalable with Azure Container Apps
Última modificação April 15, 2024 (498acca9)