image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Alfredo Gaspar
Alfredo Gaspar03/02/2025 19:30
Compartilhe

Implementação de comunicação privada em ambiente MultiCloud (AWS e 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?