Skip to content

Este é um repositório Git que utiliza o Terraform para gerenciar infraestrutura na nuvem. Nele, você encontrará arquivos de configuração do Terraform que definem a infraestrutura como código.

Notifications You must be signed in to change notification settings

ALFAC-Org/food-cloud-infra

Repository files navigation

Infraestrutura da aplicação em nuvem - ALFAC

Este é um repositório Git que utiliza o Terraform para gerenciar infraestrutura na nuvem da aplicação Fast Food - ALFAC. Nele, você encontrará arquivos de configuração do Terraform que definem a infraestrutura como código. No momento, o repositório está focado na Amazon Web Services (AWS), entretanto, o repositório é flexível para adaptação para outros provedores de serviços de nuvem.

Warning

Para completo funcionamento da plataforma, é necessário seguir todo o fluxo de provisionamento:

  1. A provisão deste repositório;
  2. A provisão do repositório dos bancos de dados: /~https://github.com/ALFAC-Org/food-database;
  3. A provisão das lambdas: /~https://github.com/ALFAC-Org/food-serveless-function;
  4. A provisão das aplicações: > 5. /~https://github.com/ALFAC-Org/food-cliente; 6. /~https://github.com/ALFAC-Org/food-produto;
  5. E por fim, o provisionamento da aplicação principal em /~https://github.com/ALFAC-Org/food.

passos-seguir

Diagrama

Diagrama de Arquitetura

Tutoriais

Passo Vídeo
0. Introdução geral 00-INTRODUCAO_GERAL
1. Introdução aos repositórios 01-INTRODUCAO_AOS_REPOSITORIOS
2. Configuração das variáveis ambiente 02-CONFIGURACAO_VARIAVEIS_AMBIENTE
3. Provisão da infraestrutura com /~https://github.com/ALFAC-Org/food-cloud-infra 03-PROVISAO_INFRA_P1 / 03-PROVISAO_INFRA_P2
4. Provisão dos bancos de dados com /~https://github.com/ALFAC-Org/food-database 04-PROVISAO_DB_P1 / 04-PROVISAO_DB_P2
5. Provisão das lambdas com /~https://github.com/ALFAC-Org/food-serveless-function 05-PROVISAO_LAMBDAS_P1 / 05-PROVISAO_LAMBDAS_P1
6. Provisão da aplicação food-produto /~https://github.com/ALFAC-Org/food-produto 06-PROVISAO_FOOD_PRODUTO_P1 / 06-PROVISAO_FOOD_PRODUTO_P2
7. Provisão da aplicação food-cliente /~https://github.com/ALFAC-Org/food-cliente 07-PROVISAO_FOOD_CLIENTE_P1 / 07-PROVISAO_FOOD_CLIENTE_P2
8. Provisão da aplicação principal com /~https://github.com/ALFAC-Org/food 08-PROVISIONA_FOOD_P1 / 08-PROVISIONA_FOOD_P2
9. Simulando cliente na plataforma: Load Balancer e API Gateway 09-01_FLUXO_LOAD_BALANCER / 09-02_FLUXO_API_GATEWAY

Todos os vídeos estão disponíveis também aqui: https://drive.google.com/drive/folders/1C9UbKeiVNRIM7CSv-HMgMHZflwbqI5tQ?usp=sharing

Como rodar o projeto

Variáveis a se trocar:

  • ARN_AWS_LAB_ROLE
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN
  • AWS_BUCKET_NAME
  • LAMBDA_BUCKET_NAME

Existem duas formas com as quais você pode ver esse repositório em ação:

  • Via GitHub Actions (recomendada)
  • Localmente

Via GitHub Actions (recomendada)

Passo a passo
  1. Acesse /~https://github.com/ALFAC-Org/food-cloud-infra/actions (A guia Actions deste repositório);
  2. Acesse AWS - Cria infraestrutura;
  3. Clique em Run workflow (ou Executar workflow);
  4. Aguarde. Se tudo der certo, o check verde deverá aparecer, os outputs irão ser exibidos e você poderá acessar a url - o processo dura em torno de 10 a 20 minutos;
    1. infra-criada-sucesso
    2. infra-criada-sucesso-output

Localmente

Passo a passo

Pré-requisitos

Antes de começar, certifique-se de ter os seguintes itens instalados e configurados em seu ambiente:

  1. Terraform: A ferramenta que permite definir, visualizar e implantar a infraestrutura de nuvem.
  2. AWS CLI: A interface de linha de comando da AWS.
  3. Credenciais AWS válidas: Você precisará de uma chave de acesso e uma chave secreta para autenticar com a AWS (no momento, o repositório usa chaves e credenciais fornecidas pelo AWS Academy e que divergem de contas padrão).

Como usar

  1. Clone este repositório:
git clone /~https://github.com/ALFAC-Org/food-cloud-infra
  1. Acesse o diretório do repositório:
cd food-cloud-infra
  1. Configure as credenciais AWS em seu ambiente:
aws configure
  1. Defina as variáveis necessárias ao nível de ambiente, via arquivo .tfvars ou passe através dos comandos. Exemplo:
terraform <comando> <parâmetros> \
-var "environment=$ENVIRONMENT" \
-var "image_name=$IMAGE_NAME" \
-var "image_username=$DOCKERHUB_USERNAME" \
-var "image_version=$IMAGE_VERSION" \
-var "app_port=$APP_PORT" \
-var "app_service_port=$FOOD_SERVICE_PORT" \
-var "enable_flyway=$ENABLE_FLYWAY" \
-var "aws_region=$AWS_REGION" \
-var "node_role_arn=$ARN_AWS_LAB_ROLE" \
-var "vpc_name=$VPC_NAME" \
-var "vpc_cidr_block=$VPC_CIDR_BLOCK" \
-var "subnet_private_1_cidr_block=$SUBNET_PRIVATE_1_CIDR_BLOCK" \
-var "subnet_private_2_cidr_block=$SUBNET_PRIVATE_2_CIDR_BLOCK" \
-var "subnet_public_1_cidr_block=$SUBNET_PUBLIC_1_CIDR_BLOCK" \
-var "subnet_public_2_cidr_block=$SUBNET_PUBLIC_2_CIDR_BLOCK" \
-var "subnet_availability_zone_az_1=$SUBNET_AVAILABILITY_ZONE_AZ_1" \
-var "subnet_availability_zone_az_2=$SUBNET_AVAILABILITY_ZONE_AZ_2" \
-var "db_username=$DB_USERNAME" \
-var "db_password=$DB_PASSWORD" \
-var "db_name=$DB_NAME" \
-var "db_host=$DB_HOST" \
-var "kubernetes_namespace=$CLUSTER_NAMESPACE" \
-var "cluster_name=$CLUSTER_NAME" \
-var "bucket_food_lambdas=$LAMBDA_BUCKET_NAME"
  1. Inicialize o diretório Terraform:
terraform init
  1. Visualize as mudanças que serão feitas:
terraform plan \
-var "environment=$ENVIRONMENT" \
-var "image_name=$IMAGE_NAME" \
-var "image_username=$DOCKERHUB_USERNAME" \
...variáveis
  1. Provisione a infraestrutura:
terraform apply \
-var "environment=$ENVIRONMENT" \
-var "image_name=$IMAGE_NAME" \
-var "image_username=$DOCKERHUB_USERNAME" \
...variáveis
  1. Para destruir a infraestrutura provisionada:
terraform destroy \
-var "environment=$ENVIRONMENT" \
-var "image_name=$IMAGE_NAME" \
-var "image_username=$DOCKERHUB_USERNAME" \
...variáveis

Acessando a aplicação (Load Balancer)

Para acessar a aplicação, pegue a url gerado no output load_balancer_hostname, através de algum dos processo anteriormente citados (via GitHub Actions ou localmente). Adicione 8080 como porta. Exemplo:

http://a837b0b23848e46afa45405c9ef0b060-4303509eac57f9bb.elb.us-east-1.amazonaws.com:8080/api-docs

Você deverá ver algo do tipo:

acesso-api-docs

Membros

Nome RM E-mail GitHub
Leonardo Fraga RM354771 rm354771@fiap.com.br @LeonardoFraga
Carlos Henrique Carvalho de Santana RM355339 rm355339@fiap.com.br @carlohcs
Leonardo Alves Campos RM355568 rm355568@fiap.com.br @lcalves
Andre Musolino RM355582 rm355582@fiap.com.br @amusolino
Caio Antunes Gonçalves RM354913 rm354913@fiap.com.br @caio367

About

Este é um repositório Git que utiliza o Terraform para gerenciar infraestrutura na nuvem. Nele, você encontrará arquivos de configuração do Terraform que definem a infraestrutura como código.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •