Tags: Azure · IaaS · Custos · FinOps · VM · Reserved Instances · Spot · Azure Advisor

Por Duarte Spínola · 4 de Julho de 2026

Azure IaaS: Optimizar Custos Cloud para PMEs em 2026

O Azure IaaS (Infrastructure as a Service) oferece flexibilidade total, mas sem disciplina financeira a factura cloud pode explodir. Este guia prático mostra como optimizar custos Azure para PMEs: Reserved Instances, Spot VMs, Azure Advisor, tags, budgets e práticas FinOps. Baseado na documentação oficial Azure.

Para complementar, consulta os artigos sobre Azure VPN Gateway, Azure File Sync, Windows Admin Center, Grafana para PMEs e Zero Trust para PMEs.

Conteúdos

1. FinOps: Cultura Financeira na Cloud

FinOps (Financial Operations) é a prática de gerir custos cloud com a mesma disciplina financeira que se aplica a infraestrutura on-premise. Na cloud, cada minuto de execução tem custo — sem visibilidade e controlo, a factura cresce silenciosamente.

Os três pilares do FinOps:

  • Visibilidade — saber exactamente quanto se gasta, onde e porquê
  • Optimização — ajustar recursos ao consumo real, eliminar desperdício
  • Governança — policies, tags e approval workflows para controlar gastos

💡 Dica: A regra de ouro do FinOps: ninguém deve poder aprovisionar recursos em produção sem uma tag de cost center. Sem tags, é impossível atribuir custos a departamentos ou projectos.

2. Anatomia dos Custos Azure

Serviço Modelo de Cobrança Onde Poupar
VMs Por segundo (Pay-as-you-go ou Reserved) Reserved Instances, Spot, right-sizing, auto-shutdown
Storage (Discos) Por mês, por GB provisionado Mudar tier (Premium→Standard), discos não anexados
Storage (Blob) Por GB + operações + egress Lifecycle policies, tier Hot→Cool→Archive
Networking Por GB egress + IPs + Load Balancer Manter tráfego dentro de região, IPs não usados
SQL Database Por hora (DTU ou vCore) Reserved capacity, serverless tier, right-tier
Bandwidth Primeiros 100GB/mês grátis, depois por GB CDN, caching, compressão

3. Reserved Instances vs Pay-as-you-Go

As Reserved Instances (RI) permitem reservar capacidade por 1 ou 3 anos, obtendo descontos significativos em comparação com Pay-as-you-Go.

Opção Desconto Compromisso Ideal para
Pay-as-you-Go 0% Nenhum Dev/test, cargas variáveis
RI 1 ano ~38% 1 ano Produção estável
RI 3 anos ~57% 3 anos Produção muito estável
Spot VM ~90% Pode ser interrompida Batch, dev/test, CI/CD
# Ver recomendações de Reserved Instances via Azure CLI
az consumption reservation list

# Comprar RI via portal:
# 1. Azure Portal > Reservations > Add
# 2. Seleccionar:
#    - Product: Virtual Machine
#    - Region: West Europe
#    - VM size: Standard_D4s_v5
#    - Term: 1 year ou 3 years
#    - Billing scope: Subscription
#    - Quantity: 2 (número de VMs a reservar)

# Ver RIs existentes
az reservation order list --output table

# Trocar ou cancelar RI (com penalidades)
# Reservations > Select RI > Exchange / Refund

💡 Dica: A RI aplica-se automaticamente a VMs que correspondam ao tamanho e região reservados — não é necessário atribuir manualmente. Se tiveres 2 VMs D4s_v5 em West Europe e comprares uma RI para D4s_v5 em West Europe, o desconto aplica-se automaticamente.

4. Spot VMs: Poupar 90% em Workloads Interrompíveis

As Spot VMs usam capacidade não usada do Azure. São até 90% mais baratas, mas podem ser interrompidas com 30 segundos de aviso.

# Criar Spot VM via Azure CLI
az vm create \
  --resource-group rg-empresa \
  --name vm-batch-01 \
  --image UbuntuLTS \
  --size Standard_D4s_v5 \
  --priority Spot \
  --eviction-policy Deallocate \
  --max-price 0.02 \
  --no-wait

# Verificar Spot VM
az vm show --resource-group rg-empresa --name vm-batch-01 --query "{priority:priority, evictionPolicy:evictionPolicy, maxPrice:billingProfile.maxPrice}" -o table

# Workloads adequadas para Spot:
# - CI/CD pipelines (GitHub Actions self-hosted runners)
# - Batch processing (rendering, compilação, análise de dados)
# - Dev/test environments
# - Workers de processamento assíncrono
# - Réplicas secundárias de bases de dados

# Workloads NÃO adequadas:
# - Produção crítica
# - Bases de dados primárias
# - Servidores de aplicações com sessões persistentes
# - Qualquer workload que não tolere interrupção

5. Right-Sizing de VMs

O erro mais comum em cloud: aprovisionar VMs demasiado grandes. O Azure Advisor recomenda right-sizing com base em métricas de CPU/memória dos últimos 7-30 dias.

# Ver métricas de utilização de uma VM
az monitor metrics list \
  --resource rg-empresa/vm-web01 \
  --metric "Percentage CPU" \
  --interval PT1H \
  --aggregation Average \
  --output table

# Ver recomendações do Azure Advisor (right-sizing)
az advisor recommendation list \
  --category Cost \
  --query "[?impactedField=='Microsoft.Compute/virtualMachines']" \
  --output table

# Redimensionar VM (requer paragem primeiro)
az vm deallocate --resource-group rg-empresa --name vm-web01
az vm resize --resource-group rg-empresa --name vm-web01 --size Standard_B2s
az vm start --resource-group rg-empresa --name vm-web01

# Comparar preços de tamanhos
# B2s: 2 vCPU, 4GB RAM — ~30€/mês
# D2s_v5: 2 vCPU, 8GB RAM — ~70€/mês
# D4s_v5: 4 vCPU, 16GB RAM — ~140€/mês
Série Uso Custo/mês (estimado)
B-series Dev/test, web servers baixo tráfego ~10-50€
D-series Uso geral, produção ~70-280€
F-series Compute-intensive, gaming ~80-320€
E-series Memory-intensive, bases de dados ~100-500€

6. Optimizar Storage e Discos

# Listar discos não anexados (custo desperdiçado)
az disk list --query "[?diskState=='Unattached']" --output table

# Eliminar discos não anexados
az disk delete --ids $(az disk list --query "[?diskState=='Unattached'].id" -o tsv)

# Mudar tier de discos (Premium SSD -> Standard SSD)
az disk update --resource-group rg-empresa \
  --name disk-web01-data \
  --sku StandardSSD_LRS

# Ver discos e seus SKUs
az disk list --query "[].{name:name, sku:sku.name, sizeGB:diskSizeGb, state:diskState}" -o table

# Lifecycle policies para Blob Storage (mover para Cool/Archive)
az storage account management-policy create \
  --account-name staempresa \
  --resource-group rg-empresa \
  --policy @storage-lifecycle.json

# Exemplo storage-lifecycle.json:
# {
#   "rules": [
#     {
#       "name": "archive-old-logs",
#       "enabled": true,
#       "type": "Lifecycle",
#       "actions": {
#         "baseBlob": {
#           "tierToCool": { "daysAfterModificationGreaterThan": 30 },
#           "tierToArchive": { "daysAfterModificationGreaterThan": 90 },
#           "delete": { "daysAfterModificationGreaterThan": 365 }
#         }
#       }
#     }
#   ]
# }

7. Optimizar Custos de Networking

# Listar IPs públicos não usados
az network public-ip list --query "[?ipConfiguration==null]" -o table

# Eliminar IPs não usados
az network public-ip delete --ids $(az network public-ip list --query "[?ipConfiguration==null].id" -o tsv)

# Tráfego entre regiões tem custo — manter recursos na mesma região
# Ver custos de bandwidth
az consumption usage list --query "[?contains(meterCategory,'Networking')]" -o table

# Usar NAT Gateway em vez de Load Balancer + IPs públicos para SNAT
az network nat gateway create --resource-group rg-empresa --name nat-gw

# Application Gateway: usar WAF v2 apenas se necessário (mais caro)
# Application Gateway Standard é mais barato para routing simples

8. Azure Advisor: Recomendações Automáticas

O Azure Advisor analisa a subscrição e recomenda optimizações de custo, segurança, performance e fiabilidade.

# Ver todas as recomendações de custo
az advisor recommendation list --category Cost -o table

# Ver poupança potencial estimada
az advisor recommendation list --category Cost \
  --query "[].{name:shortDescription.problem, saving:extendedProperties.savingsAmount, currency:extendedProperties.savingsCurrency}" \
  -o table

# Tipos de recomendações de custo:
# - Right-size ou eliminar VMs subutilizadas
# - Comprar Reserved Instances para VMs consistentes
# - Eliminar discos não anexados
# - Mover Blob Storage para tier mais frio
# - Eliminar IPs públicos não usados
# - Migrar ExpressRoute para SKU mais adequado

9. Tags e Governance

# Policy: exigir tags em todos os recursos
az policy assignment create \
  --name "require-cost-center-tag" \
  --policy "require-tag" \
  --params '{"tagName":{"value":"CostCenter"}}' \
  --scope "/subscriptions/SUB_ID"

# Aplicar tags em massa
az resource tag --tags CostCenter=IT Environment=Production Owner=joao --ids $(az resource list --query "[].id" -o tsv)

# Ver custos por tag
az costmanagement query \
  --type ActualCost \
  --scope "subscriptions/SUB_ID" \
  --timeframe MonthToDate \
  --dimension "TagKey" \
  --query "[].{tag:TagKey, cost:Cost}" \
  -o table

# Tags recomendadas (mínimo):
# - CostCenter (departamento que paga)
# - Environment (Production/Staging/Dev)
# - Owner (responsável)
# - Project (nome do projeto)
# - ExpiryDate (data para revisão — formato YYYY-MM-DD)

10. Budgets e Alertas de Custo

# Criar budget mensal
az consumption budget create \
  --amount 500 \
  --category Cost \
  --time-grain Monthly \
  --start-date 2026-07-01 \
  --end-date 2027-06-30 \
  --resource-group rg-empresa \
  --notifications \
    'alerta-50%'='{"enabled":true,"operator":"GreaterThan","threshold":50,"contactEmails":["[email protected]"]}' \
    'alerta-90%'='{"enabled":true,"operator":"GreaterThan","threshold":90,"contactEmails":["[email protected]","[email protected]"]}' \
    'alerta-100%'='{"enabled":true,"operator":"GreaterThan","threshold":100,"contactEmails":["[email protected]","[email protected]","[email protected]"]}'

# Ver budgets
az consumption budget list -o table

# Ver custo actual do mês
az costmanagement query \
  --type ActualCost \
  --scope "subscriptions/SUB_ID" \
  --timeframe MonthToDate \
  --dimension Service \
  -o table

11. PowerShell para Gestão de Custos

# Conectar ao Azure
Connect-AzAccount

# Ver custo por serviço nos últimos 30 dias
Get-AzConsumptionUsageDetail -Top 100 |
  Group-Object -Property ServiceName |
  Select-Object Name, @{N="TotalCost";E={($_.Group | Measure-Object -Property PretaxCost -Sum).Sum}} |
  Sort-Object TotalCost -Descending |
  Format-Table -AutoSize

# Ver recomendações do Advisor
Get-AzAdvisorRecommendation -Category Cost |
  Select-Object ResourceName, ShortDescription, Impact, @{N="Savings";E={$_.ExtendedProperties.savingsAmount}} |
  Format-Table -AutoSize

# Auto-shutdown de VMs de dev/test
Set-AzVmAutoShutdown -ResourceGroupName rg-dev -VMName vm-dev01 -Time "2000" -TimeZone "GMT Standard Time"

# Eliminar VMs de dev à sexta-feira
$schedule = New-AzAutomationSchedule `
  -ResourceGroupName rg-automation `
  -AutomationAccountName aa-empresa `
  -Name "shutdown-dev-vms-friday" `
  -StartTime (Get-Date) `
  -Frequency Week `
  -DayOfWeek Friday `
  -TimeOfDay "20:00"

# Ver todas as VMs e estado de deallocation
Get-AzVM -Status | Select-Object Name, PowerState, ResourceGroupName | Format-Table

12. Cenário Prático PME

Para uma PME com 5 VMs em Azure (2 produção + 2 dev + 1 SQL):

VM Tamanho Opção Custo/mês
vm-web01 (prod) D2s_v5 RI 1 ano ~44€
vm-web02 (prod) D2s_v5 RI 1 ano ~44€
vm-dev01 B2s Spot + auto-shutdown 20h ~5€
vm-dev02 B2s Spot + auto-shutdown 20h ~5€
vm-sql01 (prod) E4s_v5 RI 1 ano + SQL AHUB ~120€
Total ~218€/mês

Sem optimização (todas Pay-as-you-Go, sem auto-shutdown): ~620€/mês. Poupança: ~65%.

13. Boas Práticas FinOps

  • Tags obrigatórias — nenhum recurso sem tag CostCenter + Environment
  • Auto-shutdown para VMs de dev/test fora de horário laboral
  • Reserved Instances para VMs de produção que correm 24/7
  • Spot VMs para dev/test e workloads interrompíveis
  • B2s ou B-series para VMs de dev — são as mais baratas
  • Eliminar discos não anexados — revisão mensal
  • Eliminar IPs públicos não usados — revisão mensal
  • Review mensal do Azure Advisor — implementar recomendações de custo
  • Budget com alertas — pelo menos 50%, 90% e 100%
  • Storage lifecycle policies — mover blobs antigos para Cool/Archive
  • Right-sizing trimestral — verificar se VMs estão subutilizadas
  • Azure Hybrid Benefit — usar licenças Windows Server existentes

14. Checklist de Optimização

  • ☐ Aplicar tags (CostCenter, Environment, Owner) em todos os recursos
  • ☐ Criar Azure Policy que exige tags em novos recursos
  • ☐ Configurar budget mensal com alertas (50%, 90%, 100%)
  • ☐ Rever recomendações do Azure Advisor (semanal)
  • ☐ Comprar Reserved Instances para VMs de produção estáveis
  • ☐ Migrar VMs de dev/test para Spot ou B-series
  • ☐ Configurar auto-shutdown para VMs de dev (20h)
  • ☐ Eliminar discos não anexados
  • ☐ Eliminar IPs públicos não usados
  • ☐ Configurar lifecycle policies para Blob Storage
  • ☐ Verificar Azure Hybrid Benefit para licenças Windows/SQL
  • ☐ Mover backups para Cool/Archive tier
  • ☐ Manter recursos na mesma região (evitar cross-region bandwidth)
  • ☐ Review trimestral de right-sizing
  • ☐ Documentar topologia e custos esperados por recurso

Artigos Relacionados

Baseado na documentação oficial Azure sobre cost optimization e FinOps. Preços estimados para região West Europe, Julho 2026. Licença: CC BY-SA 4.0.

← Voltar ao Índice

Este artigo foi útil?

Duarte Spínola

Deixe um Comentário