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érie | Nome | Otimizada para | Exemplos |
|---|---|---|---|
| B | Burstable | Cargas de trabalho com picos — boa para labs e dev | B1s (1 vCPU, 1 GB) · B2s |
| D | General Purpose | Uso geral — equilíbrio CPU/RAM | D2s_v5 · D4s_v5 |
| E | Memory Optimized | Bases de dados em memória, SAP HANA | E8s_v5 · E32s_v5 |
| F | Compute Optimized | Alta CPU, processamento em lote | F4s_v2 · F8s_v2 |
| N | GPU | Rendering, IA, machine learning | NC6 · NC24ads A100 |
| M | Memory Extreme | SAP HANA, workloads de memória massiva | M128s (128 vCPU, 2 TB RAM) |
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:
| Tipo | IOPS máx. | Latência | Uso |
|---|---|---|---|
| HDD Standard | 500 IOPS | Alta | Dev/test, backups, dados de arquivo |
| SSD Standard | 6.000 IOPS | Média | Servidores web, small databases |
| SSD Premium | 20.000 IOPS | Baixa (<1ms) | SQL Server, produção, I/O intensivo |
| Ultra Disk | 400.000 IOPS | Muito baixa (<0.1ms) | SAP HANA, bases de dados críticas |
3 Criar uma VM — Passo a Passo
Via Portal Azure
Navegar para Virtual Machines
Portal Azure → Pesquisa Virtual machines → Clica em Virtual machines → + Create → Azure virtual machine
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)
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
Conta de administrador
Tipo de autenticação: SSH public key (recomendado) ou Password · Nome: azureuser · Para lab, usa Password: AzureLab@2024! — anota no caderno
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.
Discos
Tipo de disco do SO: Standard SSD para lab (mais barato). Para produção, usa Premium SSD. Podes adicionar discos de dados aqui.
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.
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
# 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.
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
| Plano | Instâncias | Auto-scale | Slots | Custo |
|---|---|---|---|---|
| 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) |
# 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.
# 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.
# 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.
8 Como Escolher o Serviço Certo
| Cenário | Serviço recomendado | Porquê |
|---|---|---|
| Migrar um servidor Windows existente | Virtual Machine | Controlo total do OS, configuração idêntica ao servidor on-premises |
| Hospedar uma app web Node.js/Python | App Service | Sem gestão de servidores, deploy fácil, SSL automático |
| Processamento agendado (relatórios, backups) | Azure Functions | Timer trigger, paga só pelas execuções, escala a zero |
| API REST de baixo tráfego | Azure Functions | HTTP trigger, custo quase zero, escala automática |
| Tarefa única em container | Container Instances | Rápido, pago ao segundo, sem overhead |
| Microsserviços em produção | AKS | Orquestração, rolling updates, service mesh |
| Desktop remoto para utilizadores | Azure Virtual Desktop | VDI gerida, integração M365, escala por horário |
Lab 3 — Criar e gerir a primeira VM e Web App
VM Linux + App Service gratuito
- Cria o grupo de recursos:
az group create --name rg-lab-mod3 --location PortugalCentral - 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 - Obtém o IP público:
az vm show --resource-group rg-lab-mod3 --name vm-lab01 --show-details --query publicIps --output tsv - Liga-te via SSH:
ssh azureuser@<IP>. Executauname -apara confirmar que estás no servidor Azure. - 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 - Abre o IP no browser — deves ver a página de boas-vindas do Nginx.
- Cria um App Service Plan Free:
az appservice plan create --name plan-lab-mod3 --resource-group rg-lab-mod3 --sku F1 --is-linux - 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" - Abre a URL da web app no browser — deves ver a página padrão do Azure App Service.
- ⚠️ No final do lab:
az vm deallocate --resource-group rg-lab-mod3 --name vm-lab01para parar a faturação da VM.
rg-lab-mod3.
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?