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>.
- Resource Group: crie o grupo de recursos que hospedará todos os recursos do laboratório.
az group create --name rg-technova-lab --location brazilsouth
- 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
- 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
| Recurso | Nome no lab | Região |
|---|---|---|
| Resource Group | rg-technova-lab | Brazil South |
| Log Analytics Workspace | law-technova-lab | Brazil South |
| Azure Container Registry | acrtechnovalab | Brazil South |
| Container Instance (teste) | aci-tracker-test | Brazil South |
| Container Instance (debug) | aci-tracker-debug | Brazil South |
| Container Apps Environment | cae-technova-lab | Brazil South |
| Container App | ca-tracker-app | Brazil South |
| Diretório da aplicação | ~/technova-app | N/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
- Navegue até o portal do Azure > barra de pesquisa > digite Container registries > clique no serviço.
- Clique em + Create.
- 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.
- Clique em Review + create > Create.
- 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
- 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
- Navegue até Container registries > acrtechnovalab > menu lateral Settings > Access keys.
- Observe que o campo Admin user está como Disabled. Essa é a condição padrão.
- Habilite o toggle Admin user.
- Anote o Username e uma das passwords exibidas.
- 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
- Confirme que o comando retorna erro de autenticação.
- 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
- Navegue até acrtechnovalab > menu lateral Settings > Properties.
- No campo SKU, altere de Standard para Premium > Save.
- Navegue até menu lateral Services > Geo-replications > + Add.
- Selecione a região East US > Create.
- Aguarde o status da réplica ficar como Ready.
- Navegue até menu lateral Settings > Retention (Preview, se disponível).
- 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
- Navegue até a barra de pesquisa > Container instances > + Create.
- 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.
- Na aba Networking:
- Networking type: selecione Public.
- DNS name label: digite aci-technova-test.
- Ports: mantenha 80 (TCP) e adicione a porta 3000 (TCP).
- Na aba Advanced:
- Em Environment variables, adicione:
- Name:
PORT| Value:3000
- Name:
- Restart policy: selecione On failure.
- Em Environment variables, adicione:
- 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
- Navegue até Container instances > aci-tracker-test.
- No menu lateral, clique em Containers > selecione o contêiner na lista.
- Na aba Logs, verifique se a saída contém
Server running on port 3000. - Na aba Properties, confirme que o State é Running.
- Abra um navegador e acesse
http://aci-technova-test.brazilsouth.azurecontainer.io:3000. Você deve ver a mensagemTechNova Tracker v1.0 - Host: <hostname>. - Acesse
http://aci-technova-test.brazilsouth.azurecontainer.io:3000/healthe confirme a respostaOK.
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
- Navegue até Container instances > + Create.
- 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).
- Clique em Review + create > Create.
- Após a criação, navegue até o recurso.
- No menu lateral, clique em Containers > aba Events.
- Observe o evento de falha indicando que a imagem não pôde ser obtida (Failed to pull image).
- 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
- Navegue até Container instances > aci-tracker-test > Overview.
- Observe os valores atuais de CPU e Memory na seção de resumo.
- O ACI não permite edição de CPU/memória de um contêiner existente. Clique em Delete e confirme a exclusão.
- Aguarde a exclusão ser concluída.
- Repita os passos da Tarefa 2.1, mas com os seguintes valores alterados:
- CPU cores: 1.
- Memory (GB): 1.5.
- 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
- Navegue até a barra de pesquisa > Container Apps Environments > + Create.
- 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.
- Na aba Monitoring:
- Log Analytics workspace: selecione law-technova-lab.
- 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
- Navegue até a barra de pesquisa > Container Apps > + Create.
- 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.
- 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.
- Name:
- Na aba Ingress:
- Ingress: habilite.
- Ingress traffic: selecione Accepting traffic from anywhere.
- Ingress type: selecione HTTP.
- Target port: digite 3000.
- Clique em Review + create > Create.
- Após a implantação, navegue até o recurso e copie a Application Url na aba Overview.
- 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
- Navegue até Container Apps > ca-tracker-app > menu lateral Application > Scale and replicas.
- Clique em Edit and deploy (ou acesse via Revision management > Create new revision).
- 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.
- 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
- 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
- Navegue até Container Apps > ca-tracker-app > menu lateral Application > Scale and replicas.
- Observe o número de réplicas ativas. Dependendo da carga, o valor deve ter aumentado acima de 1.
- 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
- Navegue até Container Apps > ca-tracker-app > menu lateral Application > Scale and replicas.
- Clique em Edit and deploy.
- Na aba Scale, altere Min replicas para 0.
- Clique em Create.
- Aguarde aproximadamente 5 minutos sem enviar requisições.
- Retorne a Scale and replicas e verifique se o número de réplicas é 0.
- 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
- Navegue até Container Apps > ca-tracker-app > Delete > confirme a exclusão.
- Navegue até Container Apps Environments > cae-technova-lab > Delete > confirme.
- Navegue até Container instances > aci-tracker-test > Delete > confirme.
- Navegue até Container registries > acrtechnovalab > Delete > confirme.
- Navegue até Resource groups > rg-technova-lab > Delete resource group > digite o nome rg-technova-lab para confirmar > Delete.
- 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.