🖥️ Iniciante-Intermédio 🕐 ~70 min Módulo 3 de 7

Serviços de Cálculo
e VMs

O cálculo (compute) é o coração de qualquer infraestrutura cloud. O Azure oferece vários serviços — de VMs completas a funções serverless — para cobrir todos os casos de uso. Neste módulo aprendes a escolher e a usar cada um.

1 Visão Geral dos Serviços de Cálculo

O Azure oferece uma hierarquia de serviços de cálculo com diferentes níveis de controlo e abstração:

🖥️

Virtual Machines (IaaS)

Servidores completos na cloud. Total controlo do OS. Ideal para lift-and-shift e aplicações legadas.

Windows ou Linux
🌐

App Service (PaaS)

Plataforma gerida para aplicações web, APIs e backends. Sem gerir servidores — só o teu código.

.NET, Node, Python, Java...
⚡

Azure Functions (Serverless)

Executa código em resposta a eventos. Pagas apenas pelas execuções. Escala automaticamente para zero.

Event-driven · Pay-per-use
📦

Container Instances

Executa containers Docker sem gerir infraestrutura. Rápido a arrancar, faturado ao segundo.

Docker · ACI
☸️

Azure Kubernetes Service

Orquestração de containers em larga escala. Kubernetes gerido pela Microsoft — foco na app, não no cluster.

AKS · Kubernetes
🖥️

Azure Virtual Desktop

Desktop Windows completo acessível por browser ou app — para trabalho remoto e virtualização de postos.

AVD · VDI

2 Máquinas Virtuais Azure

As Azure Virtual Machines são o serviço IaaS de cálculo fundamental. Podes instalar qualquer OS (Windows Server, Ubuntu, Red Hat, SUSE...) e ter controlo total sobre software, configurações de rede e armazenamento.

Famílias de VMs — Escolher o tamanho certo

SérieNomeOtimizada paraExemplos
BBurstableCargas de trabalho com picos — boa para labs e devB1s (1 vCPU, 1 GB) · B2s
DGeneral PurposeUso geral — equilíbrio CPU/RAMD2s_v5 · D4s_v5
EMemory OptimizedBases de dados em memória, SAP HANAE8s_v5 · E32s_v5
FCompute OptimizedAlta CPU, processamento em loteF4s_v2 · F8s_v2
NGPURendering, IA, machine learningNC6 · NC24ads A100
MMemory ExtremeSAP HANA, workloads de memória massivaM128s (128 vCPU, 2 TB RAM)
💡
Para laboratórios gratuitos: usa sempre a série B (Burstable). A VM Standard_B1s (1 vCPU, 1 GB RAM) está incluída gratuitamente nas primeiras 750 horas/mês da conta gratuita. É suficiente para a maioria dos exercícios deste curso.

Discos geridos (Managed Disks)

Cada VM tem pelo menos um disco do sistema operativo. Podes adicionar discos de dados conforme necessário:

TipoIOPS máx.LatênciaUso
HDD Standard500 IOPSAltaDev/test, backups, dados de arquivo
SSD Standard6.000 IOPSMédiaServidores web, small databases
SSD Premium20.000 IOPSBaixa (<1ms)SQL Server, produção, I/O intensivo
Ultra Disk400.000 IOPSMuito baixa (<0.1ms)SAP HANA, bases de dados críticas

3 Criar uma VM — Passo a Passo

Via Portal Azure

1

Navegar para Virtual Machines

Portal Azure → Pesquisa Virtual machines → Clica em Virtual machines → + Create → Azure virtual machine

2

Configurações básicas (Basics)

Subscrição → Grupo de recursos: rg-lab-mod3 (cria novo) · Nome da VM: vm-lab01 · Região: Portugal Central · Disponibilidade: sem redundância (para lab)

3

Imagem e tamanho

Imagem: Ubuntu Server 22.04 LTS (grátis na conta de avaliação) · Tamanho: Standard_B1s (clica "See all sizes" e filtra por "B1s") · Arquitetura: x64

4

Conta de administrador

Tipo de autenticação: SSH public key (recomendado) ou Password · Nome: azureuser · Para lab, usa Password: AzureLab@2024! — anota no caderno

5

Portas de entrada (Inbound ports)

Selecciona Allow selected ports → SSH (22) para Linux ou RDP (3389) para Windows. Em produção, estas portas devem ser protegidas por Bastion ou VPN.

6

Discos

Tipo de disco do SO: Standard SSD para lab (mais barato). Para produção, usa Premium SSD. Podes adicionar discos de dados aqui.

7

Redes

O Azure cria automaticamente uma VNet, subnet e IP público. Para lab, aceita os valores padrão. Nota o nome do Network Security Group (NSG) criado.

8

Rever e criar

Clica em Review + create → Verifica os custos estimados (deves ver ~0 USD/hora para B1s na avaliação) → Create. A VM demora 1-3 minutos a ficar pronta.

Via Azure CLI

Azure CLI — Criar VM Ubuntu
# 1. Criar grupo de recursos
az group create \
  --name rg-lab-mod3 \
  --location PortugalCentral

# 2. Criar VM Ubuntu (B1s — incluída na conta gratuita)
az vm create \
  --resource-group rg-lab-mod3 \
  --name vm-lab01 \
  --image Ubuntu2204 \
  --size Standard_B1s \
  --admin-username azureuser \
  --admin-password "AzureLab@2024!" \
  --authentication-type password \
  --public-ip-sku Standard

# 3. Abrir porta SSH (já aberta por padrão, mas como exemplo)
az vm open-port \
  --resource-group rg-lab-mod3 \
  --name vm-lab01 \
  --port 22

# 4. Obter IP público para ligar via SSH
az vm show \
  --resource-group rg-lab-mod3 \
  --name vm-lab01 \
  --show-details \
  --query publicIps \
  --output tsv

# 5. Ligar via SSH (substitui IP pelo obtido acima)
ssh azureuser@<IP_PUBLICO>

# 6. Parar a VM (não eliminada — fica "Stopped Deallocated" = sem custo de compute)
az vm deallocate \
  --resource-group rg-lab-mod3 \
  --name vm-lab01

4 Disponibilidade e Dimensionamento

📐

Availability Sets

Distribui VMs por racks físicos diferentes (fault domains) e momentos de atualização diferentes (update domains). Garante 99.95% SLA.

🏢

Availability Zones

Distribui VMs por datacenters fisicamente separados dentro da mesma região. Garante 99.99% SLA. Melhor opção para produção.

📈

Virtual Machine Scale Sets

Escala automaticamente o número de VMs com base na carga (CPU, memória, fila de mensagens). Define mínimo e máximo de instâncias.

⚖️

Load Balancer

Distribui o tráfego de rede entre múltiplas VMs. Essential quando tens um Scale Set ou múltiplas instâncias.

⚠️
Custo: VM parada vs. deallocated Uma VM no estado Stopped (dentro do SO) continua a gerar custos de compute! Sempre usa Stop (deallocate) pelo portal ou az vm deallocate para parar a faturação de compute. O disco continua a ser faturado — normal e muito barato.

5 Azure App Service

O Azure App Service é uma plataforma PaaS totalmente gerida para hospedar aplicações web, APIs REST e backends móveis. Suporta .NET, .NET Core, Node.js, Python, PHP, Java e Ruby. Sem gerir servidores — só o código.

🚀

Deploy contínuo

Integração nativa com GitHub, Azure DevOps, Bitbucket. Push e a app atualiza automaticamente.

📈

Auto-scaling

Escala automaticamente horizontal (mais instâncias) e vertical (mais CPU/RAM) com base em regras.

🔒

SSL gratuito

Certificado SSL/TLS gratuito e renovação automática. Domínio personalizado com HTTPS sem custos adicionais.

🔵

Deployment Slots

Ambientes staging independentes. Faz swap entre staging e produção sem downtime — zero-downtime deployments.

Planos do App Service

PlanoInstânciasAuto-scaleSlotsCusto
Free (F1)Partilhada✗✗Grátis (60 min/dia CPU)
Basic (B1-B3)Dedicada✗✗~€12/mês (B1)
Standard (S1-S3)Dedicada✓5~€55/mês (S1)
Premium (P1v3+)Dedicada + Zona✓20~€110/mês (P1v3)
Azure CLI — Criar App Service com Node.js
# 1. Criar App Service Plan (plano Free para lab)
az appservice plan create \
  --name plan-lab-mod3 \
  --resource-group rg-lab-mod3 \
  --sku F1 \
  --is-linux

# 2. Criar a Web App (Node.js 18)
az webapp create \
  --name webapp-lab-azure-edu \
  --resource-group rg-lab-mod3 \
  --plan plan-lab-mod3 \
  --runtime "NODE:18-lts"

# 3. Ver a URL da app (abre no browser)
az webapp show \
  --name webapp-lab-azure-edu \
  --resource-group rg-lab-mod3 \
  --query defaultHostName \
  --output tsv

# 4. Deploy de código a partir do GitHub
az webapp deployment source config \
  --name webapp-lab-azure-edu \
  --resource-group rg-lab-mod3 \
  --repo-url https://github.com/teu-user/teu-repo \
  --branch main \
  --manual-integration

6 Azure Functions — Serverless

As Azure Functions permitem executar código em resposta a eventos sem provisionar ou gerir servidores. O Azure cuida de tudo — escalabilidade, disponibilidade, patches. Pagas apenas pelas execuções.

📡

HTTP Trigger

A função responde a pedidos HTTP/HTTPS. Ideal para APIs REST simples e webhooks.

⏰

Timer Trigger

Executa conforme um cron schedule. Ex: processar relatório todos os dias às 03:00.

📬

Queue Trigger

Processa mensagens de uma fila (Storage Queue, Service Bus) assim que chegam.

💾

Blob Trigger

Ativa quando um ficheiro é adicionado ao Blob Storage. Ex: redimensionar imagens no upload.

Plano de consumo (Consumption Plan): pagas apenas por execução. As primeiras 1 milhão de execuções por mês são gratuitas — sempre, mesmo sem conta de avaliação. Ideal para cargas irregulares e aprendizagem.

Azure CLI — Criar Function App
# 1. Criar Storage Account (obrigatório para Functions)
az storage account create \
  --name stalabmod3$(shuf -i 1000-9999 -n 1) \
  --resource-group rg-lab-mod3 \
  --sku Standard_LRS \
  --location PortugalCentral

# 2. Criar Function App (Python 3.11, plano de consumo)
az functionapp create \
  --name func-lab-azure-edu \
  --resource-group rg-lab-mod3 \
  --consumption-plan-location PortugalCentral \
  --runtime python \
  --runtime-version 3.11 \
  --functions-version 4 \
  --storage-account stalabmod3XXXX   # usa o nome criado acima

# 3. Exemplo de função HTTP Trigger (Python)
# Ficheiro: function_app.py
#
# import azure.functions as func
# app = func.FunctionApp()
#
# @app.function_name(name="OláMundo")
# @app.route(route="ola", methods=["GET"])
# def ola_mundo(req: func.HttpRequest) -> func.HttpResponse:
#     nome = req.params.get("nome", "Mundo")
#     return func.HttpResponse(f"Olá, {nome}!")
#

7 Containers — ACI e AKS

Azure Container Instances (ACI)

A forma mais rápida de executar um container no Azure — sem gerir VMs ou clusters. Faturado ao segundo. Ideal para tarefas de curta duração e microserviços simples.

Azure CLI — Container Instance (Nginx)
# Lançar container Nginx público em 30 segundos
az container create \
  --resource-group rg-lab-mod3 \
  --name aci-lab-nginx \
  --image nginx:latest \
  --dns-name-label aci-lab-nginx-$(shuf -i 1000-9999 -n 1) \
  --ports 80 \
  --location PortugalCentral

# Ver estado e URL pública
az container show \
  --resource-group rg-lab-mod3 \
  --name aci-lab-nginx \
  --query "{Status:instanceView.state, URL:ipAddress.fqdn}" \
  --output table

# Ver logs do container
az container logs \
  --resource-group rg-lab-mod3 \
  --name aci-lab-nginx

# Eliminar o container (para parar custos)
az container delete \
  --resource-group rg-lab-mod3 \
  --name aci-lab-nginx --yes

Azure Kubernetes Service (AKS)

Para orquestração de containers em escala. O AKS gere automaticamente os nós de controlo do Kubernetes — só pagas pelos nós de trabalho (VMs). Ideal para microsserviços complexos e produção.

ℹ️
AKS na conta gratuita: o AKS pode ser criado com 1 nó B2s (~16 USD/mês de compute). Usa o crédito de 200 USD para experimentar. Elimina o cluster após o laboratório para não gastar crédito desnecessariamente.

8 Como Escolher o Serviço Certo

CenárioServiço recomendadoPorquê
Migrar um servidor Windows existenteVirtual MachineControlo total do OS, configuração idêntica ao servidor on-premises
Hospedar uma app web Node.js/PythonApp ServiceSem gestão de servidores, deploy fácil, SSL automático
Processamento agendado (relatórios, backups)Azure FunctionsTimer trigger, paga só pelas execuções, escala a zero
API REST de baixo tráfegoAzure FunctionsHTTP trigger, custo quase zero, escala automática
Tarefa única em containerContainer InstancesRápido, pago ao segundo, sem overhead
Microsserviços em produçãoAKSOrquestração, rolling updates, service mesh
Desktop remoto para utilizadoresAzure Virtual DesktopVDI gerida, integração M365, escala por horário
Laboratório

Lab 3 — Criar e gerir a primeira VM e Web App

Passo a passo

VM Linux + App Service gratuito

  1. Cria o grupo de recursos: az group create --name rg-lab-mod3 --location PortugalCentral
  2. Cria uma VM Ubuntu B1s com password: az vm create --resource-group rg-lab-mod3 --name vm-lab01 --image Ubuntu2204 --size Standard_B1s --admin-username azureuser --admin-password "AzureLab@2024!" --authentication-type password
  3. Obtém o IP público: az vm show --resource-group rg-lab-mod3 --name vm-lab01 --show-details --query publicIps --output tsv
  4. Liga-te via SSH: ssh azureuser@<IP>. Executa uname -a para confirmar que estás no servidor Azure.
  5. Na VM, instala o Nginx: sudo apt update && sudo apt install -y nginx. Abre a porta 80: az vm open-port --resource-group rg-lab-mod3 --name vm-lab01 --port 80
  6. Abre o IP no browser — deves ver a página de boas-vindas do Nginx.
  7. Cria um App Service Plan Free: az appservice plan create --name plan-lab-mod3 --resource-group rg-lab-mod3 --sku F1 --is-linux
  8. Cria uma Web App Python: az webapp create --name webapp-azuredu-$(shuf -i 1000-9999 -n 1) --resource-group rg-lab-mod3 --plan plan-lab-mod3 --runtime "PYTHON:3.11"
  9. Abre a URL da web app no browser — deves ver a página padrão do Azure App Service.
  10. ⚠️ No final do lab: az vm deallocate --resource-group rg-lab-mod3 --name vm-lab01 para parar a faturação da VM.
✅
Critério de sucesso: Consegues ver a página Nginx no browser via IP da VM, e a página padrão da Web App pelo URL do App Service. O portal Azure mostra os dois recursos no grupo rg-lab-mod3.
Quiz

Verifica os teus conhecimentos — Módulo 3

1. Uma empresa quer migrar o seu servidor SQL Server existente (Windows) para o Azure mantendo total controlo sobre patches e configurações do OS. Qual serviço deve usar?

2. O que acontece a uma VM Azure em estado Stopped (deallocated)?

3. Uma startup tem uma API REST com tráfego muito irregular — picos às segundas e quase nenhum tráfego ao fim de semana. Qual serviço é mais económico?