Skip to main content

Laboratório Hands-on Guiado: AZ-104 — Microsoft Azure Administrator

Cenário

A TechNova Logística é uma empresa brasileira de rastreamento de frotas que opera uma plataforma de monitoramento em tempo real. A infraestrutura principal já reside no Azure, incluindo uma subscription ativa, uma rede virtual regional e bancos de dados gerenciados. A equipe de desenvolvimento empacota seus microsserviços em imagens de contêiner, mas até agora utilizava registros públicos e implantações manuais em VMs, resultando em ciclos lentos de entrega e ausência de governança sobre as imagens.

O objetivo deste laboratório é estabelecer um pipeline completo de contêineres no Azure: centralizar as imagens em um registro privado, provisionar cargas de trabalho pontuais com Azure Container Instances (ACI), implantar aplicações resilientes com Azure Container Apps e configurar regras de escalabilidade automática que respondam à demanda variável da plataforma de rastreamento.

Pré-requisitos

Antes de iniciar a Fase 1, crie ou confirme a existência dos recursos a seguir. Todos os comandos CLI assumem que você já executou az login e selecionou a subscription correta com az account set --subscription <id>.

  1. Resource Group: crie o grupo de recursos que hospedará todos os recursos do laboratório.
az group create --name rg-technova-lab --location brazilsouth
  1. Log Analytics Workspace: necessário para diagnósticos do Container Apps Environment.
az monitor log-analytics workspace create \
--resource-group rg-technova-lab \
--workspace-name law-technova-lab \
--location brazilsouth
  1. Arquivo de aplicação de exemplo: crie um diretório local com um Dockerfile e uma aplicação simples para testes. O arquivo será usado nas fases seguintes.
mkdir ~/technova-app && cd ~/technova-app

cat > app.js << 'EOF'
const http = require("http");
const os = require("os");
const server = http.createServer((req, res) => {
if (req.url === "/health") {
res.writeHead(200);
res.end("OK");
return;
}
res.writeHead(200, { "Content-Type": "text/plain" });
res.end(`TechNova Tracker v1.0 - Host: ${os.hostname()}\n`);
});
server.listen(process.env.PORT || 3000, () => {
console.log("Server running on port " + (process.env.PORT || 3000));
});
EOF

cat > Dockerfile << 'EOF'
FROM node:20-alpine
WORKDIR /app
COPY app.js .
EXPOSE 3000
CMD ["node", "app.js"]
EOF

Tabela de referência de recursos

RecursoNome no labRegião
Resource Grouprg-technova-labBrazil South
Log Analytics Workspacelaw-technova-labBrazil South
Azure Container RegistryacrtechnovalabBrazil South
Container Instance (teste)aci-tracker-testBrazil South
Container Instance (debug)aci-tracker-debugBrazil South
Container Apps Environmentcae-technova-labBrazil South
Container Appca-tracker-appBrazil South
Diretório da aplicação~/technova-appN/A

Fases do Laboratório

Fase 1 — Registro privado de imagens com Azure Container Registry

Nesta fase você criará e configurará o Azure Container Registry (ACR) da TechNova, construirá imagens diretamente no registro, configurará políticas de retenção e replicação, e validará o controle de acesso. Esta fase cobre o objetivo Create and manage an Azure Container Registry e estabelece a base para todas as fases posteriores.

Tarefa 1.1 — Criar o Azure Container Registry

A TechNova precisa de um registro privado para armazenar as imagens da plataforma de rastreamento. Você criará o ACR no SKU Standard e em seguida avaliará a necessidade de upgrade.

Via Portal

  1. Navegue até o portal do Azure > barra de pesquisa > digite Container registries > clique no serviço.
  2. Clique em + Create.
  3. Na aba Basics, preencha:
    • Subscription: selecione a subscription ativa.
    • Resource group: selecione rg-technova-lab.
    • Registry name: digite acrtechnovalab.
    • Location: selecione Brazil South.
    • SKU: selecione Standard.
  4. Clique em Review + create > Create.
  5. Após a criação, navegue até o recurso e observe que a URL do servidor de login é acrtechnovalab.azurecr.io.

Via CLI

# Criar o ACR com SKU Standard
az acr create \
--resource-group rg-technova-lab \
--name acrtechnovalab \
--sku Standard \
--location brazilsouth

# Confirmar a criação e verificar o loginServer
az acr show --name acrtechnovalab --query "{name:name, loginServer:loginServer, sku:sku.name}" --output table

O registro foi criado com SKU Standard, que inclui 100 GB de armazenamento, webhooks e replicação geográfica limitada. O loginServer retornado (acrtechnovalab.azurecr.io) será utilizado em todos os comandos de push e pull do laboratório.

Tarefa 1.2 — Construir e enviar uma imagem ao ACR

Em vez de construir a imagem localmente e fazer push manual, você usará o recurso ACR Tasks para construir diretamente no Azure, eliminando dependência de Docker local.

Via Portal

  1. O Portal não oferece interface gráfica para build remoto. Utilize a aba Repositories apenas para verificar o resultado após executar o build via CLI.

Via CLI

cd ~/technova-app

# Construir a imagem diretamente no ACR usando ACR Tasks
az acr build \
--registry acrtechnovalab \
--image tracker-api:v1.0 \
--file Dockerfile \
.

# Listar os repositórios disponíveis no registro
az acr repository list --name acrtechnovalab --output table

# Listar as tags do repositório tracker-api
az acr repository show-tags --name acrtechnovalab --repository tracker-api --output table

A imagem tracker-api:v1.0 foi construída no lado do servidor e armazenada no ACR. Isso elimina a necessidade de um ambiente Docker local e garante que a imagem foi construída em ambiente controlado.

Tarefa 1.3 — Habilitar o usuário Admin e testar acesso com credenciais incorretas

Para cenários de teste e integração rápida, a TechNova precisa do usuário Admin habilitado temporariamente. Você também simulará uma tentativa de login com credenciais erradas para confirmar que o controle de acesso funciona corretamente.

Via Portal

  1. Navegue até Container registries > acrtechnovalab > menu lateral Settings > Access keys.
  2. Observe que o campo Admin user está como Disabled. Essa é a condição padrão.
  3. Habilite o toggle Admin user.
  4. Anote o Username e uma das passwords exibidas.
  5. Abra um terminal e tente fazer login com uma senha incorreta:
# Tentativa de login com senha errada (deve falhar)
az acr login --name acrtechnovalab --username acrtechnovalab --password SENHA_ERRADA_PROPOSITAL
  1. Confirme que o comando retorna erro de autenticação.
  2. Agora faça login com a senha correta:
# Login com credenciais válidas
az acr login --name acrtechnovalab

Via CLI

# Verificar o estado atual do admin (deve ser false)
az acr show --name acrtechnovalab --query "adminUserEnabled" --output tsv

# Habilitar o admin user
az acr update --name acrtechnovalab --admin-enabled true

# Obter as credenciais
az acr credential show --name acrtechnovalab --output table

# Testar login com senha errada (deve falhar com erro)
az acr login --name acrtechnovalab --username acrtechnovalab --password SENHA_ERRADA_PROPOSITAL

# Login correto
az acr login --name acrtechnovalab

Você validou a transição de estado do Admin user (desabilitado para habilitado) e confirmou que credenciais inválidas são rejeitadas. Em produção, o acesso via Admin user deve ser desabilitado em favor de service principals ou managed identities.

Tarefa 1.4 — Configurar replicação geográfica e políticas de retenção

Para atender requisitos de disponibilidade, o registro da TechNova precisa de uma réplica em outra região. Além disso, uma política de retenção de tags não assinadas evitará acúmulo de imagens obsoletas. A replicação geográfica exige o SKU Premium.

Via Portal

  1. Navegue até acrtechnovalab > menu lateral Settings > Properties.
  2. No campo SKU, altere de Standard para Premium > Save.
  3. Navegue até menu lateral Services > Geo-replications > + Add.
  4. Selecione a região East US > Create.
  5. Aguarde o status da réplica ficar como Ready.
  6. Navegue até menu lateral Settings > Retention (Preview, se disponível).
  7. Habilite a política e defina Retention period para 30 dias > Save.

Via CLI

# Fazer upgrade do SKU para Premium (necessário para geo-replicação)
az acr update --name acrtechnovalab --sku Premium

# Confirmar o SKU atual
az acr show --name acrtechnovalab --query "sku.name" --output tsv

# Criar réplica em East US
az acr replication create \
--registry acrtechnovalab \
--location eastus

# Listar as réplicas
az acr replication list --registry acrtechnovalab --output table

# Configurar política de retenção para manifestos não tagueados (30 dias)
az acr config retention update \
--registry acrtechnovalab \
--status enabled \
--days 30 \
--type UntaggedManifests

O ACR agora opera em SKU Premium com réplica ativa em East US, reduzindo a latência de pull para workloads nessa região. A política de retenção remove automaticamente manifestos sem tag após 30 dias, controlando o crescimento do armazenamento.

Fase 2 — Provisionamento de contêineres com Azure Container Instances

Nesta fase você provisionará contêineres usando o Azure Container Instances (ACI), consumindo a imagem armazenada no ACR criado na Fase 1. Você configurará variáveis de ambiente, limites de recurso, verificará o comportamento do contêiner, simulará uma falha de configuração e ajustará o dimensionamento. Esta fase cobre os objetivos Provision a container by using Azure Container Instances e Manage sizing and scaling for containers, including Azure Container Instances.

Tarefa 2.1 — Criar um Container Instance a partir da imagem no ACR

Você implantará a imagem tracker-api:v1.0 do ACR em uma instância ACI com IP público, configurando variáveis de ambiente e limites de CPU/memória.

Via Portal

  1. Navegue até a barra de pesquisa > Container instances > + Create.
  2. Na aba Basics:
    • Resource group: selecione rg-technova-lab.
    • Container name: digite aci-tracker-test.
    • Region: selecione Brazil South.
    • SKU: mantenha Standard.
    • Image source: selecione Azure Container Registry.
    • Registry: selecione acrtechnovalab.
    • Image: selecione tracker-api.
    • Image tag: selecione v1.0.
  3. Na aba Networking:
    • Networking type: selecione Public.
    • DNS name label: digite aci-technova-test.
    • Ports: mantenha 80 (TCP) e adicione a porta 3000 (TCP).
  4. Na aba Advanced:
    • Em Environment variables, adicione:
      • Name: PORT | Value: 3000
    • Restart policy: selecione On failure.
  5. Clique em Review + create > Create.

Via CLI

# Obter a senha do ACR para autenticação do ACI
ACR_PASSWORD=$(az acr credential show --name acrtechnovalab --query "passwords[0].value" --output tsv)

# Criar o container instance
az container create \
--resource-group rg-technova-lab \
--name aci-tracker-test \
--image acrtechnovalab.azurecr.io/tracker-api:v1.0 \
--registry-login-server acrtechnovalab.azurecr.io \
--registry-username acrtechnovalab \
--registry-password "$ACR_PASSWORD" \
--cpu 0.5 \
--memory 0.5 \
--ports 3000 \
--environment-variables PORT=3000 \
--dns-name-label aci-technova-test \
--restart-policy OnFailure \
--location brazilsouth

# Verificar o estado do contêiner
az container show \
--resource-group rg-technova-lab \
--name aci-tracker-test \
--query "{state:instanceView.state, fqdn:ipAddress.fqdn, ip:ipAddress.ip}" \
--output table

O contêiner foi provisionado com 0.5 vCPU e 0.5 GB de memória. A variável de ambiente PORT=3000 instrui a aplicação a escutar na porta correta. O FQDN público permite testar o acesso imediato.

Tarefa 2.2 — Validar o comportamento do contêiner e inspecionar logs

Antes de prosseguir, é necessário confirmar que o contêiner responde corretamente e verificar os logs para assegurar que não há erros de inicialização.

Via Portal

  1. Navegue até Container instances > aci-tracker-test.
  2. No menu lateral, clique em Containers > selecione o contêiner na lista.
  3. Na aba Logs, verifique se a saída contém Server running on port 3000.
  4. Na aba Properties, confirme que o State é Running.
  5. Abra um navegador e acesse http://aci-technova-test.brazilsouth.azurecontainer.io:3000. Você deve ver a mensagem TechNova Tracker v1.0 - Host: <hostname>.
  6. Acesse http://aci-technova-test.brazilsouth.azurecontainer.io:3000/health e confirme a resposta OK.

Via CLI

# Exibir os logs do contêiner
az container logs \
--resource-group rg-technova-lab \
--name aci-tracker-test

# Testar a resposta HTTP
FQDN=$(az container show --resource-group rg-technova-lab --name aci-tracker-test --query "ipAddress.fqdn" --output tsv)
curl http://$FQDN:3000
curl http://$FQDN:3000/health

# Verificar eventos do contêiner
az container show \
--resource-group rg-technova-lab \
--name aci-tracker-test \
--query "instanceView.events[]" \
--output table

Os logs confirmam que a aplicação inicializou sem erros. A requisição HTTP retorna a versão e o hostname, validando que o contêiner está saudável e acessível publicamente.

Tarefa 2.3 — Simular erro de configuração e diagnosticar falha

Uma situação comum em ambientes de contêiner é a falha causada por referência a uma imagem inexistente. Você criará deliberadamente um contêiner com uma tag errada para praticar o diagnóstico.

Via Portal

  1. Navegue até Container instances > + Create.
  2. Configure da mesma forma que a Tarefa 2.1, mas na configuração da imagem:
    • Container name: digite aci-tracker-debug.
    • Image tag: digite v99.0 (tag inexistente).
  3. Clique em Review + create > Create.
  4. Após a criação, navegue até o recurso.
  5. No menu lateral, clique em Containers > aba Events.
  6. Observe o evento de falha indicando que a imagem não pôde ser obtida (Failed to pull image).
  7. Anote o código de erro e a mensagem.

Via CLI

# Criar contêiner com tag de imagem errada propositalmente
az container create \
--resource-group rg-technova-lab \
--name aci-tracker-debug \
--image acrtechnovalab.azurecr.io/tracker-api:v99.0 \
--registry-login-server acrtechnovalab.azurecr.io \
--registry-username acrtechnovalab \
--registry-password "$ACR_PASSWORD" \
--cpu 0.5 \
--memory 0.5 \
--ports 3000 \
--restart-policy Never \
--location brazilsouth

# Verificar o estado (esperado: Waiting ou Failed)
az container show \
--resource-group rg-technova-lab \
--name aci-tracker-debug \
--query "{state:instanceView.state, events:instanceView.events[].message}" \
--output json

# Limpar o contêiner com falha
az container delete \
--resource-group rg-technova-lab \
--name aci-tracker-debug \
--yes

O contêiner permaneceu em estado de falha porque a tag v99.0 não existe no registro. Os eventos mostram claramente o erro de pull da imagem. Esse é o padrão de diagnóstico mais frequente em ambientes ACI: verificar eventos quando o contêiner não atinge o estado Running.

Tarefa 2.4 — Ajustar o dimensionamento de recursos da instância

A equipe de monitoramento da TechNova identificou que a instância precisa de mais memória para lidar com picos de telemetria. Você recriará o contêiner com recursos ampliados, pois o ACI não suporta alteração de recursos in-place.

Via Portal

  1. Navegue até Container instances > aci-tracker-test > Overview.
  2. Observe os valores atuais de CPU e Memory na seção de resumo.
  3. O ACI não permite edição de CPU/memória de um contêiner existente. Clique em Delete e confirme a exclusão.
  4. Aguarde a exclusão ser concluída.
  5. Repita os passos da Tarefa 2.1, mas com os seguintes valores alterados:
    • CPU cores: 1.
    • Memory (GB): 1.5.
  6. Após a criação, confirme os novos valores na aba Properties.

Via CLI

# Verificar os recursos atuais antes da alteração
az container show \
--resource-group rg-technova-lab \
--name aci-tracker-test \
--query "{cpu:containers[0].resources.requests.cpu, memoryGB:containers[0].resources.requests.memoryInGb}" \
--output table

# Excluir o contêiner atual (ACI não suporta resize in-place)
az container delete \
--resource-group rg-technova-lab \
--name aci-tracker-test \
--yes

# Recriar com recursos ampliados
az container create \
--resource-group rg-technova-lab \
--name aci-tracker-test \
--image acrtechnovalab.azurecr.io/tracker-api:v1.0 \
--registry-login-server acrtechnovalab.azurecr.io \
--registry-username acrtechnovalab \
--registry-password "$ACR_PASSWORD" \
--cpu 1 \
--memory 1.5 \
--ports 3000 \
--environment-variables PORT=3000 \
--dns-name-label aci-technova-test \
--restart-policy OnFailure \
--location brazilsouth

# Confirmar os novos recursos
az container show \
--resource-group rg-technova-lab \
--name aci-tracker-test \
--query "{cpu:containers[0].resources.requests.cpu, memoryGB:containers[0].resources.requests.memoryInGb, state:instanceView.state}" \
--output table

O contêiner foi recriado com 1 vCPU e 1.5 GB de memória. Esta é uma limitação fundamental do ACI: alterações de dimensionamento exigem exclusão e recriação da instância. Em cenários que exigem escalabilidade dinâmica, o Azure Container Apps é a solução adequada.

Fase 3 — Implantação resiliente com Azure Container Apps

Nesta fase você criará um Container Apps Environment e implantará a aplicação da TechNova usando Azure Container Apps, consumindo a mesma imagem armazenada no ACR (Fase 1). Em seguida, configurará regras de escalabilidade e simulará cenários de escalonamento. Esta fase cobre os objetivos Provision a container by using Azure Container Apps e Manage sizing and scaling for containers, including Azure Container Apps.

Tarefa 3.1 — Criar o Container Apps Environment

O Container Apps Environment é a fronteira lógica de isolamento para as Container Apps. Ele utiliza o Log Analytics Workspace criado nos pré-requisitos para coleta de logs.

Via Portal

  1. Navegue até a barra de pesquisa > Container Apps Environments > + Create.
  2. Na aba Basics:
    • Subscription: selecione a subscription ativa.
    • Resource group: selecione rg-technova-lab.
    • Environment name: digite cae-technova-lab.
    • Region: selecione Brazil South.
    • Environment type: selecione Consumption only.
  3. Na aba Monitoring:
    • Log Analytics workspace: selecione law-technova-lab.
  4. Clique em Review + create > Create.

Via CLI

# Obter o ID e a chave do Log Analytics Workspace
LAW_ID=$(az monitor log-analytics workspace show \
--resource-group rg-technova-lab \
--workspace-name law-technova-lab \
--query "customerId" --output tsv)

LAW_KEY=$(az monitor log-analytics workspace get-shared-keys \
--resource-group rg-technova-lab \
--workspace-name law-technova-lab \
--query "primarySharedKey" --output tsv)

# Criar o Container Apps Environment
az containerapp env create \
--resource-group rg-technova-lab \
--name cae-technova-lab \
--location brazilsouth \
--logs-workspace-id "$LAW_ID" \
--logs-workspace-key "$LAW_KEY"

# Verificar o estado do environment
az containerapp env show \
--resource-group rg-technova-lab \
--name cae-technova-lab \
--query "{name:name, provisioningState:provisioningState}" \
--output table

O environment foi provisionado no modo Consumption, que permite escalabilidade de zero a muitas réplicas sem necessidade de gerenciar infraestrutura subjacente. O Log Analytics Workspace capturará logs do sistema e da aplicação.

Tarefa 3.2 — Implantar a Container App a partir do ACR

Você implantará a aplicação tracker-api como uma Container App com ingress externo habilitado, permitindo acesso via HTTPS com certificado gerenciado automaticamente.

Via Portal

  1. Navegue até a barra de pesquisa > Container Apps > + Create.
  2. Na aba Basics:
    • Subscription: selecione a subscription ativa.
    • Resource group: selecione rg-technova-lab.
    • Container app name: digite ca-tracker-app.
    • Region: selecione Brazil South.
    • Container Apps Environment: selecione cae-technova-lab.
  3. Na aba Container:
    • Desmarque Use quickstart image.
    • Image source: selecione Azure Container Registry.
    • Registry: selecione acrtechnovalab.azurecr.io.
    • Image: selecione tracker-api.
    • Image tag: selecione v1.0.
    • CPU and memory: selecione 0.25 vCPU, 0.5 Gi.
    • Em Environment variables, adicione:
      • Name: PORT | Source: Manual | Value: 3000.
  4. Na aba Ingress:
    • Ingress: habilite.
    • Ingress traffic: selecione Accepting traffic from anywhere.
    • Ingress type: selecione HTTP.
    • Target port: digite 3000.
  5. Clique em Review + create > Create.
  6. Após a implantação, navegue até o recurso e copie a Application Url na aba Overview.
  7. Acesse a URL no navegador e confirme a resposta TechNova Tracker v1.0.

Via CLI

# Criar a Container App com ingress habilitado
az containerapp create \
--resource-group rg-technova-lab \
--name ca-tracker-app \
--environment cae-technova-lab \
--image acrtechnovalab.azurecr.io/tracker-api:v1.0 \
--registry-server acrtechnovalab.azurecr.io \
--registry-username acrtechnovalab \
--registry-password "$ACR_PASSWORD" \
--target-port 3000 \
--ingress external \
--cpu 0.25 \
--memory 0.5Gi \
--min-replicas 1 \
--max-replicas 5 \
--env-vars PORT=3000

# Obter a URL da aplicação
APP_URL=$(az containerapp show \
--resource-group rg-technova-lab \
--name ca-tracker-app \
--query "properties.configuration.ingress.fqdn" --output tsv)

echo "URL: https://$APP_URL"

# Testar a aplicação
curl https://$APP_URL
curl https://$APP_URL/health

A Container App está acessível via HTTPS com certificado gerenciado. Diferente do ACI, o Container Apps fornece automaticamente um domínio FQDN com TLS, balanceamento de carga e roteamento de revisões.

Tarefa 3.3 — Configurar regras de escalabilidade baseadas em HTTP

A plataforma de rastreamento da TechNova tem picos de uso durante horários comerciais. Você configurará uma regra de escalonamento baseada em requisições HTTP concorrentes para garantir que a aplicação escale automaticamente.

Via Portal

  1. Navegue até Container Apps > ca-tracker-app > menu lateral Application > Scale and replicas.
  2. Clique em Edit and deploy (ou acesse via Revision management > Create new revision).
  3. Na aba Scale:
    • Min replicas: defina como 1.
    • Max replicas: defina como 5.
    • Clique em + Add em Scale rule.
    • Rule name: digite http-scaling.
    • Type: selecione HTTP scaling.
    • Concurrent requests: digite 10.
  4. Clique em Create.

Via CLI

# Atualizar a Container App com regra de escalonamento HTTP
az containerapp update \
--resource-group rg-technova-lab \
--name ca-tracker-app \
--min-replicas 1 \
--max-replicas 5 \
--scale-rule-name http-scaling \
--scale-rule-type http \
--scale-rule-http-concurrency 10

# Verificar a configuração de escalonamento
az containerapp show \
--resource-group rg-technova-lab \
--name ca-tracker-app \
--query "properties.template.scale" \
--output json

A regra configura o KEDA (Kubernetes Event-Driven Autoscaling) subjacente para criar novas réplicas quando as requisições concorrentes por réplica excederem 10. Com o mínimo de 1 e máximo de 5, a aplicação mantém disponibilidade constante e escala até 5 réplicas sob carga.

Tarefa 3.4 — Testar o escalonamento e verificar o número de réplicas

Você gerará carga artificial para ativar a regra de escalonamento e observará o aumento do número de réplicas.

Via Portal

  1. Abra um terminal e execute um teste de carga simples contra a URL da Container App:
# Gerar carga concorrente (requer ferramenta como 'hey' ou múltiplos curls paralelos)
# Instalar 'hey' se disponível, ou usar loop com curl em background
APP_URL=$(az containerapp show \
--resource-group rg-technova-lab \
--name ca-tracker-app \
--query "properties.configuration.ingress.fqdn" --output tsv)

# Gerar 200 requisições com 50 concorrentes
for i in $(seq 1 200); do
curl -s -o /dev/null "https://$APP_URL" &
if (( i % 50 == 0 )); then wait; fi
done
wait
  1. Navegue até Container Apps > ca-tracker-app > menu lateral Application > Scale and replicas.
  2. Observe o número de réplicas ativas. Dependendo da carga, o valor deve ter aumentado acima de 1.
  3. Aguarde alguns minutos sem gerar carga e observe as réplicas diminuírem de volta ao mínimo.

Via CLI

# Verificar o número atual de réplicas
az containerapp replica list \
--resource-group rg-technova-lab \
--name ca-tracker-app \
--output table

# Verificar métricas no Log Analytics (pode levar alguns minutos para popular)
az containerapp logs show \
--resource-group rg-technova-lab \
--name ca-tracker-app \
--type system \
--follow

Após o teste de carga, o número de réplicas deve ter aumentado para atender à demanda. O Container Apps gerencia o ciclo de vida das réplicas automaticamente, escalando para baixo quando a carga diminui. O tempo de reação depende do intervalo de polling do KEDA, tipicamente entre 15 e 30 segundos.

Tarefa 3.5 — Configurar escalonamento para zero e validar o comportamento

Para otimizar custos fora do horário comercial, a TechNova quer que a aplicação escale para zero réplicas quando não há tráfego. Você alterará a configuração de mínimo de réplicas e verificará a transição.

Via Portal

  1. Navegue até Container Apps > ca-tracker-app > menu lateral Application > Scale and replicas.
  2. Clique em Edit and deploy.
  3. Na aba Scale, altere Min replicas para 0.
  4. Clique em Create.
  5. Aguarde aproximadamente 5 minutos sem enviar requisições.
  6. Retorne a Scale and replicas e verifique se o número de réplicas é 0.
  7. Acesse a URL da aplicação no navegador. Observe que a primeira requisição leva mais tempo (cold start) mas ainda retorna com sucesso.

Via CLI

# Alterar o mínimo de réplicas para zero
az containerapp update \
--resource-group rg-technova-lab \
--name ca-tracker-app \
--min-replicas 0

# Verificar a configuração atualizada
az containerapp show \
--resource-group rg-technova-lab \
--name ca-tracker-app \
--query "properties.template.scale.minReplicas" \
--output tsv

# Aguardar e verificar réplicas (deve mostrar 0 após período de inatividade)
sleep 300
az containerapp replica list \
--resource-group rg-technova-lab \
--name ca-tracker-app \
--output table

# Enviar requisição para forçar cold start
curl -w "\nTempo total: %{time_total}s\n" https://$APP_URL

Com mínimo zero, a Container App pode desalocar todas as réplicas quando ociosa, eliminando o custo de compute. O trade-off é o tempo de cold start na primeira requisição, que pode variar de 2 a 10 segundos dependendo do tamanho da imagem e do tempo de inicialização da aplicação.

Validação Final

Após a conclusão de todas as fases, verifique os critérios abaixo para confirmar que o laboratório foi executado corretamente.

Critério 1 — ACR com imagem e replicação: Navegue até Container registries > acrtechnovalab > Repositories. Confirme que o repositório tracker-api existe com a tag v1.0. Em Geo-replications, confirme que as regiões Brazil South e East US estão listadas com status Ready. Via CLI: az acr replication list --registry acrtechnovalab --output table.

Critério 2 — ACI operacional com recursos ampliados: Execute az container show --resource-group rg-technova-lab --name aci-tracker-test --query "{cpu:containers[0].resources.requests.cpu, memory:containers[0].resources.requests.memoryInGb, state:instanceView.state}" --output table. O output deve mostrar CPU 1, memória 1.5 e estado Running.

Critério 3 — Container App acessível via HTTPS: Obtenha a URL com az containerapp show --resource-group rg-technova-lab --name ca-tracker-app --query "properties.configuration.ingress.fqdn" --output tsv. Acesse https://<fqdn> no navegador ou com curl. A resposta deve conter TechNova Tracker v1.0. Acesse /health e confirme a resposta OK. Este critério valida comportamento observável de ponta a ponta.

Critério 4 — Regra de escalonamento configurada: Execute az containerapp show --resource-group rg-technova-lab --name ca-tracker-app --query "properties.template.scale" --output json. Confirme que minReplicas é 0, maxReplicas é 5 e existe uma regra de tipo http com concorrência de 10.

Critério 5 — Escalonamento para zero verificável: Aguarde ao menos 5 minutos sem enviar requisições. Execute az containerapp replica list --resource-group rg-technova-lab --name ca-tracker-app --output table. O resultado deve mostrar zero réplicas. Em seguida, envie uma requisição com curl -w "\nTempo: %{time_total}s\n" https://<fqdn>. O tempo de resposta elevado (acima de 2 segundos) confirma o cold start, e a resposta bem-sucedida confirma que o escalonamento de zero para uma réplica funcionou corretamente.

Cleanup do Ambiente

Siga os passos abaixo para remover todos os recursos criados durante o laboratório, evitando cobranças contínuas.

Via Portal

  1. Navegue até Container Apps > ca-tracker-app > Delete > confirme a exclusão.
  2. Navegue até Container Apps Environments > cae-technova-lab > Delete > confirme.
  3. Navegue até Container instances > aci-tracker-test > Delete > confirme.
  4. Navegue até Container registries > acrtechnovalab > Delete > confirme.
  5. Navegue até Resource groups > rg-technova-lab > Delete resource group > digite o nome rg-technova-lab para confirmar > Delete.
  6. Aguarde a notificação de conclusão. Navegue até Resource groups e confirme que rg-technova-lab não aparece mais na lista.

Via CLI

# A exclusão do Resource Group remove todos os recursos filhos de uma vez
az group delete --name rg-technova-lab --yes --no-wait

# Verificar que a exclusão foi iniciada
az group show --name rg-technova-lab --query "properties.provisioningState" --output tsv
# O estado deve ser "Deleting"

# Aguardar e confirmar exclusão completa (o comando retornará erro quando o RG não existir mais)
az group wait --name rg-technova-lab --deleted
az group show --name rg-technova-lab 2>&1 || echo "Resource Group excluído com sucesso."

Após a confirmação de exclusão do Resource Group, todos os recursos do laboratório foram removidos e nenhuma cobrança adicional será gerada.