Alfredo Gaspar
Alfredo Gaspar03/02/2025 19:30
Compartilhe

Implementação de comunicação privada em ambiente MultiCloud (AWS e GCP)

  • #Terraform
  • #AWS
  • #GCP

Implementação de comunicação privada em ambiente MultiCloud (AWS e GCP) de forma 100% automatizada usando o Terraform

image

Em outro projeto baseado em um cenário do mundo real, atuando como Especialista Cloud em uma empresa que utilizava os serviços Google Cloud e AWS em arquiteturas separadas.

A empresa decidiu interligar as duas arquiteturas, de forma totalmente privada, utilizando o Virtual Private Gateway, Customer Gateway, Cloud Router, Cloud VPN, entre outros serviços.

No entanto, eles precisavam dele em produção em uma semana. Assim que as contas GCP e AWS foram criadas, para economizar tempo, decidi implementar de forma 100% automatizada utilizando o Terraform.

Ao final da implementação o cliente ficou vontade de conectar seu datacenter (estrutura on premisse / nuvem privada) a uma nuvem pública, possibilitando assim, uma infraestrutura de nuvem híbrida.

image

Descrição macro, de forma ordenada, das configurações e recursos utilizados:

Pré-requisito: Criação de Conta AWS e GCP.

Parte 1: Criar e Configurar Credenciais para executar o Terraform

No GCP

  • Criação de um projeto novo na GCP associando-o a uma Conta de Faturamento.
  • Habilitar API Compute Engine e Network Management API.
  • Abrir o Cloud Shell no novo projeto criado.
  • Efetuei a limpeza de tudo que tinha no meu /home.
  • O Terraform já vem instalado, caso queira pode instalar novamente.
  • Configurar arquivos do Terraform necessários para a infra definida, acima.

imageProjeto com os arquivos do Terraform

  • Criação de uma JSON Key da Service Account (SA) Default Compute Engine ou uma conta de serviço ¹.
  • Adicionar a JSON Key para o Terraform: ./gcp_set_credentials.sh ~/file-json-key-gcp.json vai gerar uma entrada no arquivo terraform.tfvars
  • Os detalhes podem ser encontrados aqui: passo a passo
Observação: ¹ Service Account Compute Engine Default é uma conta de serviço que é automaticamente atribuída a todas as instâncias do Google Compute Engine (GCE) quando elas são criadas, a menos que uma conta de serviço diferente seja especificada explicitamente durante a criação da instância. Essa conta de serviço é usada para autenticar a instância do GCE com outros serviços da GCP. É uma prática recomendada usar contas de serviço com permissões mínimas necessárias para reduzir o risco de segurança.

Na AWS

Faça login na sua conta AWS, selecione a Região de Oregon (us-west-2) devido a configuração que coloquei no arquivo aws_variables.tf

Crie um usuário pelo AIM

Adicionei acesso ao AWS Management Console

Adicionei policy para AdministratorAccess

Estando no usuário e na aba Security credentials: Access keys > Create access key, permitir usar o Command Line Interface (CLI), baixe o arquivo *.csv desta chave.

Faça upload deste arquivo para o cloud shell GCP e execute: ./aws_set_credentials.sh ~/accessKeys.csv será criado uma nova entrada no arquivo terraform.tfvars.

Parte 2: Criar ‘SSH Keys’, Executar Terraform e Testar Conexão

Verificar instalação do terraform : digite o comando terraform se já tiver basta entrar na pasta dos arquivos do terraform e dar um terraform init e depois terraform validate. Caso não tenha instalado ele, basta instalar pelo arquivo ./get_terraform.sh

Configurar o projeto_id GCP para terraform.tfvars: estando no Google cloud shell ou localmente via seu client cloud sdk

Execute gcloud config set project PROJECT_ID

Coloque seu id de projeto ao invés de usar: PROJECT_ID, rodar ./gcp_set_project.sh. O resultado esperado é ter adicionado o project_id no arquivo terraform.tfvars

Criação de um par de chaves SSH via cloud shell: ssh-keygen -t rsa -f ~/.ssh/vm-ssh-key -C $USER

Importar chave pública para GCP: gcloud compute config-ssh — ssh-key-file=~/.ssh/vm-ssh-key. A chave pode ser consultada em: Compute Engine | Settings | Metadata | SSH KEYS. Em alguns casos é necessário realizar novo login: gcloud auth login

Importar Chave Pública para AWS: fazer o download do arquivo da chave pública:

AWS | EC2 Dashboard | Network & Security | Key Pairs

Actions: Import Key Pair

Name: vm-ssh-key

Browse: vm-ssh-key-pub

Import key pair

No GCP dentro do diretório terraform: vamos executar os seguintes comandos: 

terraform init (inicializa os arquivos do terraform e instala providers/plugins)

terraform validate: valida a sintaxe dos arquivos do terraform.

terraform plan: revisa e te mostra o que vai criar nas clouds.

image

image

terraform apply: inicia o provisionamento dos recursos na cloud

image

terraform apply: inicia o provisionamento dos recursos na cloud

Parte 3: Teste de Conectividade entre as Clouds

Indico verificar os recursos criados pelo console tanto da AWS quanto GCP e realizar um teste de conectividade do GCP para AWS e vice versa.

Listando a criação dos recursos de forma visual em cada cloud, procure pelos recursos abaixo:

VPC(AWS e GCP)

EC2(AWS)/ GCE (GCP)

AWS - VPC / VPN: Virtual private gateways e Customer Gateways (AWS)

GCP - Network Connectivity: VPN (Cloud VPN Tunnels/Gateways) e Cloud Routers

Testando conectividade via SSH

GCP Virtual machines / VM Instances / SSH

image

A avaliação da latência é feita pelos valores de tempo (`time`) apresentados após cada sequência de ping. 

No resultado acima, a latência média é de aproximadamente 13 milissegundos (ms). 

Este valor representa o tempo que os pacotes ICMP levou para ir da GCP/GCE para o endereço IP 172.16.0.100 (AWS/EC2) e voltar.

Quanto menor o valor, melhor é a latência da conexão. 

Em geral, latências abaixo de 100 ms são consideradas boas para a maioria das aplicações.

AWS CloudShell

image

GCP via Connectivity Tests

Menu Network Intelligence | Connectivity Tests

Test name: con-test-aws-gcp

Source: vm-instance | tcb-gcp-vm01

Destination: 172.16.0.100

Create/View

image

Parte 4: Exclusão dos recursos

terraform destroy

Destroy complete! Resources: 41 destroye

Compartilhe
Comentários (1)
DIO Community
DIO Community - 04/02/2025 13:57

Que projeto impressionante, Alfredo!

A implementação automatizada de comunicação privada entre AWS e GCP usando Terraform mostra não apenas domínio técnico, mas também uma visão estratégica para acelerar deploys e garantir consistência na infraestrutura. A decisão de automatizar desde o início foi essencial para atender ao prazo curto, além de oferecer uma abordagem escalável e reutilizável para futuras integrações. O nível de detalhe que você trouxe no passo a passo enriquece ainda mais o compartilhamento de conhecimento, permitindo que outros profissionais possam aplicar essa solução em seus próprios cenários.

A conectividade entre diferentes provedores de nuvem é um desafio crescente, especialmente quando pensamos na segurança e na performance da comunicação privada. O uso de recursos como Virtual Private Gateway, Customer Gateway e Cloud Router, além das VPNs, é uma solução robusta para garantir uma conexão eficiente e segura. A análise de latência que você trouxe é um ponto crucial, pois permite otimizar a experiência e garantir que a comunicação entre as nuvens esteja dentro de padrões aceitáveis para aplicações críticas.

Seu relato mostra como arquiteturas MultiCloud podem ser otimizadas com boas práticas e automação. Com sua experiência nesse projeto, quais lições você destacaria para profissionais que estão começando a trabalhar com integração MultiCloud?