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
- Office → Site-to-site VPN: IPsec
- Site-to-site VPN → Transit Gateway
- Transit Gateway → VPCs: attachments
- VPCs → ALB
- ALB → EC2: HTTPS
- EC2 → S3
- 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
- On-premises VM → Packer: rebuild
- Packer → EC2: AMI
- Ansible → EC2: configure
- Pulumi → EC2
- Terraform → EC2
- 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%.