Saltar para o conteúdo
gonçalo.fileno
← Voltar à página inicial

Migração para a AWS e redes multi-conta

Migração dos serviços on-premises de uma empresa para a AWS sem downtime, numa rede multi-conta construída como código com Pulumi e Terraform.

  • AWS
  • Pulumi
  • Terraform
  • Packer
  • Ansible

Arquitetura

Rede de destino
  1. Office → Site-to-site VPN: IPsec
  2. Site-to-site VPN → Transit Gateway
  3. Transit Gateway → VPCs: attachments
  4. VPCs → ALB
  5. ALB → EC2: HTTPS
  6. EC2 → S3
  7. Route 53 → ALB: alias
  • Office: Equipa
  • Transit Gateway: Partilhado via AWS RAM
  • Route 53: DNS interno
  • VPCs: Várias por conta
  • EC2: GitLab · Jenkins · Harbor · Artifactory
  • S3: Artefactos e backups
  • office: Office
  • aws · shared network account: Site-to-site VPN, Transit Gateway, Route 53
  • aws · workload accounts: VPCs, ALB, EC2, S3
Migrar um serviço
  1. On-premises VM → Packer: rebuild
  2. Packer → EC2: AMI
  3. Ansible → EC2: configure
  4. Pulumi → EC2
  5. Terraform → EC2
  6. Route 53 → EC2: switch DNS
  • On-premises VM: Antes
  • Packer: Imagem
  • Ansible: Configuração
  • EC2: Depois
  • Route 53: Passagem fora de horas
  • Pulumi: Infraestrutura
  • Terraform: Infraestrutura
  • on-premises: On-premises VM
  • build: Packer, Ansible, Pulumi, Terraform
  • aws: EC2, Route 53

Contexto

A empresa tinha os serviços centrais de engenharia (GitLab, Jenkins, Harbor e Artifactory) em máquinas virtuais on-premises. Todas as equipas dependem deles todos os dias.

Problema

Levá-los para a AWS sem parar o trabalho de ninguém, e terminar com uma rede que várias contas e projetos possam partilhar com segurança.

Abordagem

Migrei por ordem de impacto, dos serviços menos críticos para os mais críticos, para que cada passo estivesse provado antes do seguinte. Cada serviço foi reconstruído em EC2 a partir de uma imagem criada com Packer e configurada com Ansible, e todas as passagens foram feitas fora do horário de trabalho.

A rede está definida como código: várias VPCs por conta, ligadas por um Transit Gateway partilhado via AWS RAM, com VPC peering onde faz sentido e uma VPN site-to-site para o escritório. Os serviços estão atrás de Application Load Balancers, com DNS no Route 53 e armazenamento em S3.

Resultado

Os primeiros quatro serviços centrais (GitLab, Jenkins, Harbor e Artifactory) foram migrados sem downtime, e os restantes seguem o mesmo caminho. Pelo caminho, reduzi a fatura da AWS da empresa em cerca de 30%.