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:
- A provisão deste repositório;
- A provisão do repositório dos bancos de dados: /~https://github.com/ALFAC-Org/food-database;
- A provisão das lambdas: /~https://github.com/ALFAC-Org/food-serveless-function;
- A provisão das aplicações: > 5. /~https://github.com/ALFAC-Org/food-cliente; 6. /~https://github.com/ALFAC-Org/food-produto;
- E por fim, o provisionamento da aplicação principal em /~https://github.com/ALFAC-Org/food.
Todos os vídeos estão disponíveis também aqui: https://drive.google.com/drive/folders/1C9UbKeiVNRIM7CSv-HMgMHZflwbqI5tQ?usp=sharing
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
Passo a passo
- Acesse /~https://github.com/ALFAC-Org/food-cloud-infra/actions (A guia
Actions
deste repositório); - Acesse
AWS - Cria infraestrutura
; - Clique em
Run workflow
(ou Executar workflow); - Aguarde. Se tudo der certo, o
check
verde deverá aparecer, osoutputs
irão ser exibidos e você poderá acessar a url - o processo dura em torno de 10 a 20 minutos;
Passo a passo
Antes de começar, certifique-se de ter os seguintes itens instalados e configurados em seu ambiente:
- Terraform: A ferramenta que permite definir, visualizar e implantar a infraestrutura de nuvem.
- AWS CLI: A interface de linha de comando da AWS.
- 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).
- Clone este repositório:
git clone /~https://github.com/ALFAC-Org/food-cloud-infra
- Acesse o diretório do repositório:
cd food-cloud-infra
- Configure as credenciais AWS em seu ambiente:
aws configure
- 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"
- Inicialize o diretório Terraform:
terraform init
- 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
- Provisione a infraestrutura:
terraform apply \
-var "environment=$ENVIRONMENT" \
-var "image_name=$IMAGE_NAME" \
-var "image_username=$DOCKERHUB_USERNAME" \
...variáveis
- Para destruir a infraestrutura provisionada:
terraform destroy \
-var "environment=$ENVIRONMENT" \
-var "image_name=$IMAGE_NAME" \
-var "image_username=$DOCKERHUB_USERNAME" \
...variáveis
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:
Nome | RM | 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 |