Laboratório Hands-on Guiado: AZ-104 Microsoft Azure Administrator
Cenário
A TechNova Soluções Ltda. é uma empresa de e-commerce B2B que opera uma plataforma de catálogo e pedidos para distribuidores industriais no Brasil. A infraestrutura atual reside no Azure com uma VNet já provisionada na região Brazil South, um banco de dados Azure SQL e um Key Vault para gerenciamento de segredos. A equipe de DevOps precisa migrar a aplicação web principal, atualmente hospedada em VMs on-premises, para o Azure App Service, garantindo escalabilidade automática, comunicação segura via TLS com domínio personalizado, mecanismos de backup, integração com a VNet existente e um pipeline de deployment com slots de staging.
O objetivo técnico global deste laboratório é provisionar, configurar e validar toda a infraestrutura de App Service necessária para suportar a aplicação web da TechNova em ambiente de produção, cobrindo desde o plano de hospedagem até a estratégia de deployment com zero downtime.
Pré-requisitos
Antes de iniciar a Fase 1, crie ou confirme a existência dos seguintes recursos:
1. Resource Group
Crie um Resource Group que centralizará todos os recursos do laboratório.
Via Portal
- No portal Azure, pesquise Resource groups na barra de busca superior.
- Clique em Create.
- Preencha o campo Resource group com
rg-technova-lab. - Selecione a região Brazil South.
- Clique em Review + create e depois em Create.
Via CLI
az group create \
--name rg-technova-lab \
--location brazilsouth
2. Virtual Network e Subnet
Crie a VNet que será usada para integração de rede do App Service.
Via Portal
- Pesquise Virtual networks e clique em Create.
- Preencha Name com
vnet-technova-lab. - Selecione o Resource Group
rg-technova-labe a região Brazil South. - Na aba IP Addresses, mantenha o espaço de endereços
10.0.0.0/16. - Adicione uma subnet chamada
snet-appservicecom intervalo10.0.1.0/24. - Adicione uma segunda subnet chamada
snet-defaultcom intervalo10.0.0.0/24. - Clique em Review + create e depois em Create.
Via CLI
az network vnet create \
--resource-group rg-technova-lab \
--name vnet-technova-lab \
--address-prefix 10.0.0.0/16 \
--subnet-name snet-default \
--subnet-prefix 10.0.0.0/24 \
--location brazilsouth
az network vnet subnet create \
--resource-group rg-technova-lab \
--vnet-name vnet-technova-lab \
--name snet-appservice \
--address-prefix 10.0.1.0/24 \
--delegations Microsoft.Web/serverFarms
3. Storage Account
Crie uma conta de armazenamento que será usada para armazenar backups do App Service.
Via Portal
- Pesquise Storage accounts e clique em Create.
- Selecione o Resource Group
rg-technova-lab. - Preencha Storage account name com
sttechnovalab(apenas letras minúsculas e números). - Selecione a região Brazil South.
- Em Redundancy, selecione LRS.
- Clique em Review + create e depois em Create.
- Após a criação, acesse o Storage Account, navegue até Containers e crie um container chamado
appbackupscom acesso Private.
Via CLI
az storage account create \
--name sttechnovalab \
--resource-group rg-technova-lab \
--location brazilsouth \
--sku Standard_LRS
az storage container create \
--name appbackups \
--account-name sttechnovalab \
--auth-mode login
Tabela de referência de recursos
| Recurso | Nome no lab | Região |
|---|---|---|
| Resource Group | rg-technova-lab | Brazil South |
| Virtual Network | vnet-technova-lab | Brazil South |
| Subnet (App Service) | snet-appservice | Brazil South |
| Subnet (Default) | snet-default | Brazil South |
| Storage Account | sttechnovalab | Brazil South |
| Storage Container | appbackups | Brazil South |
| App Service Plan | plan-technova-prod | Brazil South |
| App Service | app-technova-web | Brazil South |
| Deployment Slot | staging | Brazil South |
Fases do Laboratório
Fase 1 — Provisionamento do App Service Plan e do App Service
Nesta fase você criará a base de hospedagem da aplicação: o App Service Plan que define os recursos computacionais e o App Service que hospedará a aplicação web. Esses recursos serão utilizados e expandidos em todas as fases seguintes.
Objetivos cobertos: Provision an App Service plan, Create an App Service.
Tarefa 1.1 — Criar o App Service Plan
A TechNova precisa de um plano de hospedagem que suporte os recursos de produção necessários: slots de deployment, backups, certificados personalizados e escalabilidade automática. Você provisionará um App Service Plan no tier Standard S1, que é o tier mínimo que suporta slots e backups.
Via Portal
- No portal Azure, pesquise App Service plans e clique em Create.
- Selecione o Resource Group
rg-technova-lab. - Preencha Name com
plan-technova-prod. - Em Operating System, selecione Linux.
- Em Region, selecione Brazil South.
- Em Pricing plan, clique em Explore pricing plans e selecione o tier Standard S1.
- Clique em Review + create e depois em Create.
Via CLI
az appservice plan create \
--name plan-technova-prod \
--resource-group rg-technova-lab \
--location brazilsouth \
--sku S1 \
--is-linux
Após a criação, o App Service Plan estará ativo com uma instância S1, provendo 1 core, 1.75 GB de RAM e suporte a funcionalidades como deployment slots, backups e escalabilidade. Nenhuma aplicação está associada a ele ainda.
Tarefa 1.2 — Verificar o SKU e os limites do plano
Antes de criar o App Service, é fundamental confirmar que o plano provisionado realmente suporta os recursos que serão configurados nas fases seguintes. Um erro comum é selecionar um tier Free ou Basic e descobrir a limitação apenas ao tentar configurar slots ou backups.
Via Portal
- Navegue até App Service plans e selecione
plan-technova-prod. - No painel Overview, confirme que o Pricing tier exibe Standard S1.
- No menu lateral, clique em Scale up (App Service plan).
- Observe as funcionalidades incluídas no tier S1: Custom domains/SSL, Auto scale, Staging slots (até 5), Daily backups.
- Confirme que o sistema operacional exibido é Linux.
Via CLI
# Verificar as propriedades do plano
az appservice plan show \
--name plan-technova-prod \
--resource-group rg-technova-lab \
--query "{name:name, sku:sku.name, tier:sku.tier, os:kind, workers:sku.capacity}" \
--output table
O output esperado deve mostrar o SKU como S1, o tier como Standard e a capacidade como 1. Se o tier estiver como Free ou Basic, exclua o plano e recrie com o SKU correto antes de prosseguir.
Tarefa 1.3 — Criar o App Service
Com o plano provisionado e validado, agora você criará a aplicação web da TechNova. A aplicação utilizará o runtime Node.js 20 LTS.
Via Portal
- Pesquise App Services e clique em Create e depois em Web App.
- Selecione o Resource Group
rg-technova-lab. - Preencha Name com
app-technova-web. Este nome precisa ser globalmente único; se estiver indisponível, adicione um sufixo numérico (ex:app-technova-web-01) e atualize as referências ao longo do lab. - Em Publish, selecione Code.
- Em Runtime stack, selecione Node 20 LTS.
- Em Operating System, confirme Linux.
- Em Region, confirme Brazil South.
- Em App Service Plan, confirme que
plan-technova-prod (S1)está selecionado. - Clique em Review + create e depois em Create.
Via CLI
az webapp create \
--name app-technova-web \
--resource-group rg-technova-lab \
--plan plan-technova-prod \
--runtime "NODE:20-lts"
Após a criação, o App Service estará acessível em https://app-technova-web.azurewebsites.net. Navegue até essa URL no navegador e confirme que a página padrão do Azure é exibida. Isso valida que o App Service está operacional e respondendo a requisições HTTPS.
Tarefa 1.4 — Diagnosticar erro de runtime intencionalmente
Para exercitar a resolução de problemas, você alterará o runtime para uma versão incompatível, observará o erro e reverterá para o estado funcional.
Via Portal
- No App Service
app-technova-web, navegue até Settings > Configuration. - Na aba General settings, altere o Stack para Python e a versão para 3.12.
- Clique em Save e confirme.
- Aguarde 1 minuto e acesse
https://app-technova-web.azurewebsites.net. Observe que a página pode retornar um erro ou comportamento inesperado, pois não há código Python implantado. - Navegue até Diagnose and solve problems e selecione Availability and Performance. Observe os indicadores de erro.
- Retorne a Configuration > General settings, altere o Stack de volta para Node 20 LTS.
- Clique em Save e confirme.
- Acesse novamente a URL e confirme que a página padrão volta a ser exibida.
Via CLI
# Alterar para runtime incompatível
az webapp config set \
--name app-technova-web \
--resource-group rg-technova-lab \
--linux-fx-version "PYTHON:3.12"
# Verificar o status (aguarde ~60 segundos)
curl -s -o /dev/null -w "%{http_code}" https://app-technova-web.azurewebsites.net
# Reverter para o runtime correto
az webapp config set \
--name app-technova-web \
--resource-group rg-technova-lab \
--linux-fx-version "NODE:20-lts"
# Confirmar recuperação
curl -s -o /dev/null -w "%{http_code}" https://app-technova-web.azurewebsites.net
Este exercício demonstra o impacto de uma configuração de runtime incorreta e como identificar e corrigir o problema rapidamente. O HTTP status code deve retornar 200 após a reversão.
Fase 2 — Escalabilidade e Certificados TLS
Nesta fase você configurará a escalabilidade automática do App Service Plan criado na Fase 1 e habilitará certificados TLS para comunicação segura. O App Service app-technova-web e o plano plan-technova-prod criados anteriormente serão expandidos com regras de autoscale e configurações de segurança.
Objetivos cobertos: Configure scaling for an App Service plan, Configure certificates and Transport Layer Security (TLS) for an App Service.
Tarefa 2.1 — Configurar scale out manual
Antes de configurar autoscale baseado em regras, primeiro ajuste manualmente o número de instâncias para validar que o plano suporta múltiplas instâncias.
Via Portal
- Navegue até o App Service Plan
plan-technova-prod. - No menu lateral, clique em Scale out (App Service plan).
- Confirme que a opção atual está definida como Manual scale com 1 instância.
- Altere o Instance count para 2.
- Clique em Save.
- Aguarde a conclusão do provisionamento e retorne ao Overview do plano para confirmar que o número de instâncias agora é 2.
Via CLI
# Escalar manualmente para 2 instâncias
az appservice plan update \
--name plan-technova-prod \
--resource-group rg-technova-lab \
--number-of-workers 2
# Verificar o número de instâncias
az appservice plan show \
--name plan-technova-prod \
--resource-group rg-technova-lab \
--query "sku.capacity" \
--output tsv
O plano agora opera com 2 instâncias, distribuindo as requisições entre elas. Este é o pré-requisito para validar que o scale out funciona antes de automatizá-lo.
Tarefa 2.2 — Configurar autoscale baseado em regras
Agora você configurará o autoscale para que o plano escale automaticamente com base na utilização de CPU, simulando o comportamento esperado em produção para a TechNova durante picos de pedidos.
Via Portal
- No App Service Plan
plan-technova-prod, clique em Scale out (App Service plan). - Selecione Rules Based (ou Custom autoscale, dependendo da versão do portal).
- Na regra padrão (Default scale condition), configure:
- Minimum instances:
1 - Maximum instances:
5 - Default instances:
2
- Minimum instances:
- Clique em Add a rule para criar a regra de scale out:
- Metric source: Current resource (
plan-technova-prod) - Metric name: CPU Percentage
- Operator: Greater than
- Metric threshold:
70 - Duration (minutes):
5 - Time grain (minutes):
1 - Time grain statistic: Average
- Operation: Increase count by
- Instance count:
1 - Cool down (minutes):
5 - Clique em Add.
- Metric source: Current resource (
- Clique em Add a rule novamente para a regra de scale in:
- Metric name: CPU Percentage
- Operator: Less than
- Metric threshold:
30 - Duration (minutes):
10 - Operation: Decrease count by
- Instance count:
1 - Cool down (minutes):
10 - Clique em Add.
- Clique em Save.
Via CLI
# Criar autoscale setting
az monitor autoscale create \
--resource-group rg-technova-lab \
--name autoscale-technova \
--resource plan-technova-prod \
--resource-type Microsoft.Web/serverFarms \
--min-count 1 \
--max-count 5 \
--count 2
# Regra de scale out: CPU > 70% por 5 minutos
az monitor autoscale rule create \
--resource-group rg-technova-lab \
--autoscale-name autoscale-technova \
--condition "CpuPercentage > 70 avg 5m" \
--scale out 1
# Regra de scale in: CPU < 30% por 10 minutos
az monitor autoscale rule create \
--resource-group rg-technova-lab \
--autoscale-name autoscale-technova \
--condition "CpuPercentage < 30 avg 10m" \
--scale in 1 \
--cooldown 10
Com essas regras configuradas, o App Service Plan escalará automaticamente entre 1 e 5 instâncias com base na utilização de CPU. A regra de scale in possui um cooldown maior (10 minutos) para evitar oscilações rápidas (flapping) durante variações temporárias de carga.
Tarefa 2.3 — Verificar e corrigir uma regra de autoscale desbalanceada
Um erro comum em ambientes de produção é configurar apenas a regra de scale out sem a correspondente regra de scale in, causando acúmulo de instâncias e custos elevados. Nesta tarefa você simulará a remoção da regra de scale in e verificará o impacto.
Via Portal
- Navegue até Monitor > Autoscale e selecione
autoscale-technova. - Localize a regra de scale in (CPU < 30%) e clique no ícone de exclusão para removê-la.
- Clique em Save.
- Observe a notificação de alerta na parte superior do painel. O Azure exibe um aviso informando que existe uma regra de scale out sem a correspondente regra de scale in.
- Recrie a regra de scale in com os mesmos parâmetros da Tarefa 2.2, passo 5.
- Clique em Save e confirme que o aviso desaparece.
Via CLI
# Listar regras existentes
az monitor autoscale rule list \
--resource-group rg-technova-lab \
--autoscale-name autoscale-technova \
--output table
# Excluir todas as regras e recriar apenas a de scale out (simulando o erro)
az monitor autoscale rule delete \
--resource-group rg-technova-lab \
--autoscale-name autoscale-technova \
--index 1
# Verificar o aviso ao listar novamente
az monitor autoscale show \
--resource-group rg-technova-lab \
--name autoscale-technova \
--query "profiles[0].rules" \
--output table
# Recriar a regra de scale in
az monitor autoscale rule create \
--resource-group rg-technova-lab \
--autoscale-name autoscale-technova \
--condition "CpuPercentage < 30 avg 10m" \
--scale in 1 \
--cooldown 10
Esta tarefa reforça a importância de manter regras de autoscale balanceadas. Em produção, a ausência de uma regra de scale in pode resultar em custos desnecessários quando o tráfego diminui.
Tarefa 2.4 — Criar um App Service Managed Certificate
A TechNova precisa garantir que toda comunicação com a aplicação ocorra via TLS. Nesta tarefa você configurará o TLS mínimo e verificará o certificado gerenciado padrão do domínio *.azurewebsites.net.
Via Portal
- Navegue até o App Service
app-technova-web. - No menu lateral, clique em Settings > Certificates.
- Na aba Managed certificates, observe que o certificado para
app-technova-web.azurewebsites.netjá é gerenciado automaticamente pelo Azure. - Navegue até Settings > Configuration > aba General settings.
- Localize a seção Platform settings.
- Em Minimum inbound TLS version, altere para 1.2.
- Em HTTPS Only, confirme que está definido como On. Se estiver Off, altere para On.
- Clique em Save.
Via CLI
# Definir TLS mínimo como 1.2
az webapp config set \
--name app-technova-web \
--resource-group rg-technova-lab \
--min-tls-version 1.2
# Habilitar HTTPS Only (redireciona HTTP para HTTPS)
az webapp update \
--name app-technova-web \
--resource-group rg-technova-lab \
--set httpsOnly=true
# Verificar as configurações
az webapp config show \
--name app-technova-web \
--resource-group rg-technova-lab \
--query "{minTlsVersion:minTlsVersion, httpsOnly:httpsOnly}" \
--output table
Após essa configuração, qualquer tentativa de conexão HTTP será automaticamente redirecionada para HTTPS, e conexões TLS inferiores a 1.2 serão rejeitadas. Teste acessando http://app-technova-web.azurewebsites.net no navegador e observe o redirecionamento automático para HTTPS.
Tarefa 2.5 — Testar rejeição de TLS 1.0/1.1
Para validar que a configuração de TLS mínimo está funcionando, você tentará uma conexão forçando uma versão TLS inferior.
Via CLI
# Tentar conexão com TLS 1.0 (deve falhar)
curl -v --tls-max 1.0 https://app-technova-web.azurewebsites.net 2>&1 | grep -E "SSL|error|alert"
# Tentar conexão com TLS 1.1 (deve falhar)
curl -v --tls-max 1.1 https://app-technova-web.azurewebsites.net 2>&1 | grep -E "SSL|error|alert"
# Tentar conexão com TLS 1.2 (deve funcionar)
curl -v --tlsv1.2 https://app-technova-web.azurewebsites.net 2>&1 | grep "HTTP/"
Via Portal
- Acesse
https://app-technova-web.azurewebsites.netno navegador. - Clique no ícone de cadeado na barra de endereço.
- Verifique os detalhes do certificado e confirme que a conexão utiliza TLS 1.2 ou superior.
As conexões com TLS 1.0 e 1.1 devem ser recusadas com erro de handshake SSL. A conexão com TLS 1.2 deve retornar HTTP/1.1 200 ou HTTP/2 200, confirmando que a política de TLS mínimo está ativa.
Fase 3 — Domínio Personalizado e Backup
Nesta fase você mapeará um domínio personalizado ao App Service app-technova-web e configurará backups automáticos utilizando o Storage Account sttechnovalab criado nos pré-requisitos. Os recursos do App Service configurados nas Fases 1 e 2 serão utilizados como base.
Objetivos cobertos: Map an existing custom DNS name to an App Service, Configure backup for an App Service.
Tarefa 3.1 — Mapear um domínio personalizado (usando domínio asn.azurewebsites.net de validação)
Em um cenário de produção, a TechNova utilizaria um domínio como www.technova.com.br. Neste laboratório, como nem todos possuem acesso a um domínio registrado, você executará o processo de mapeamento utilizando a validação de domínio do Azure. Se você possuir um domínio real, substitua os valores conforme indicado.
Via Portal
- Navegue até o App Service
app-technova-web. - No menu lateral, clique em Settings > Custom domains.
- Observe o domínio padrão
app-technova-web.azurewebsites.netjá listado. - Clique em Add custom domain.
- Em Domain provider, selecione All other domain services.
- No campo Domain, insira o domínio personalizado (ex:
www.technova.com.br). - Clique em Validate.
- O Azure exibirá os registros DNS necessários:
- Para um subdomínio (www): um registro CNAME apontando para
app-technova-web.azurewebsites.net. - Para um domínio raiz: um registro A com o IP do App Service e um registro TXT para verificação.
- Para um subdomínio (www): um registro CNAME apontando para
- Anote o Custom Domain Verification ID exibido. Este valor é necessário para criar o registro TXT
asuid.wwwno DNS. - Se você possui acesso ao DNS do domínio, crie os registros indicados no provedor DNS. Caso contrário, clique em Close e prossiga para a próxima tarefa, compreendendo o fluxo necessário.
Via CLI
# Obter o IP externo do App Service (para registro A de domínio raiz)
az webapp show \
--name app-technova-web \
--resource-group rg-technova-lab \
--query "defaultHostName" \
--output tsv
# Obter o verification ID (para registro TXT)
az webapp show \
--name app-technova-web \
--resource-group rg-technova-lab \
--query "customDomainVerificationId" \
--output tsv
# Após criar os registros DNS no provedor, adicionar o binding:
# az webapp config hostname add \
# --webapp-name app-technova-web \
# --resource-group rg-technova-lab \
# --hostname www.technova.com.br
O mapeamento de domínio personalizado requer que os registros DNS estejam propagados antes da validação. O Azure verifica tanto a posse do domínio (via registro TXT) quanto o roteamento (via CNAME ou A record). Em ambientes reais, a propagação DNS pode levar de minutos a horas.
Tarefa 3.2 — Diagnosticar falha de validação de domínio
Um cenário adverso comum é a falha de validação quando os registros DNS estão incorretos ou ainda não propagados. Nesta tarefa você simulará esse diagnóstico.
Via Portal
- Navegue até Custom domains no App Service
app-technova-web. - Clique em Add custom domain e insira um domínio fictício como
webapp.technova-fake.com. - Clique em Validate.
- Observe a mensagem de erro exibida. O Azure indica que não encontrou os registros CNAME ou A/TXT esperados.
- Analise os campos exibidos:
- O CNAME record esperado (apontando para
app-technova-web.azurewebsites.net). - O TXT record esperado (com o verification ID).
- O CNAME record esperado (apontando para
- Clique em Close sem adicionar o domínio.
Via CLI
# Tentar adicionar domínio sem registros DNS configurados
az webapp config hostname add \
--webapp-name app-technova-web \
--resource-group rg-technova-lab \
--hostname webapp.technova-fake.com 2>&1 || true
# O erro esperado menciona que o registro CNAME ou TXT não foi encontrado
# Use nslookup para verificar o estado DNS
nslookup -type=CNAME webapp.technova-fake.com || true
nslookup -type=TXT asuid.webapp.technova-fake.com || true
Este exercício demonstra como diagnosticar falhas de validação de domínio. Em produção, as causas mais comuns são: registro CNAME apontando para o endereço errado, ausência do registro TXT de verificação, ou tempo insuficiente de propagação DNS.
Tarefa 3.3 — Configurar backup automático
A TechNova requer backups diários da aplicação para garantir recuperação em caso de falhas. Você configurará o backup automático do App Service utilizando o container appbackups do Storage Account sttechnovalab.
Via Portal
- Navegue até o App Service
app-technova-web. - No menu lateral, clique em Settings > Backups.
- Clique em Configure.
- Em Backup Storage, clique em Storage not configured (ou no link para configurar).
- Selecione o Storage Account
sttechnovalab. - Selecione o container
appbackups. - Clique em OK.
- Em Scheduled backup, altere para On.
- Configure o agendamento:
- Backup every:
1Day(s) - Start time: selecione a hora atual mais 1 hora
- Retention (Days):
30
- Backup every:
- Marque a opção Include at least one of the linked databases se desejar incluir bancos associados, ou deixe desmarcada para este lab.
- Clique em Save.
Via CLI
# Obter a SAS URL do container de backup
# Definir expiração para 1 ano
EXPIRY=$(date -u -d "+1 year" +%Y-%m-%dT%H:%MZ)
SAS_URL=$(az storage container generate-sas \
--account-name sttechnovalab \
--name appbackups \
--permissions rwdl \
--expiry $EXPIRY \
--auth-mode login \
--as-user \
--output tsv)
CONTAINER_URL="https://sttechnovalab.blob.core.windows.net/appbackups?${SAS_URL}"
# Configurar backup automático (diário, retenção de 30 dias)
az webapp config backup update \
--webapp-name app-technova-web \
--resource-group rg-technova-lab \
--container-url "$CONTAINER_URL" \
--frequency 1d \
--retain-one-backup true \
--retention 30
O backup automático captura o conteúdo da aplicação (arquivos em /home), configurações do App Service e, opcionalmente, bancos de dados vinculados. O armazenamento no container appbackups permite recuperação em caso de corrupção de dados ou deploys incorretos.
Tarefa 3.4 — Executar e verificar um backup manual
Para confirmar que a configuração de backup funciona corretamente, execute um backup manual e verifique o resultado.
Via Portal
- No App Service
app-technova-web, acesse Backups. - Clique em Backup Now (ou Create backup).
- Aguarde a execução. O status mudará de InProgress para Succeeded.
- Após a conclusão, clique no backup listado para ver os detalhes.
- Confirme que o tamanho do backup é maior que 0 bytes.
- Navegue até o Storage Account
sttechnovalab> Containers >appbackups. - Confirme que dois arquivos foram criados: um arquivo
.zipcom o conteúdo do backup e um arquivo.xmlcom os metadados.
Via CLI
# Executar backup manual
az webapp config backup create \
--webapp-name app-technova-web \
--resource-group rg-technova-lab \
--container-url "$CONTAINER_URL"
# Listar backups
az webapp config backup list \
--webapp-name app-technova-web \
--resource-group rg-technova-lab \
--output table
# Verificar arquivos no container
az storage blob list \
--container-name appbackups \
--account-name sttechnovalab \
--auth-mode login \
--query "[].{Name:name, Size:properties.contentLength}" \
--output table
O backup manual deve aparecer na lista com status Succeeded. Os arquivos no container confirmam que o mecanismo de backup está operacional e que o App Service possui permissão de escrita no Storage Account.
Fase 4 — Configuração de Rede
Nesta fase você configurará as opções de rede do App Service app-technova-web para integrá-lo à VNet vnet-technova-lab criada nos pré-requisitos. Isso permitirá que a aplicação acesse recursos privados na VNet, como bancos de dados ou outros serviços internos da TechNova.
Objetivo coberto: Configure networking settings for an App Service.
Tarefa 4.1 — Verificar o estado de rede atual
Antes de integrar o App Service à VNet, verifique o estado de rede atual para confirmar que nenhuma integração existe e que o tráfego sai pela internet pública.
Via Portal
- Navegue até o App Service
app-technova-web. - No menu lateral, clique em Settings > Networking.
- Na seção Outbound traffic, observe que VNet integration exibe Not configured.
- Na seção Inbound traffic, observe as opções de Access restriction e Private endpoints.
- Anote o endereço IP de saída exibido em Outbound addresses. Este é o IP usado quando o App Service se comunica com recursos externos.
Via CLI
# Verificar IPs de saída atuais
az webapp show \
--name app-technova-web \
--resource-group rg-technova-lab \
--query "outboundIpAddresses" \
--output tsv
# Verificar que não há integração de VNet
az webapp vnet-integration list \
--name app-technova-web \
--resource-group rg-technova-lab \
--output table
O comando de listagem de integração VNet deve retornar uma lista vazia, confirmando que o App Service não está integrado a nenhuma VNet neste momento.
Tarefa 4.2 — Integrar o App Service à VNet
Agora você integrará o App Service à subnet snet-appservice da VNet vnet-technova-lab, permitindo que o tráfego de saída da aplicação seja roteado pela VNet.
Via Portal
- No App Service
app-technova-web, navegue até Settings > Networking. - Na seção Outbound traffic, clique em VNet integration.
- Clique em Add VNet.
- Selecione a VNet
vnet-technova-lab. - Selecione a subnet
snet-appservice. - Clique em OK.
- Aguarde a conclusão da integração. O status deve mudar para Connected.
Via CLI
# Integrar o App Service à VNet
az webapp vnet-integration add \
--name app-technova-web \
--resource-group rg-technova-lab \
--vnet vnet-technova-lab \
--subnet snet-appservice
# Verificar a integração
az webapp vnet-integration list \
--name app-technova-web \
--resource-group rg-technova-lab \
--output table
Após a integração, o tráfego de saída do App Service para endereços na faixa 10.0.0.0/16 será roteado pela VNet em vez de pela internet pública. Isso é essencial para acessar recursos como bancos de dados, Key Vaults ou outros serviços com Private Endpoints na mesma VNet.
Tarefa 4.3 — Configurar restrições de acesso de entrada
Para adicionar uma camada de segurança, você configurará regras de acesso que restringem quais IPs podem alcançar o App Service.
Via Portal
- No App Service
app-technova-web, navegue até Settings > Networking. - Na seção Inbound traffic, clique em Access restriction.
- Na aba Main site, observe a regra padrão Allow all.
- Clique em Add para criar uma regra.
- Configure a regra:
- Name:
allow-office-ip - Action: Allow
- Priority:
100 - Type: IPv4
- IP Address Block: insira seu IP público atual (pesquise "what is my IP" em um buscador e use o resultado no formato CIDR, ex:
203.0.113.50/32)
- Name:
- Clique em Add rule.
- Verifique que a regra padrão Unmatched rule é Deny. Se não for, altere para Deny.
- Clique em Save.
Via CLI
# Obter seu IP público (substitua pelo seu IP real)
MY_IP=$(curl -s ifconfig.me)
# Adicionar regra de permissão
az webapp config access-restriction add \
--name app-technova-web \
--resource-group rg-technova-lab \
--rule-name allow-office-ip \
--action Allow \
--ip-address "${MY_IP}/32" \
--priority 100
# Listar regras
az webapp config access-restriction show \
--name app-technova-web \
--resource-group rg-technova-lab \
--output table
Com esta configuração, apenas requisições originadas do IP especificado terão acesso ao App Service. Todas as outras requisições serão bloqueadas pela regra padrão de deny.
Tarefa 4.4 — Testar bloqueio de acesso e reverter
Para validar que a restrição de acesso funciona, você testará o acesso de um IP diferente e depois removerá a restrição para evitar impacto nas próximas fases.
Via Portal
- Acesse
https://app-technova-web.azurewebsites.netde um dispositivo ou rede diferente (ex: rede móvel do celular com Wi-Fi desligado). Alternativamente, use um serviço de teste de URL online. - Confirme que o acesso é bloqueado com um erro 403 Forbidden.
- Acesse a mesma URL do IP permitido (sua rede atual) e confirme que retorna 200 OK.
- Após a validação, retorne a Access restriction.
- Remova a regra
allow-office-ipclicando no ícone de exclusão. - Altere a regra Unmatched rule de volta para Allow.
- Clique em Save.
Via CLI
# Testar acesso (deve funcionar do seu IP)
curl -s -o /dev/null -w "%{http_code}" https://app-technova-web.azurewebsites.net
# Remover a regra de restrição
az webapp config access-restriction remove \
--name app-technova-web \
--resource-group rg-technova-lab \
--rule-name allow-office-ip
# Confirmar que o acesso público está restaurado
curl -s -o /dev/null -w "%{http_code}" https://app-technova-web.azurewebsites.net
A remoção da restrição restaura o acesso público. Em produção, as regras de acesso seriam mantidas como parte da estratégia de segurança, mas neste laboratório removemos para não interferir nas validações das próximas fases.
Fase 5 — Deployment Slots e Estratégia de Implantação
Nesta fase final você configurará deployment slots no App Service app-technova-web para habilitar uma estratégia de implantação com staging e zero downtime swap. Todos os recursos das fases anteriores (App Service, plano, rede, certificados) serão utilizados como base.
Objetivo coberto: Configure deployment slots for an App Service.
Tarefa 5.1 — Verificar que o plano suporta deployment slots
Antes de criar um slot, confirme que o App Service Plan plan-technova-prod está em um tier que suporta deployment slots. O tier Standard permite até 5 slots.
Via Portal
- Navegue até o App Service
app-technova-web. - No menu lateral, clique em Deployment > Deployment slots.
- Observe a mensagem indicando o número de slots disponíveis (o tier S1 permite até 5 slots).
- Confirme que apenas o slot Production existe neste momento.
Via CLI
# Listar slots existentes
az webapp deployment slot list \
--name app-technova-web \
--resource-group rg-technova-lab \
--output table
# Se o comando retornar lista vazia, apenas o slot de produção existe
O resultado deve mostrar que nenhum slot adicional foi criado, confirmando que o App Service possui apenas o slot de produção padrão.
Tarefa 5.2 — Criar o slot de staging
A TechNova utiliza uma estratégia de deployment blue-green, onde novas versões são implantadas no slot de staging, validadas e depois trocadas para produção. Crie o slot de staging.
Via Portal
- No App Service
app-technova-web, acesse Deployment > Deployment slots. - Clique em Add Slot.
- Preencha Name com
staging. - Em Clone settings from, selecione
app-technova-webpara copiar as configurações do slot de produção. - Clique em Add.
- Após a criação, o slot aparecerá na lista como
app-technova-web/staging. - Clique no slot
stagingpara acessá-lo. Observe que ele possui uma URL própria:https://app-technova-web-staging.azurewebsites.net. - Acesse essa URL no navegador e confirme que está acessível.
Via CLI
# Criar slot de staging clonando configurações da produção
az webapp deployment slot create \
--name app-technova-web \
--resource-group rg-technova-lab \
--slot staging \
--configuration-source app-technova-web
# Verificar a URL do slot
az webapp show \
--name app-technova-web \
--resource-group rg-technova-lab \
--slot staging \
--query "defaultHostName" \
--output tsv
# Testar acesso ao slot
curl -s -o /dev/null -w "%{http_code}" https://app-technova-web-staging.azurewebsites.net
O slot de staging agora existe como uma instância independente do App Service, com sua própria URL e configurações. Ele compartilha o mesmo App Service Plan plan-technova-prod.
Tarefa 5.3 — Configurar slot settings (configurações fixas ao slot)
Em muitos cenários, certas configurações devem permanecer fixas em um slot e não acompanhar a aplicação durante um swap. Por exemplo, a connection string do banco de staging não deve ir para produção. Configure uma app setting como slot setting.
Via Portal
- Acesse o App Service
app-technova-web(slot de produção). - Navegue até Settings > Environment variables.
- Clique em Add na aba App settings.
- Preencha Name com
ENVIRONMENTe Value comproduction. - Marque a caixa Deployment slot setting (isso fixa o valor ao slot).
- Clique em Apply e depois em Save.
- Agora, acesse o slot staging (no painel de Deployment slots, clique em
staging). - Navegue até Settings > Environment variables.
- Clique em Add.
- Preencha Name com
ENVIRONMENTe Value comstaging. - Marque a caixa Deployment slot setting.
- Clique em Apply e depois em Save.
Via CLI
# Configurar app setting no slot de produção (fixo ao slot)
az webapp config appsettings set \
--name app-technova-web \
--resource-group rg-technova-lab \
--settings ENVIRONMENT=production \
--slot-settings ENVIRONMENT
# Configurar app setting no slot de staging (fixo ao slot)
az webapp config appsettings set \
--name app-technova-web \
--resource-group rg-technova-lab \
--slot staging \
--settings ENVIRONMENT=staging \
--slot-settings ENVIRONMENT
A marcação como Deployment slot setting garante que durante um swap, a variável ENVIRONMENT permanece com o valor production no slot de produção e staging no slot de staging, independentemente do código que está em cada slot.
Tarefa 5.4 — Executar swap e validar a troca
Agora execute o swap entre os slots de staging e produção. Como ambos os slots possuem o mesmo código base neste momento, o foco é validar que o processo de swap funciona e que as slot settings permanecem fixas.
Via Portal
- No App Service
app-technova-web, acesse Deployment > Deployment slots. - Clique em Swap.
- Em Source, confirme staging.
- Em Target, confirme production.
- Revise a seção Config Changes Preview. Observe que a variável
ENVIRONMENTé listada como Slot setting e não será trocada. - Clique em Swap para executar.
- Aguarde a conclusão. O swap executa um warm-up do slot de staging antes de redirecionar o tráfego.
- Após a conclusão, acesse
https://app-technova-web.azurewebsites.nete confirme que está acessível.
Via CLI
# Executar swap
az webapp deployment slot swap \
--name app-technova-web \
--resource-group rg-technova-lab \
--slot staging \
--target-slot production
# Verificar que as slot settings permaneceram fixas
az webapp config appsettings list \
--name app-technova-web \
--resource-group rg-technova-lab \
--query "[?name=='ENVIRONMENT'].{Name:name, Value:value, SlotSetting:slotSetting}" \
--output table
az webapp config appsettings list \
--name app-technova-web \
--resource-group rg-technova-lab \
--slot staging \
--query "[?name=='ENVIRONMENT'].{Name:name, Value:value, SlotSetting:slotSetting}" \
--output table
O resultado deve mostrar que após o swap, o slot de produção ainda possui ENVIRONMENT=production e o slot de staging ainda possui ENVIRONMENT=staging. Isso confirma que as slot settings funcionam como esperado e que o swap foi executado com sucesso.
Tarefa 5.5 — Simular rollback via swap reverso
Suponha que a nova versão implantada em produção apresentou um bug crítico. O rollback é executado simplesmente repetindo o swap, pois o código anterior agora está no slot de staging.
Via Portal
- No App Service
app-technova-web, acesse Deployment > Deployment slots. - Clique em Swap novamente.
- Confirme Source como
staginge Target comoproduction. - Clique em Swap.
- Após a conclusão, acesse a URL de produção e confirme a operação normal.
Via CLI
# Rollback via swap reverso
az webapp deployment slot swap \
--name app-technova-web \
--resource-group rg-technova-lab \
--slot staging \
--target-slot production
# Confirmar que a aplicação está funcional
curl -s -o /dev/null -w "%{http_code}" https://app-technova-web.azurewebsites.net
O swap reverso restaura o estado anterior de produção em segundos, sem necessidade de re-deploy. Esta é uma das maiores vantagens da estratégia de deployment slots: o rollback é instantâneo e não requer pipeline de CI/CD.
Validação Final
Verifique os seguintes critérios para confirmar que todas as fases do laboratório foram executadas corretamente:
Critério 1: App Service Plan e App Service operacionais
Navegue até o App Service Plan plan-technova-prod e confirme que o tier é Standard S1 e que o App Service app-technova-web está listado em Apps. No portal, acesse App Service plans > plan-technova-prod > Apps. Alternativamente, execute az appservice plan show --name plan-technova-prod --resource-group rg-technova-lab --query "sku.name" e confirme o retorno S1.
Critério 2: Autoscale configurado com regras balanceadas
Navegue até Monitor > Autoscale e selecione autoscale-technova. Confirme que existem duas regras: uma de scale out (CPU > 70%) e uma de scale in (CPU < 30%). Os limites devem ser min=1, max=5, default=2. Alternativamente, execute az monitor autoscale show --name autoscale-technova --resource-group rg-technova-lab --query "profiles[0].rules[].metricTrigger.threshold" e confirme os valores 70 e 30.
Critério 3: TLS 1.2 mínimo e HTTPS Only ativos (validação comportamental)
Execute curl -v --tls-max 1.1 https://app-technova-web.azurewebsites.net 2>&1 e confirme que a conexão falha com erro de handshake SSL. Em seguida, execute curl -v --tlsv1.2 https://app-technova-web.azurewebsites.net 2>&1 e confirme que retorna HTTP 200. Acesse http://app-technova-web.azurewebsites.net no navegador e confirme o redirecionamento automático para HTTPS.
Critério 4: Backup configurado e executado com sucesso
No App Service app-technova-web, acesse Backups e confirme que existe ao menos um backup com status Succeeded. Navegue até sttechnovalab > Containers > appbackups e confirme que os arquivos de backup (.zip e .xml) estão presentes.
Critério 5: Deployment slot staging funcional com slot settings fixas
Execute az webapp config appsettings list --name app-technova-web --resource-group rg-technova-lab --query "[?name=='ENVIRONMENT'].value" --output tsv e confirme que retorna production. Execute o mesmo comando com --slot staging e confirme que retorna staging. Acesse https://app-technova-web-staging.azurewebsites.net no navegador e confirme que o slot de staging está acessível.
Cleanup do Ambiente
Remova todos os recursos criados durante o laboratório para evitar cobranças desnecessárias. A exclusão do Resource Group remove automaticamente todos os recursos filhos.
Via Portal
- No portal Azure, pesquise Resource groups.
- Selecione
rg-technova-lab. - Clique em Delete resource group.
- No campo de confirmação, digite
rg-technova-lab. - Clique em Delete.
- Aguarde a conclusão da exclusão. O processo pode levar alguns minutos.
- Após a conclusão, pesquise novamente Resource groups e confirme que
rg-technova-labnão aparece mais na lista.
Via CLI
# Excluir o Resource Group e todos os recursos filhos
az group delete \
--name rg-technova-lab \
--yes \
--no-wait
# Verificar a exclusão (aguarde alguns minutos)
az group show \
--name rg-technova-lab 2>&1 || echo "Resource Group excluído com sucesso."
O parâmetro --no-wait libera o terminal imediatamente enquanto a exclusão ocorre em segundo plano. Para confirmar a conclusão, execute o comando az group show após alguns minutos. Se retornar erro indicando que o recurso não foi encontrado, a exclusão foi concluída com sucesso.