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
- 2. Anatomia dos Custos Azure
- 3. Reserved Instances vs Pay-as-you-Go
- 4. Spot VMs: Poupar 90% em Workloads Interrompíveis
- 5. Right-Sizing de VMs
- 6. Optimizar Storage e Discos
- 7. Optimizar Custos de Networking
- 8. Azure Advisor: Recomendações Automáticas
- 9. Tags e Governance
- 10. Budgets e Alertas de Custo
- 11. PowerShell para Gestão de Custos
- 12. Cenário Prático PME
- 13. Boas Práticas FinOps
- 14. Checklist de Optimização
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
- Azure VPN Gateway Site-to-Site
- Azure File Sync: Sincronizar Ficheiros
- Windows Admin Center: Gestão de Servidores
- Grafana para PMEs: Dashboards com Prometheus
- Zero Trust para PMEs
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.
