Pular para o conteúdo principal

Fundamentação Teórica: Create a Virtual Machine


1. Intuição Inicial​

Imagine que você precisa de um servidor para rodar uma aplicação. No mundo físico, você compraria hardware, instalaria o sistema operacional, configuraria a rede e esperaria dias ou semanas até tudo estar pronto. No Azure, você descreve o servidor que quer (quantos núcleos de CPU, quanta memória, qual sistema operacional, qual região do mundo) e em minutos ele está disponível.

Uma Virtual Machine (VM) no Azure é um computador completo rodando em hardware compartilhado da Microsoft, isolado de outros clientes por tecnologia de virtualização. Do ponto de vista do sistema operacional e das aplicações rodando nela, a VM parece um servidor físico dedicado. Você tem controle total: instala softwares, configura serviços, acessa o terminal.

A diferença fundamental em relação a serviços gerenciados como App Service ou Azure Functions é que com VMs você gerencia o sistema operacional: você é responsável por patches, atualizações de segurança e configuração interna.


2. Contexto​

2.1 VMs no modelo IaaS​

Azure oferece diferentes níveis de abstração. VMs estão no nível IaaS (Infrastructure as a Service): você gerencia a partir do sistema operacional para cima; a Microsoft gerencia o hardware físico, a rede física e o hypervisor.

100%
Scroll para zoom · Arraste para mover · 📱 Pinch para zoom no celular

2.2 Casos de uso que exigem VMs​

VMs são a escolha certa quando:

  • A aplicação não foi desenvolvida para nuvem e não pode ser facilmente refatorada
  • Você precisa de controle total sobre o sistema operacional (patches específicos, configurações de kernel)
  • O software requer instalação tradicional (agentes, middleware legado)
  • Você está migrando workloads on-premises via lift-and-shift
  • O workload requer hardware específico (GPU, HPC)

3. Construção dos Conceitos​

3.1 Os recursos criados junto com a VM​

Quando você cria uma VM no Azure, o portal cria automaticamente um conjunto de recursos relacionados. Entender cada um é essencial para gerenciar VMs adequadamente:

Virtual Machine: O recurso principal. Representa a configuração de compute (CPU, memória, tamanho).

Disk (OS Disk): Todo VM tem pelo menos um disco gerenciado que contém o sistema operacional. Criado automaticamente.

Network Interface (NIC): A "placa de rede virtual" da VM. Conecta a VM à VNet. Tem um IP privado e opcionalmente um IP público.

Virtual Network (VNet) e Subnet: A rede privada onde a VM vive. Pode ser criada automaticamente ou usar uma VNet existente.

Network Security Group (NSG): Firewall virtual associado à NIC ou subnet. Controla o tráfego de entrada e saída.

Public IP Address (opcional): IP público para acesso direto via internet. Pode ser estático ou dinâmico.

100%
Scroll para zoom · Arraste para mover · 📱 Pinch para zoom no celular

3.2 Família e tamanho da VM​

O tamanho da VM define CPU, memória, disco temporário e capacidade de rede. Os tamanhos são organizados em séries (famílias), cada uma otimizada para um tipo de workload:

FamíliaPrefixoOtimizada para
General PurposeB, D, Dv5, Dav5Workloads equilibrados (web, dev, test)
Compute OptimizedF, FxAlta relação CPU/memória (processamento de dados)
Memory OptimizedE, Ev5, MBancos de dados em memória, SAP HANA
Storage OptimizedLsv3Bancos de dados com alto I/O de disco
GPUNC, ND, NVMachine Learning, renderização 3D
High Performance ComputeHSimulações científicas, CFD
BurstableBWorkloads com uso variável de CPU

A nomenclatura de tamanho segue um padrão:

Standard_D4s_v5
│ │ │
│ │ └── versão (v5 = quinta geração)
│ └───── s = suporte a Premium SSD
└─────── número de vCPUs

3.3 Imagens: o sistema operacional​

Uma imagem é o template de disco usado para criar a VM. O Azure Marketplace oferece milhares de imagens, incluindo:

Imagens de primeira parte (Microsoft):

  • Windows Server 2022, 2019, 2016
  • Windows 11 Enterprise (para VDI)

Imagens de terceiros (certificadas):

  • Ubuntu 22.04, 20.04, 18.04
  • Red Hat Enterprise Linux 8, 9
  • CentOS, Debian, SUSE
  • SQL Server on Windows/Linux
  • Oracle Database

Imagens customizadas: Você pode criar sua própria imagem a partir de uma VM configurada (via Azure Compute Gallery).


3.4 Discos: tipos e performance​

O Azure oferece diferentes tipos de discos gerenciados com diferentes características de performance e custo:

TipoUsoIOPS máxLatênciaCusto
Ultra DiskBancos de dados críticosAté 400.000Sub-milissegundoMais alto
Premium SSD v2Workloads I/O intensivosAté 80.000~1msAlto
Premium SSDProdução geralAté 20.000~1-2msMédio-alto
Standard SSDServidores web, devAté 6.000~2-10msMédio
Standard HDDBackup, arquivosAté 2.000~5-50msBaixo

Temporary Disk: Além dos discos gerenciados, VMs têm um disco temporário (D: no Windows, /dev/sdb no Linux) que não persiste após desalocação ou redimensionamento. Nunca armazene dados permanentes nele.


3.5 Opções de disponibilidade​

A disponibilidade de VMs depende de como você as organiza. O Azure oferece três mecanismos:

Availability Set:

  • Distribui VMs entre Fault Domains (racks físicos diferentes) e Update Domains (grupos de atualização sequencial)
  • Protege contra falhas de hardware e manutenções do Azure
  • SLA de 99,95% para duas ou mais VMs no mesmo Availability Set

Availability Zone:

  • Distribui VMs entre datacenters fisicamente separados dentro de uma região
  • Protege contra falha de datacenter inteiro
  • SLA de 99,99% para duas ou mais VMs em zonas diferentes

Virtual Machine Scale Sets:

  • Criação e gerenciamento de múltiplas VMs idênticas (escala horizontal)
  • Auto-scaling baseado em métricas
  • Abordado em objetivos separados do AZ-104

VM isolada (nenhuma opção):

  • SLA de 99,9% (apenas para VMs com Premium SSD)
  • Adequada apenas para desenvolvimento e teste

3.6 Opções de licenciamento e custo​

Pay-as-you-go: Pague por hora de uso. Mais caro por hora, mas sem compromisso.

Reserved Instances (RI): Compromisso de 1 ou 3 anos em troca de desconto de até 72%. Para workloads previsíveis.

Azure Hybrid Benefit: Se você tem licenças Windows Server ou SQL Server com Software Assurance ativas, pode trazer essas licenças para o Azure, economizando o custo da licença no preço da VM.

Spot VMs: Capacidade excedente do Azure a preços muito baixos (até 90% de desconto), mas a VM pode ser removida com aviso de 30 segundos quando o Azure precisar da capacidade. Adequada para workloads tolerantes a interrupção (processamento batch, rendering).


4. Visão Estrutural​

100%
Scroll para zoom · Arraste para mover · 📱 Pinch para zoom no celular

Comportamento crítico: Parar a VM pelo sistema operacional ("shutdown" dentro do SO) coloca a VM em estado Stopped, mas não desaloca. Você continua pagando pela alocação de compute. Para parar o billing de compute, use Deallocate pelo portal, CLI ou PowerShell.


5. Funcionamento na Prática​

5.1 Informações necessárias para criar uma VM​

Antes de criar, você precisa decidir:

DecisãoOpçõesImpacto
Regiãoeastus, westeurope, brazilsouth, etc.Latência, conformidade de dados, disponibilidade de tamanhos
Sistema operacionalWindows Server, Linux (Ubuntu, RHEL, etc.)Custo de licença, gestão
Tamanho (SKU)Standard_D2s_v5, Standard_B2ms, etc.Performance e custo
AutenticaçãoSenha ou chave SSH (Linux)Segurança
VNet/SubnetNova ou existenteConectividade
IP públicoNenhum, dinâmico ou estáticoAcesso remoto
Disco OSPremium SSD, Standard SSD, Standard HDDPerformance e custo
DisponibilidadeZona, Availability Set, nenhumaResiliência

5.2 Cloud-init e Custom Script Extension​

Para configurar a VM automaticamente durante a criação sem interação manual, o Azure suporta:

cloud-init (Linux): Script YAML ou bash executado na primeira inicialização. Ideal para instalar pacotes, configurar serviços e executar comandos.

#cloud-config
package_upgrade: true
packages:
- nginx
- docker.io
runcmd:
- systemctl enable nginx
- systemctl start nginx

Custom Script Extension (Windows e Linux): Script executado após a VM estar pronta. Pode ser PowerShell (Windows) ou bash (Linux). Pode ser referenciado de um Storage Account ou fornecido inline.


6. Formas de Implementação​

6.1 Portal Azure​

Quando usar: Criação única, aprendizado, quando exploração visual das opções é necessária.

No portal: Virtual Machines > + Create > Azure Virtual Machine

O portal guia por abas: Basics, Disks, Networking, Management, Monitoring, Advanced, Tags.

Vantagens: Visualização imediata de todos os parâmetros, validação em tempo real, opção de ver o template ARM gerado.

Limitação: Não reproduzível de forma consistente; lento para múltiplas VMs.


6.2 Azure CLI​

Criação básica de VM Linux:

az vm create \
--resource-group myRG \
--name myLinuxVM \
--image Ubuntu2204 \
--size Standard_D2s_v5 \
--location eastus \
--admin-username azureuser \
--generate-ssh-keys \
--vnet-name myVNet \
--subnet mySubnet \
--public-ip-sku Standard \
--nsg-rule SSH

Criação de VM Windows:

az vm create \
--resource-group myRG \
--name myWindowsVM \
--image Win2022Datacenter \
--size Standard_D4s_v5 \
--location eastus \
--admin-username adminuser \
--admin-password "MySecureP@ss123!" \
--nsg-rule RDP \
--public-ip-sku Standard

Criação com Availability Zone:

az vm create \
--resource-group myRG \
--name myVM-Zone1 \
--image Ubuntu2204 \
--size Standard_D2s_v5 \
--zone 1 \
--admin-username azureuser \
--generate-ssh-keys

Criação com cloud-init:

az vm create \
--resource-group myRG \
--name myWebServer \
--image Ubuntu2204 \
--size Standard_D2s_v5 \
--admin-username azureuser \
--generate-ssh-keys \
--custom-data @cloud-init.yaml

Operações de ciclo de vida:

# Parar e desalocar (para billing de compute)
az vm deallocate --resource-group myRG --name myVM

# Iniciar
az vm start --resource-group myRG --name myVM

# Reiniciar
az vm restart --resource-group myRG --name myVM

# Redimensionar (mudar SKU)
az vm resize --resource-group myRG --name myVM --size Standard_D4s_v5

# Ver estado atual
az vm show --resource-group myRG --name myVM --show-details --query powerState

6.3 Azure PowerShell​

# Criar VM completa
$vmConfig = New-AzVMConfig `
-VMName "myVM" `
-VMSize "Standard_D2s_v5"

# Configurar OS
$vmConfig = Set-AzVMOperatingSystem `
-VM $vmConfig `
-Linux `
-ComputerName "myVM" `
-Credential (Get-Credential)

# Especificar imagem
$vmConfig = Set-AzVMSourceImage `
-VM $vmConfig `
-PublisherName "Canonical" `
-Offer "0001-com-ubuntu-server-jammy" `
-Skus "22_04-lts-gen2" `
-Version "latest"

# Adicionar NIC
$nic = Get-AzNetworkInterface -Name "myNIC" -ResourceGroupName "myRG"
$vmConfig = Add-AzVMNetworkInterface -VM $vmConfig -Id $nic.Id

# Criar a VM
New-AzVM `
-ResourceGroupName "myRG" `
-Location "eastus" `
-VM $vmConfig

6.4 Bicep​

// VM Linux com todos os componentes
resource vm 'Microsoft.Compute/virtualMachines@2023-07-01' = {
name: 'myLinuxVM'
location: location
properties: {
hardwareProfile: {
vmSize: 'Standard_D2s_v5'
}
storageProfile: {
imageReference: {
publisher: 'Canonical'
offer: '0001-com-ubuntu-server-jammy'
sku: '22_04-lts-gen2'
version: 'latest'
}
osDisk: {
createOption: 'FromImage'
managedDisk: {
storageAccountType: 'Premium_LRS'
}
deleteOption: 'Delete'
}
}
osProfile: {
computerName: 'myLinuxVM'
adminUsername: 'azureuser'
linuxConfiguration: {
disablePasswordAuthentication: true
ssh: {
publicKeys: [
{
path: '/home/azureuser/.ssh/authorized_keys'
keyData: sshPublicKey
}
]
}
}
}
networkProfile: {
networkInterfaces: [
{
id: nic.id
properties: {
deleteOption: 'Delete'
}
}
]
}
availabilitySet: {
id: availabilitySet.id
}
}
zones: ['1']
}

deleteOption: A propriedade deleteOption: 'Delete' nos discos e NICs garante que quando a VM for deletada, os recursos associados também são deletados automaticamente. Sem isso, discos e NICs "órfãos" continuam existindo e sendo cobrados.


7. Controle e Segurança​

7.1 Autenticação: SSH Keys vs Senha​

Para VMs Linux: Use sempre chaves SSH em produção. Senhas são mais vulneráveis a ataques de força bruta.

# Gerar par de chaves SSH localmente
ssh-keygen -t rsa -b 4096 -f ~/.ssh/myVM_key

# A chave pública vai para a VM; a privada fica na máquina local
# Conectar via SSH
ssh -i ~/.ssh/myVM_key azureuser@<ip-publico>

Para VMs Windows: Use senhas fortes com:

  • Mínimo 12 caracteres
  • Maiúsculas, minúsculas, números e símbolos
  • Não use senhas comuns

Azure Key Vault: Armazene chaves SSH e senhas de administrador no Azure Key Vault. Evite armazená-las em código ou repositórios.


7.2 Permissões RBAC para VMs​

RolePermissõesUso
Virtual Machine ContributorGerenciar VMs mas não VNets e contas de armazenamentoAdministradores de compute
Virtual Machine Administrator LoginLogin na VM como admin via Azure ADAcesso privilegiado
Virtual Machine User LoginLogin na VM como usuário padrão via Azure ADAcesso de usuário
ReaderVisualizar configuraçõesMonitoramento

Azure AD Login para VMs: Com a extensão AADSSHLoginForLinux ou AADLoginForWindows, usuários podem fazer login na VM com suas credenciais Azure AD, sem gerenciar usuários locais.


7.3 JIT (Just-in-Time) VM Access​

Microsoft Defender for Cloud oferece JIT: portas de gerenciamento (22, 3389) ficam fechadas por padrão e são abertas temporariamente apenas quando solicitado, para o IP específico do solicitante, pelo tempo determinado.

# Habilitar JIT via CLI
az security jit-policy create \
--resource-group myRG \
--vm-ids <vm-resource-id> \
--name "default" \
--ports '[{"number":22,"protocol":"TCP","allowedSourceAddressPrefix":"*","maxRequestAccessDuration":"PT3H"}]'

8. Tomada de Decisão​

8.1 Qual tamanho de VM escolher​

WorkloadFamília recomendadaExemplo
Servidor web, dev/testGeneral PurposeStandard_D2s_v5
Servidor de banco de dadosMemory OptimizedStandard_E4s_v5
Processamento de dados, analyticsCompute OptimizedStandard_F4s_v2
Banco de dados com alto I/OStorage OptimizedStandard_L8s_v3
Treinamento de MLGPUStandard_NC6s_v3
Cargas variáveis (dev, CI/CD)BurstableStandard_B2ms

8.2 Qual tipo de disco escolher​

SituaçãoTipo de discoMotivo
Banco de dados de produçãoPremium SSD v2 ou Ultra DiskIOPS alto, latência mínima
Servidor web de produçãoPremium SSDBoa performance, SLA adequado
Servidor de desenvolvimentoStandard SSDCusto reduzido, SSD
Backup, arquivoStandard HDDMenor custo
Disco temporário para processamentoTemporary Disk (cuidado!)Gratuito, mas não persistente

8.3 IP público estático vs dinâmico​

SituaçãoEscolhaMotivo
DNS apontando para a VMIP público estáticoIP não muda após reinicialização
VM com Bastion (sem acesso direto)Sem IP públicoAcesso via Bastion, sem exposição
Ambiente de desenvolvimento temporárioIP público dinâmicoMenor custo
Servidor de produção com acesso externoIP público estático + Azure Firewall ou LBEstabilidade e proteção

8.4 Availability Set vs Availability Zone​

RequisitoEscolhaSLA
Sem requisito de HANenhuma99,9%
HA dentro de datacenter únicoAvailability Set99,95%
HA entre datacenters da regiãoAvailability Zone99,99%
Máxima resiliênciaVMs em múltiplas regiões + Traffic Manager> 99,99%

9. Boas Práticas​

  • Use deleteOption: Delete para discos e NICs ao criar VMs via IaC. Isso evita recursos órfãos quando a VM é deletada.
  • Nunca abra SSH/RDP diretamente da internet. Use Azure Bastion, JIT ou VPN.
  • Use chaves SSH para VMs Linux em produção, nunca senhas.
  • Habilite Azure AD Login para eliminar gestão de usuários locais e aproveitar MFA e Conditional Access.
  • Use Managed Disks (padrão atual) em vez de discos não gerenciados (legado).
  • Especifique a zona de disponibilidade para VMs de produção em regiões que suportam Availability Zones.
  • Use Reserved Instances para workloads que rodarão por 1 ano ou mais.
  • Habilite Azure Monitor e configure alertas de CPU, memória e disco desde o início.
  • Use tags para identificar ambiente (prod, dev, test), aplicação, time responsável e centro de custo.
  • Não armazene dados no disco temporário. Use data disks gerenciados para dados persistentes.
  • Use o Azure Hybrid Benefit se você tem licenças Windows Server ou SQL Server ativas.

10. Erros Comuns​

ErroPor que aconteceComo evitar
VM "parada" mas ainda cobrandoParou pelo SO, não desalocouUsar az vm deallocate ou portal para desalocar
Disco e NIC órfãos após deletar VMdeleteOption não configuradoDefinir deleteOption: Delete na criação ou deletar manualmente
Não consegue conectar via SSH/RDPNSG bloqueando porta 22/3389Verificar regras de inbound do NSG
IP público muda após reinicializaçãoIP dinâmico usado onde era necessário estáticoConverter para IP público estático
VM de tamanho errado escolhidaNão considerou os requisitos de workloadDimensionar baseado em CPU, memória e IOPS esperados
Senha de admin esquecida (Windows)Não documentada ou armazenadaUsar Azure AD Login ou resetar via Run Command
VM sem monitoramento configuradoEsqueceu de habilitar na criaçãoHabilitar Azure Monitor Agent após criação
Spot VM removida sem aviso suficienteWorkload não tolerante a interrupção em SpotUsar Spot apenas para workloads tolerantes (batch, render)

11. Operação e Manutenção​

11.1 Monitoramento de VMs​

Azure Monitor VM Insights: Coleta métricas de CPU, memória, disco e rede com visualizações prontas.

# Habilitar Azure Monitor Agent na VM
az vm extension set \
--resource-group myRG \
--vm-name myVM \
--name AzureMonitorLinuxAgent \
--publisher Microsoft.Azure.Monitor \
--version 1.0

Métricas importantes:

MétricaThreshold de alertaO que indica
CPU Percentage> 80% por 5 minNecessidade de resize ou otimização
Available Memory Bytes< 10%Pressão de memória
OS Disk Queue Depth> 10Gargalo de disco
Network In/OutPico anormalTráfego suspeito ou saturação

11.2 Redimensionamento de VM​

# Listar tamanhos disponíveis na região para redimensionamento
az vm list-vm-resize-options \
--resource-group myRG \
--name myVM \
--output table

# Redimensionar (requer parada e reinicialização)
az vm resize \
--resource-group myRG \
--name myVM \
--size Standard_D4s_v5

Redimensionamento requer reinicialização da VM (downtime). Planeje janelas de manutenção.


11.3 Run Command: executar scripts sem SSH/RDP​

Se você perdeu acesso SSH/RDP, o Run Command permite executar scripts na VM via portal ou CLI:

# Executar script bash na VM Linux
az vm run-command invoke \
--resource-group myRG \
--name myVM \
--command-id RunShellScript \
--scripts "echo 'Hello World' && systemctl status nginx"

# Resetar senha de admin (Windows)
az vm user reset-ssh \
--resource-group myRG \
--name myVM

11.4 Limites importantes​

RecursoLimite padrão
VMs por região por assinatura10.000 vCPUs (aumentável)
Discos de dados por VMDepende do tamanho (D2s_v5: até 4; D64s_v5: até 32)
NICs por VMDepende do tamanho
IPs privados por NICAté 30
VMs em Availability SetAté 200
Fault Domains por Availability Set2 ou 3 (dependendo da região)

12. Integração e Automação​

12.1 VM Extensions​

Extensions são agentes instalados na VM que executam tarefas automatizadas:

# Instalar extensão Custom Script (executar script após criação)
az vm extension set \
--resource-group myRG \
--vm-name myVM \
--name CustomScript \
--publisher Microsoft.Azure.Extensions \
--settings '{"commandToExecute":"apt-get install -y nginx"}'

# Listar extensions instaladas
az vm extension list \
--resource-group myRG \
--vm-name myVM \
--output table

Extensions comuns:

ExtensionFunção
CustomScriptExecuta scripts personalizados
AzureMonitorLinuxAgentColeta métricas e logs
DependencyAgentMapeia dependências de rede (VM Insights)
AADSSHLoginForLinuxLogin com Azure AD em Linux
AADLoginForWindowsLogin com Azure AD em Windows
MicrosoftAntiMalwareProteção antimalware (Windows)

12.2 Azure Automation com VMs​

Para desligar VMs automaticamente fora do horário de trabalho:

# Configurar auto-shutdown via CLI
az vm auto-shutdown \
--resource-group myRG \
--name myVM \
--time 2200 \
--email "admin@company.com"

Para automação mais complexa (ligar VMs antes do horário, processar múltiplas VMs), use Azure Automation Runbooks ou Azure Functions com schedule trigger.


12.3 Azure Policy para conformidade de VMs​

# Garantir que todas as VMs usem tags obrigatórias
az policy assignment create \
--name "vm-require-tags" \
--policy "96670d01-0a4d-4649-9c89-2d3abc0a5025" \
--scope "/subscriptions/<sub-id>"

# Auditar VMs sem Azure Monitor Agent
az policy assignment create \
--name "vm-require-monitoring" \
--policy "5641f9d1-f911-4988-abf4-92c8e0f2af0a" \
--scope "/subscriptions/<sub-id>"

13. Resumo Final​

Conceitos essenciais:

  • Uma VM Azure é um computador virtual completo (IaaS) onde você controla o sistema operacional e tudo acima dele.
  • Ao criar uma VM, o Azure cria automaticamente: disco OS, NIC, e opcionalmente IP público, NSG, VNet e subnet.
  • O tamanho define CPU, memória e capacidade de disco. Escolha baseado no workload: General Purpose, Memory Optimized, Compute Optimized, GPU, etc.
  • O estado Stopped ≠ Deallocated: apenas Deallocated para a cobrança de compute.

Diferenças críticas:

  • Stopped vs Deallocated: Stopped = SO desligado mas hardware ainda alocado (cobra compute). Deallocated = hardware liberado (cobra apenas storage).
  • Availability Set vs Availability Zone: Set distribui entre racks no mesmo datacenter (99,95%). Zone distribui entre datacenters (99,99%).
  • IP dinâmico vs estático: Dinâmico muda ao desalocar. Estático permanece. Use estático quando o DNS ou firewall depende do IP.
  • Disco temporário vs data disk: Temporário não persiste após desalocação. Data disk gerenciado persiste sempre.

O que precisa ser lembrado:

  • Use deleteOption: Delete para discos e NICs para evitar recursos órfãos.
  • Nunca abra portas SSH/RDP diretamente da internet. Use Bastion ou JIT.
  • O disco temporário fica em D: no Windows e /dev/sdb ou /mnt no Linux, e não persiste dados após desalocação.
  • Azure Hybrid Benefit pode reduzir significativamente o custo de VMs Windows e SQL Server.
  • Use Reserved Instances para workloads que rodarão por 1 ano ou mais; a economia pode chegar a 72%.
  • Spot VMs são econômicas mas podem ser removidas a qualquer momento com 30 segundos de aviso.
  • O Run Command permite executar scripts na VM sem acesso SSH/RDP direto, útil para recuperação de acesso.