Skip to content

thiagowingerter/project-multcloud-Luxxy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 

Repository files navigation

project-multicloud-Luxxy

Sobre o projeto

O projeto multicloud Luxxy deriva-se de um rapido bootcamp sobre tecnologias Cloud ministrado por Jean Rodrigues e sua equipe thecloudbootcamp. O objetivo do projeto é ajudar uma rede de hotéis ficticios chamada Luxxy a passar pelos desafios que o COVID-19 causou a todo o mundo comercial, acelerando assim sua necessidade de abandonar seus servidores on-premises em prol de uma arquitetura em cloud de confiança e desempenho.

Desafio a ser superado

A empresa ficticia Luxxy precisou adicionar uma aplicação para registrar os exames de COVID-19 de seus hospedes (apenas assim seria permitida a hospedagem em suas instalações, medida tomada como segurança para os propios hospedes e equipe). Porém a alta demanda de hospedes e uma infraestrutura já datada fizeram com que seus serviços apresenta-sem um alto tempo de espera para respostas, o que não se alinhava com a estrategia de agilidade e qualidade da empresa. Pensando em como solucionar este gargalo a empresa decidiu acelerar seus planos para migrar seu ambiente para Cloud e montou um projeto de migração.

Definições do projeto

O objetivo principal é migrar o ambiente on-premises (servidores de aplicação, storage e banco de dados) para um ambiente cloud. Para maior segurança o ambiente deve ser montado em multicloud com a Google Cloud Platform (GCP) ficando a cargo da aplicação e banco de dados e a Amazon Web Services (AWS) para storage. Abaixo podemos conferir um escopo inicial do projeto.

Diagrama inicial projeto Luxxy cloud

Considerações para o projeto

  • Todo o modelo on-premises será de responsabilidade da equipe Luxxy (o objetivo deste bootcamp é conhecer mais sobre as tecnologias cloud, por este motivo, tanto a aplicação, banco de dados, arquivos não terão destaque no projeto, seguindo o pré-suposto que alguma equipe providenciou).
  • Para criação da infraestrutura cloud será usada a ferramenta Terraform.
  • Tanto as contas da GCP quanto da AWS podem ser no modelo Free para este projeto. Recomendo criar uma nova conta em ambas as plataformas para desfrutar dos 90 dias com bonus gratis.

Etapas do projeto

  • Missão 1 - Provisionar o ambiente cloud com Terraform (IAC)
  • Missão 2 - Efetuar o Deploy da aplicação
  • Missão 3 - Migrar os dados dos servidores on-premises para a cloud

Missão 1 - Provisionamento

Criando contas de acesso nos provedores Cloud

  • Para criação no Google GCP basta seguir os passos indicados pelo próprio Google na opção Comece a usar gratuitamente. GCP.
  • Para criação na AWS basta seguir os passos em Comece a usar gratuitamente. AWS

Importante ressaltar que será necessario cadastrar um cartão de crédito em ambos os casos. Seguindo a risca as indicações deste projeto, NENHUM custo irá ocorrer, pois vamos usar os créditos disponibilizados no periodo de teste.

AWS

Criando um usúario para o Terraform usando IAM

  • Logue com sua nova criada. Na barra de pesquisas, digite IAM. Na seção Services, clique em IAM.
  • Clique em Users e em seguida Add users, insira o nome terraform-pt-1 e clique em Next para criar o usuário do tipo programmatic.

IAM user

  • Após avançar, em Set permissions, clique no botão Attach existing policies directly.
  • Digite AmazonS3FullAccess em Search.
  • Selecione AmazonS3FullAccess

IAM policy

Criando o a Access Key (Chave de Acesso) para o usuário terraform-pt-1 usando o serviço IAM

  • Acesse o usuário terraform-pt-1
  • Clique na aba Security credentials
  • Navegue até a seção Access keys
  • Clique em Create access key

IAM Access Key

  • Selecione Command Line Interface (CLI) e I understand the above recommendation and want to proceed to create an access key.
  • Clique em Next.
  • Clique em Create access key.
  • Clique em Download .csv file
  • Após o download finalizar, clique em Done.
  • Com o download feito, renomeie o .csv para key.csv

IAM Download CSV

GCP

Preparando o ambiente para executar o Terraform

GCP Shell

  • Baixe o arquivo mission1.zip no Google Cloud shell usando o comando wget
wget https://github.com/thiagowingerter/project-multcloud-Luxxy/blob/main/resources/mission-1/mission1.zip
  • Faça o upload do arquivo key.csv para o Cloud Shell usando o browser

GCP Shell

  • Verifique se os arquivos mission1.zip e key.csv estão na pasta no Cloud Shell usando o comando abaixo:
ls -lt
  • Execute os comandos de preparação dos arquivos:
unzip mission1.zip
mv key.csv mission1/pt
cd mission1/pt
chmod +x *.sh
  • Execute os comandos abaixo para preparar o ambiente da AWS e GCP
mkdir -p ~/.aws/
​
touch ~/.aws/credentials_multiclouddeploy
​
./aws_set_credentials.sh key.csv
​
GOOGLE_CLOUD_PROJECT_ID=$(gcloud config get-value project)
​
gcloud config set project $GOOGLE_CLOUD_PROJECT_ID
  • Clique em Autorize.
  • Execute o comando abaixo para setar o projeto no Google Cloud Shell:
./gcp_set_project.sh
  • Execute os comandos para habilitar as APIs do Kubernetes, Container Registry e Cloud SQL
gcloud services enable containerregistry.googleapis.com
​
gcloud services enable container.googleapis.com
​
gcloud services enable sqladmin.googleapis.com
​
gcloud services enable cloudresourcemanager.googleapis.com
​
gcloud services enable serviceusage.googleapis.com
​
gcloud services enable compute.googleapis.com
​
gcloud services enable servicenetworking.googleapis.com --project=$GOOGLE_CLOUD_PROJECT_ID

Executando o Terraform para provisionar a infraestrutura MultiCloud na AWS e Google Cloud

  • Execute os seguintes comandos para provisionar os recursos de infraestrutura:
cd ~/mission1/pt/terraform/
​
terraform init
​
terraform plan
​
terraform apply

Atenção: O processo de provisionamento pode levar entre 15 a 25 minutos para finalizar. Mantenha o CloudShell aberto durante o processo. Caso seja desconectado, clique em Reconectar quando a sessão expirar (a sessão expira após 5 minutos de inatividade por padrão)

  • Com os passos devidamente efetuados esta terminado a missão 1 do projeto.

Etapas do projeto

  • Missão 1 - Provisionar o ambiente cloud com Terraform (IAC)

  • Missão 2 - Efetuar o Deploy da aplicação

  • Missão 3 - Migrar os dados dos servidores on-premises para a cloud

  • Como podemos observar no modelo abaixo o provisionamento do ambiente foi feito pelo TerraForm, ficando a cargo das proximas missões o Deploy da aplicação e migração de dados.

Diagrama-missao-1

Missão 2 - Deploy da aplicação

AWS

IAM

  • Acessar a console da AWS. Na barra de pesquisas, digite IAM. Na seção Services, clique em IAM.
  • Clique em Users e em seguida Add users, insira o nome luxxy-covid-testing-system-pt-app1 e clique em Next para criar o usuário do tipo programmatic.
  • Após avançar, em Set permissions, clique no botão Attach existing policies directly.
  • Digite AmazonS3FullAccess em Search.
  • Selecione AmazonS3FullAccess
  • Clique em Next
  • Revise todos os detalhes
  • Clique em Create user

IAM-M2

Download chave de acesso

  • Acesse o usuário luxxy-covid-testing-system-pt-app1
  • Clique na aba Security credentials
  • Navegue até a seção Access keys
  • Clique em Create access key

IAM-M2-1

  • Selecione Command Line Interface (CLI) e I understand the above recommendation and want to proceed to create an access key.
  • Clique em Next.
  • Clique em Create access key
  • Clique em Download .csv file
  • Após o download finalizar, clique em Done.
  • Com o download feito, renomeie o .csv para luxxy-covid-testing-system-pt-app1.csv

Google Cloud Platform (GCP)

Criando um user para Cloud SQL instance

  • Navegue até a Cloud SQL instance e crie um novo usuário: app com a senha: welcome123456 no Cloud SQL MySQL database.
  • Se conecte ao Google Cloud Shell.

Fazendo download dos arquivos da missão 2

Faça o download dos arquivos da missão 2 diretamente para o Cloud Shell usando o comando wget abaixo:

cd ~
​
wget https://github.com/thiagowingerter/project-multcloud-Luxxy/blob/main/resources/mission-2/mission2.zip
​
unzip mission2.zip
  • Verifique e copie o Public IP address de sua instância Cloud SQL em Overview.
  • Conecte ao MySQL DB em execução no Cloud SQL usando o Public IP address (assim que aparecer a janela para colocar a senha, insira welcome123456). Não esqueça de substituir o IP Público

SQL-1

mysql --host=<subtituir_public_ip_cloudsql> --port=3306 -u app -p
  • Após estar conectado ao banco de dados da instância, crie a tabela de produtos para testes.
use dbcovidtesting;source ~/mission2/pt/db/create_table.sql
​
show tables;exit;
  • Habilite a Cloud Build API através do Cloud Shell.
gcloud services enable cloudbuild.googleapis.com

  • Faça o Build da Docker image e suba para o Google Container Registry. Por gentileza, substitua o <PROJECT_ID> com o My First Project ID
GOOGLE_CLOUD_PROJECT_ID=$(gcloud config get-value project)cd ~/mission2/pt/app
​
gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT_ID/luxxy-covid-testing-system-app-pt
  • Abra o Cloud Editor e edite o Kubernetes deployment file (luxxy-covid-testing-system.yaml) e atualize as variáveis abaixo na linha 33 (em azul) com o seu <PROJECT_ID> no caminho da imagem Docker no Google Container Registry, na linha 42 o AWS Bucket, AWS Keys (abrir o arquivo luxxy-covid-testing-system-pt-app1.csv e utilizar o Access key ID na linha 44 e o Secret access key na linha 46) e o IP Privado do Cloud SQL Database na linha 48.
cd ~/mission2/pt/kubernetes
luxxy-covid-testing-system.yaml

				image: gcr.io/<PROJECT_ID>/luxxy-covid-testing-system-app-pt:latest
...
				- name: AWS_BUCKET
          value: "luxxy-covid-testing-system-pdf-pt-xxxx"
        - name: S3_ACCESS_KEY
          value: "xxxxxxxxxxxxxxxxxxxxx"
        - name: S3_SECRET_ACCESS_KEY
          value: "xxxxxxxxxxxxxxxxxxxx"
        - name: DB_HOST_NAME
          value: "172.21.0.3"
  • Se conecte ao GKE (Google Kubernetes Engine) cluster via Console

SQL-2

SQL-3

  • Faça o Deploy da aplicação COVID-19 Testing Status System no Cluster
cd ~/mission2/pt/kubernetes
​
kubectl apply -f luxxy-covid-testing-system.yaml
  • Obtenha o IP Público e faça o teste da aplicação. Busque por GKE, clique em Workloads e em seguida Exposing Services endereço:porta

GKE-1

GKE-2

  • Você deverá ver a aplicação rodando!

APP-1

  • Com os passos devidamente efetuados esta terminado a missão 2 do projeto.

Etapas do projeto

  • Missão 1 - Provisionar o ambiente cloud com Terraform (IAC)

  • Missão 2 - Efetuar o Deploy da aplicação

  • Missão 3 - Migrar os dados dos servidores on-premises para a cloud

  • Como podemos observar no modelo abaixo o provisionamento do ambiente foi feito pelo TerraForm, além disso fizemos o deploy da aplicação criando um pod no GKE e configuramos o SQL. Para a próxima etapa fica trazermos os dados dos servidores on-premises para a nuvem.

Diagrama-missao-2

Missão 3 - Migração de dados e ajustes finais

Migração do Banco de Dados MySQL

  • Conectar ao Google Cloud Shell
  • Download o dump do banco de dados usando o comando wget
cd ~
​
wget https://github.com/thiagowingerter/project-multcloud-Luxxy/blob/main/resources/mission-3/mission3.zip
​
unzip mission3.zip
  • Conecte ao MySQL DB em execução no Cloud SQL usando o Public IP address (assim que aparecer a janela para colocar a senha, insira welcome123456). Não esqueça de substituir o IP Público.
mysql --host=<subtituir_public_ip_cloudsql> --port=3306 -u app -p
  • Importar o dump do banco de dados no Cloud SQL
use dbcovidtesting;source ~/mission3/pt/db/db_dump.sql
  • Checar se os dados foram importados com sucesso
select * from records;exit;

Amazon Web Services

Migração dos arquivos PDF

  • Conectar no AWS Cloud Shell
  • Download dos arquivos PDF (Comprovante de teste negativo escaneado em PDF)
wget https://github.com/thiagowingerter/project-multcloud-Luxxy/blob/main/resources/mission-3/pdf-data/mission3.zip

unzip mission3.zip
  • Sincronizar os arquivos PDF com o seu bucket criado no AWS S3 usado para o COVID-19 Testing Status System. Altere o nome do bucket para o seu bucket.
cd mission3/pt/pdf_files
​
aws s3 sync . s3://luxxy-covid-testing-system-pdf-pt-xxxx
  • Testar a aplicação. Ao testar a aplicação e navegar na opção "Ver registros" você deverá ser capaz de visualizar os dados importados!

APP FUll

  • Parabéns! Concluimos uma migração de uma aplicação e seu banco de dados do "on-premises" para uma Arquitetura MultiCloud usando AWS e GCP!

Etapas do projeto

  • Missão 1 - Provisionar o ambiente cloud com Terraform (IAC)
  • Missão 2 - Efetuar o Deploy da aplicação
  • Missão 3 - Migrar os dados dos servidores on-premises para a cloud

Final Scope