├── .gitignore ├── README.md └── terraform ├── eks-cluster.tf ├── main.tf ├── outputs.tf ├── terraform.tf ├── variables.tf └── vpc.tf /.gitignore: -------------------------------------------------------------------------------- 1 | .terraform* 2 | DS_Store 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Terraform code 2 | 3 | ## Maintain vpc & eks with terraform for vprofile project 4 | 5 | ## Tools required 6 | Terraform version 1.6.3 7 | 8 | ### Steps 9 | * terraform init 10 | * terraform fmt -check 11 | * terraform validate 12 | * terraform plan -out planfile 13 | * terraform apply -auto-approve -input=false -parallelism=1 planfile 14 | #### 15 | ##### 16 | -------------------------------------------------------------------------------- /terraform/eks-cluster.tf: -------------------------------------------------------------------------------- 1 | module "eks" { 2 | source = "terraform-aws-modules/eks/aws" 3 | version = "19.19.1" 4 | 5 | cluster_name = local.cluster_name 6 | cluster_version = "1.27" 7 | 8 | vpc_id = module.vpc.vpc_id 9 | subnet_ids = module.vpc.private_subnets 10 | cluster_endpoint_public_access = true 11 | 12 | eks_managed_node_group_defaults = { 13 | ami_type = "AL2_x86_64" 14 | 15 | } 16 | 17 | eks_managed_node_groups = { 18 | one = { 19 | name = "node-group-1" 20 | 21 | instance_types = ["t3.small"] 22 | 23 | min_size = 1 24 | max_size = 3 25 | desired_size = 2 26 | } 27 | 28 | two = { 29 | name = "node-group-2" 30 | 31 | instance_types = ["t3.small"] 32 | 33 | min_size = 1 34 | max_size = 2 35 | desired_size = 1 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /terraform/main.tf: -------------------------------------------------------------------------------- 1 | provider "kubernetes" { 2 | host = module.eks.cluster_endpoint 3 | cluster_ca_certificate = base64decode(module.eks.cluster_certificate_authority_data) 4 | } 5 | 6 | provider "aws" { 7 | region = var.region 8 | } 9 | 10 | data "aws_availability_zones" "available" {} 11 | 12 | locals { 13 | cluster_name = var.clusterName 14 | } 15 | 16 | ## -------------------------------------------------------------------------------- /terraform/outputs.tf: -------------------------------------------------------------------------------- 1 | output "cluster_name" { 2 | description = "Amazon Web Service EKS Cluster Name" 3 | value = module.eks.cluster_name 4 | } 5 | 6 | output "cluster_endpoint" { 7 | description = "Endpoint for Amazon Web Service EKS " 8 | value = module.eks.cluster_endpoint 9 | } 10 | 11 | output "region" { 12 | description = "Amazon Web Service EKS Cluster region" 13 | value = var.region 14 | } 15 | 16 | 17 | output "cluster_security_group_id" { 18 | description = "Security group ID for the Amazon Web Service EKS Cluster " 19 | value = module.eks.cluster_security_group_id 20 | } 21 | -------------------------------------------------------------------------------- /terraform/terraform.tf: -------------------------------------------------------------------------------- 1 | terraform { 2 | required_providers { 3 | aws = { 4 | source = "hashicorp/aws" 5 | version = "~> 5.25.0" 6 | } 7 | 8 | random = { 9 | source = "hashicorp/random" 10 | version = "~> 3.5.1" 11 | } 12 | 13 | tls = { 14 | source = "hashicorp/tls" 15 | version = "~> 4.0.4" 16 | } 17 | 18 | cloudinit = { 19 | source = "hashicorp/cloudinit" 20 | version = "~> 2.3.2" 21 | } 22 | 23 | kubernetes = { 24 | source = "hashicorp/kubernetes" 25 | version = "~> 2.23.0" 26 | } 27 | } 28 | 29 | backend "s3" { 30 | bucket = "gitopsterrastate" 31 | key = "terraform.tfstate" 32 | region = "us-east-2" 33 | } 34 | 35 | required_version = "~> 1.6.3" 36 | } 37 | ## 38 | ## 39 | ## 40 | -------------------------------------------------------------------------------- /terraform/variables.tf: -------------------------------------------------------------------------------- 1 | variable "region" { 2 | description = "AWS region" 3 | type = string 4 | default = "us-east-2" 5 | } 6 | 7 | variable "clusterName" { 8 | description = "Name of the EKS cluster" 9 | type = string 10 | default = "kitops-eks" 11 | } 12 | -------------------------------------------------------------------------------- /terraform/vpc.tf: -------------------------------------------------------------------------------- 1 | module "vpc" { 2 | source = "terraform-aws-modules/vpc/aws" 3 | version = "5.1.2" 4 | 5 | name = "vprofile-eks" 6 | 7 | cidr = "172.20.0.0/16" 8 | azs = slice(data.aws_availability_zones.available.names, 0, 3) 9 | 10 | private_subnets = ["172.20.1.0/24", "172.20.2.0/24", "172.20.3.0/24"] 11 | public_subnets = ["172.20.4.0/24", "172.20.5.0/24", "172.20.6.0/24"] 12 | 13 | enable_nat_gateway = true 14 | single_nat_gateway = true 15 | enable_dns_hostnames = true 16 | 17 | public_subnet_tags = { 18 | "kubernetes.io/cluster/${local.cluster_name}" = "shared" 19 | "kubernetes.io/role/elb" = 1 20 | } 21 | 22 | private_subnet_tags = { 23 | "kubernetes.io/cluster/${local.cluster_name}" = "shared" 24 | "kubernetes.io/role/internal-elb" = 1 25 | } 26 | } 27 | --------------------------------------------------------------------------------