Implementação de um Cluster Kubernetes com Terraform e Automação via GitHub Actions
Automação com Terraform
Objetivo do projeto
O objetivo é automatizar o processo de criação e manutenção do ambiente para execução dos projetos de Software
Para o desenvolvimento do projeto, foram levantadas as seguintes premissas:
Utilizar o Terraform como ferramenta de infraestrutura como código.
O cluster Kubernetes deve ser criado utilizando o serviço Elastic Kubernetes Service (EKS) da AWS.
O projeto deve ser o mais simples e reaproveitável possível.
Toda vez que houver alteração no código Terraform na branch main do repositório, a pipeline deve ser executada.
Só vai haver um ambiente Kubernetes (os ambientes de desenvolvimento, homologação e produção serão separados por namespace).
AWS
S3
EKS
AWS CLI
Terraform
AWS Provider
AWS VPC Terraform module
AWS EKS Terraform module
GitHub
GitHub Actions
Motivações para o uso de cada tecnologia
EKS - Requisito do projeto.
S3 - Foi adotado para armazenar o estado atual do projeto Terraform. Foi definido o seu uso por ser um serviço da própria AWS e ter controle de versionamento dos arquivos.
GitHub Actions - Requisito do projeto.
Instruções para executar
A pipeline de criação ou atualização do projeto é
executada sempre que o código Terraform do projeto for alterado na
branch main.
Configurações
As variáveis de configuração do projeto estão no arquivo
terraform.tfvars, exceto as variáveis consideradas sensiveis que estão
no gerenciador de secrets do GitHub Actions.
Variáveis armazendas em secrets:
AWS_ACCESS_KEY_ID => Access Key utilizada para configurar o AWS CLI.
AWS_SECRET_ACCESS_KEY => Secret access Key utilizada para configurar o AWS CLI.
Estrutura da solução
Diagrama do projeto
Explicação do Fluxo
Possíveis evoluções do projeto
Algumas evoluções que sugiro para o projeto:
Separar ambientes dev, homolog e prod utilizando o Terraform Workspace ou Terraform Grunt para criação e gerenciamento desses ambientes.
Usar o DynamoDB junto com o S3 para evitar execução paralela do Terraform.
Imagens do repositório
Link do repositório https://github.com/RafaelFerreiraNeves/Infraestrutura-AWS-de-um-Cluster-Kubernetes-com-Terraform-e-Automa-o-via-GitHub-Actions.git
Obs: Sempre de fork no GitHub, isso serve para criar uma cópia pessoal de um repositório de terceiros na sua própria conta, permitindo que você experimente, altere e melhore o código livremente sem afetar o projeto original
ATENÇÂO : O EKS não está incluído no AWS Free Tier, que é um programa que oferece acesso gratuito limitado a determinados serviços da AWS. Embora o Free Tier cubra determinados serviços como EC2 (horas limitadas), S3 e RDS, as cobranças do EKS se aplicam imediatamente após o uso, independentemente da elegibilidade do nível gratuito. As cobranças adicionais do EC2, VPC, KMS e CloudWatch também estão associadas à sua infraestrutura do EKS.