Entendendo a nuvem: AWS, Azure e Google Cloud para deploy

1. Fundamentos do Deploy em Nuvem

O deploy em nuvem transformou a maneira como aplicações são entregues e escaladas. Três modelos fundamentais definem a abordagem:

  • IaaS (Infrastructure as a Service): Oferece recursos de computação virtualizados (máquinas, redes, armazenamento). Exemplo: provisionar uma VM na AWS EC2 e configurar manualmente o ambiente.
  • PaaS (Platform as a Service): Fornece uma plataforma gerenciada para deploy de código, abstraindo infraestrutura subjacente. Exemplo: Azure App Service onde você faz upload do código e a plataforma cuida do servidor.
  • SaaS (Software as a Service): Produto final pronto para uso, sem necessidade de deploy pelo cliente.

A diferença crucial entre deploy on-premise e cloud-native está na elasticidade: no modelo tradicional, você compra capacidade fixa; na nuvem, provisiona recursos sob demanda e paga pelo uso. O modelo de responsabilidade compartilhada define que o provedor cuida da segurança da nuvem (física, rede, hipervisor), enquanto o cliente é responsável pela segurança na nuvem (dados, configurações, identidades).

2. AWS (Amazon Web Services) para Deploy

A AWS oferece múltiplos caminhos para deploy:

EC2 (Elastic Compute Cloud): Deploy tradicional via AMIs e instâncias. Exemplo de configuração básica:

# Criar par de chaves
aws ec2 create-key-pair --key-name MinhaChave --query 'KeyMaterial' --output text > MinhaChave.pem

# Lançar instância t2.micro
aws ec2 run-instances --image-id ami-0c55b159cbfafe1f0 --instance-type t2.micro --key-name MinhaChave

# Conectar via SSH
ssh -i "MinhaChave.pem" ec2-user@<ip-publico>

Elastic Beanstalk: Deploy simplificado onde você faz upload do código (ex: aplicação Node.js) e a AWS gerencia balanceamento, escalabilidade e monitoramento:

# Inicializar aplicação
eb init minha-app --platform node.js --region us-east-1

# Criar ambiente e fazer deploy
eb create ambiente-producao
eb deploy

AWS Lambda: Deploy serverless, executando código sem gerenciar servidores:

# Criar função Lambda
aws lambda create-function --function-name minha-funcao \
  --runtime python3.9 --role arn:aws:iam::123456:role/lambda-role \
  --handler handler.lambda_handler --zip-file fileb://function.zip

Estratégias de deploy: blue/green (duas versões simultâneas, tráfego migrado de uma vez), rolling updates (atualização gradual de instâncias) e canary releases (tráfego parcial para nova versão para teste). O CloudFormation automatiza toda a infraestrutura como código, e o Auto Scaling ajusta recursos conforme demanda.

3. Microsoft Azure para Deploy

O Azure integra-se profundamente com o ecossistema Microsoft:

Azure App Service: Deploy direto via Git ou ZIP. Exemplo de deploy contínuo com GitHub Actions:

# workflow.yml no repositório
name: Deploy para Azure App Service
on: [push]
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Deploy para Azure
        uses: azure/webapps-deploy@v2
        with:
          app-name: minha-app
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}

Azure Functions: Serverless para eventos e APIs:

# Criar Function App via Azure CLI
az functionapp create --resource-group meuGrupo --consumption-plan-location eastus \
  --runtime node --runtime-version 14 --functions-version 3 --name minha-function-app

Azure Kubernetes Service (AKS): Orquestração de contêineres com balanceamento de carga integrado:

# Criar cluster AKS
az aks create --resource-group meuGrupo --name meuCluster --node-count 3 --enable-addons monitoring

# Obter credenciais
az aks get-credentials --resource-group meuGrupo --name meuCluster

# Fazer deploy de aplicação
kubectl apply -f deployment.yaml

O Azure DevOps oferece pipelines completos de CI/CD, e o Azure Monitor centraliza logs e métricas.

4. Google Cloud Platform (GCP) para Deploy

O GCP se destaca em soluções conteinerizadas e serverless:

Compute Engine: VMs tradicionais, semelhantes ao EC2:

# Criar instância
gcloud compute instances create minha-vm --machine-type=e2-micro --image-family=ubuntu-2204-lts --image-project=ubuntu-os-cloud

# Conectar via SSH
gcloud compute ssh minha-vm

App Engine: PaaS que escala automaticamente. Deploy simples:

# Configurar app.yaml
runtime: python39
entrypoint: gunicorn -b :$PORT main:app

# Fazer deploy
gcloud app deploy

Cloud Run: Serverless para contêineres. Exemplo de deploy a partir do Container Registry:

# Construir imagem
gcloud builds submit --tag gcr.io/meu-projeto/minha-app

# Deploy no Cloud Run
gcloud run deploy minha-app --image gcr.io/meu-projeto/minha-app --platform managed --region us-central1

O Cloud Build automatiza pipelines, e o Deployment Manager gerencia infraestrutura como código. O GKE (Google Kubernetes Engine) oferece escalabilidade automática com node pools e cluster autoscaler.

5. Comparação Prática entre as Três Nuvens

Característica AWS Azure GCP
Serverless Lambda (execução limitada) Functions (integração Microsoft) Cloud Run (contêineres)
Orquestração EKS (Kubernetes) AKS (Kubernetes) GKE (Kubernetes nativo)
PaaS Elastic Beanstalk App Service App Engine
Monitoramento CloudWatch Azure Monitor Cloud Operations

Custos: AWS tem modelo complexo com muitas variáveis. Azure oferece descontos para licenças Microsoft existentes. GCP geralmente tem preços mais previsíveis e descontos por uso contínuo.

Facilidade de uso: Azure é mais intuitivo para equipes com background Microsoft. GCP tem interface mais limpa e documentação clara. AWS tem maior mercado e comunidade, mas curva de aprendizado íngreme.

6. Boas Práticas de Deploy Multi-Cloud e Híbrido

Para evitar vendor lock-in, abstraia serviços usando Terraform:

# provider.tf
provider "aws" {
  region = "us-east-1"
}

provider "azurerm" {
  features {}
}

provider "google" {
  project = "meu-projeto"
  region  = "us-central1"
}

# Recursos abstratos
resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
}

resource "azurerm_linux_virtual_machine" "web" {
  name                = "vm-web"
  resource_group_name = azurerm_resource_group.main.name
  location            = "East US"
  size                = "Standard_B1s"
  admin_username      = "adminuser"
}

resource "google_compute_instance" "web" {
  name         = "vm-web"
  machine_type = "e2-micro"
  zone         = "us-central1-a"
}

Considere latência (escolha regiões próximas aos usuários), compliance (LGPD, GDPR, HIPAA) e disaster recovery (replicação entre regiões). Use CloudFront (AWS), Azure Front Door ou Cloud CDN (GCP) para distribuição global.

Para ambientes híbridos, utilize AWS Outposts, Azure Stack ou Google Anthos, que estendem a nuvem para data centers locais.

Referências