Skip to content

Este é um "super-módulo" para provisionamento de um Cluster EKS completo na AWS. Ele considera VPC, Nodegroup, Load Balancer Controller etc.

License

Notifications You must be signed in to change notification settings

dellabeneta/aws-eks-terraform

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bem-vindo(a) ao 'Super-Módulo' para Elastic Kubernetes Service.

Este é um código Terraform completo para provisionamento de um Cluster EKS na AWS. Ele contempla Rede, um Node Group, Policies, Roles, Load Balancer Controller e demais configurações necessárias para criação de um cluster 100% operacional. Espero que aproveitem e façam bom uso dessa estrutura.

Todo trabalho não teria sido possível sem o treinamento do Mateus Muller, que indico para todos que buscam entender mais sobre módulos no Terraform (https://www.udemy.com/course/terraform-para-aws).

Se precisar, pode contatar no Linkedin em: https://www.linkedin.com/in/mdellabeneta/, ficaria muito feliz com o seu contato e contribuição.

Com isso posto, vamos falar um pouco mais do que temos por aqui. Observe a saída do comando tree em meu terminal, para uma noção macro da estrutura de diretórios e arquivos:

della@desklin:~/projetos$ tree terraform-supermodule/
terraform-supermodule/
├── LICENSE
├── modules
│   ├── cluster
│   │   ├── cluster.tf
│   │   ├── iam.tf
│   │   ├── oidc.tf
│   │   ├── output.tf
│   │   ├── README.md
│   │   ├── sg-rule.tf
│   │   └── variables.tf
│   ├── loadbalancer
│   │   ├── data.tf
│   │   ├── helm.tf
│   │   ├── iam_policy.json
│   │   ├── iam.tf
│   │   ├── locals.tf
│   │   ├── policy.tf
│   │   ├── README.md
│   │   ├── serviceaccount.tf
│   │   └── variables.tf
│   ├── network
│   │   ├── igw.tf
│   │   ├── ngw.tf
│   │   ├── output.tf
│   │   ├── private.tf
│   │   ├── public.tf
│   │   ├── README.md
│   │   ├── region.tf
│   │   ├── variables.tf
│   │   └── vpc.tf
│   └── nodegroup
│       ├── iam.tf
│       ├── nodegroup.tf
│       ├── README.md
│       └── variables.tf
├── modules.tf
├── provider.tf
├── README.md
└── variables.tf

6 directories, 34 files

Nas tabelas abaixo (geradas com o pre-commit e terraform-docs), podemos ver maiores detalhes como dependências, versionamento utilizado e os INPUTS que são requisitos para a utilização do projeto.

Requirements

Name Version
aws 5.37.0
helm 2.12.1
kubernetes 2.26.0

Providers

No providers.

Modules

Name Source Version
eks_cluster ./modules/cluster n/a
eks_load_balancer ./modules/loadbalancer n/a
eks_network ./modules/network n/a
eks_node_group ./modules/nodegroup n/a

Resources

No resources.

Inputs

Name Description Type Default Required
aws_profile Nome do profile configurado na AWS CLI localmente em seu PC string n/a yes
cidr_block IP CIDR que sera usado na VPC string n/a yes
desired_size Valor desejado de Nodes number n/a yes
eks_version Versao do EKS que sera provisionada na AWS string n/a yes
instance_types Tipo da instancia que sera usada para criacao dos Nodes string n/a yes
max_size Valor maximo de Nodes number n/a yes
min_size Valor minimo de Nodes number n/a yes
project_name Nome do projeto que pode ser usado nas tags de nome (Name tag) string n/a yes
region Regiao da AWS onde o projeto sera provisionado string n/a yes
tags Tags para serem adicionadas aos recursos map(any) n/a yes

Outputs

No outputs.

Veja um exemplo de um "main.tf" que você poderia criar para utilizar este projeto de forma rápida, respeitando as variáveis, inputs necessários e com backend local:

module "eks" {
  source = "git@github.com:dellabeneta/terraform-supermodule.git"

  # Variáveis necessárias (INPUTS)
  aws_profile    = "SEU_PROFILE"
  region         = "REGIÃO"
  project_name   = "NOME_DO_PROJETO"
  eks_version    = "VERSÃO_DO_EKS"
  cidr_block     = "CIDR_PARA_VPC" --> de acordo com as configurações estabelecidas no módulo de VPC, a rede deve ser necessariamente definida como /16.
  instance_types = "SIZE_DA_EC2"
  desired_size   = "1"
  min_size       = "1"
  max_size       = "1"
  

  # As tags também são variáveis, do tipo map(). Opcionalmente,
  # pode ser criado um arquivo 'locals.tags', para organizar 
  # melhor a passagem dos valores. Neste exemplo, não optei por isso.

  tags = {
    Departamento = "Devops"
    Organizacao  = "Dellabeneta S/A"
    Projeto      = "Automatização com IaC Cluster EKS"
    Ambiente     = "Desenvolvimento"
  }
}

https://linktr.ee/dellabeneta

About

Este é um "super-módulo" para provisionamento de um Cluster EKS completo na AWS. Ele considera VPC, Nodegroup, Load Balancer Controller etc.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages