diff --git a/.github/workflows/terrafrom.yml b/.github/workflows/terrafrom.yml new file mode 100644 index 000000000..42ed75618 --- /dev/null +++ b/.github/workflows/terrafrom.yml @@ -0,0 +1,62 @@ +name: "Vprofile IAC" +on: + push: + branches: + - main + - stage + paths: + - terraform/** + pull_request: + branches: + - main + paths: + - terraform/** + +env: + # Credentials for deployment to AWS + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + # S3 bucket for the Terraform state + BUCKET_TF_STATE: ${{ secrets.BUCKET_TF_STATE}} + AWS_REGION: us-east-1 # Update this to the correct region if needed + EKS_CLUSTER: vprofile-eks + +jobs: + terraform: + name: "Apply terraform code changes" + runs-on: ubuntu-latest + defaults: + run: + shell: bash + working-directory: ./terraform + + steps: + - name: Checkout source code + uses: actions/checkout@v4 + + - name: Setup Terraform with specified version on the runner + uses: hashicorp/setup-terraform@v2 + + - name: Terraform init + id: init + run: terraform init -backend-config="bucket=$BUCKET_TF_STATE" + + - name: Terraform format + id: fmt + run: terraform fmt -check + + - name: Terraform validate + id: validate + run: terraform validate + + - name: Terraform plan + id: plan + run: terraform plan -no-color -input=false -out planfile + continue-on-error: true + + - name: Terraform plan status + if: steps.plan.outcome == 'failure' + run: exit 1 + + - name: Update kubeconfig + run: aws eks update-kubeconfig --region $AWS_REGION --name $EKS_CLUSTER \ No newline at end of file diff --git a/terraform/main.tf b/terraform/main.tf index 94b6fc75a..563bbab9e 100644 --- a/terraform/main.tf +++ b/terraform/main.tf @@ -1,8 +1,3 @@ -provider "kubernetes" { - host = module.eks.cluster_endpoint - cluster_ca_certificate = base64decode(module.eks.cluster_certificate_authority_data) -} - provider "aws" { region = var.region } @@ -10,7 +5,67 @@ provider "aws" { data "aws_availability_zones" "available" {} locals { - cluster_name = var.clusterName + cluster_name = var.cluster_name +} + +module "vpc" { + source = "terraform-aws-modules/vpc/aws" + version = "5.1.2" + + name = local.cluster_name + cidr = "172.20.0.0/16" + azs = slice(data.aws_availability_zones.available.names, 0, 3) + + private_subnets = [ + "172.20.1.0/24", + "172.20.2.0/24", + "172.20.3.0/24" + ] + + public_subnets = [ + "172.20.4.0/24", + "172.20.5.0/24", + "172.20.6.0/24" + ] + + enable_nat_gateway = true + single_nat_gateway = true + enable_dns_hostnames = true + + public_subnet_tags = { + "kubernetes.io/cluster/${local.cluster_name}" = "shared" + "kubernetes.io/role/elb" = 1 + } + + private_subnet_tags = { + "kubernetes.io/cluster/${local.cluster_name}" = "shared" + "kubernetes.io/role/internal-elb" = 1 + } } -## \ No newline at end of file +module "eks" { + source = "terraform-aws-modules/eks/aws" + version = "20.8.4" + + cluster_name = local.cluster_name + cluster_version = "1.29" + + subnet_ids = module.vpc.private_subnets + vpc_id = module.vpc.vpc_id + + enable_irsa = true + + eks_managed_node_groups = { + default = { + instance_types = ["t3.medium"] + desired_size = 2 + max_size = 3 + min_size = 1 + } + } + + tags = { + Environment = "dev" + Terraform = "true" + } +} diff --git a/terraform/outputs.tf b/terraform/outputs.tf index 7d55c64ae..a42e3c8c5 100644 --- a/terraform/outputs.tf +++ b/terraform/outputs.tf @@ -18,3 +18,6 @@ output "cluster_security_group_id" { description = "Security group ID for the Amazon Web Service EKS Cluster " value = module.eks.cluster_security_group_id } + + +## \ No newline at end of file diff --git a/terraform/terraform.tf b/terraform/terraform.tf index 67b75c673..c07da7f42 100644 --- a/terraform/terraform.tf +++ b/terraform/terraform.tf @@ -4,22 +4,18 @@ terraform { source = "hashicorp/aws" version = "~> 5.25.0" } - random = { source = "hashicorp/random" version = "~> 3.5.1" } - tls = { source = "hashicorp/tls" version = "~> 4.0.4" } - cloudinit = { source = "hashicorp/cloudinit" version = "~> 2.3.2" } - kubernetes = { source = "hashicorp/kubernetes" version = "~> 2.23.0" @@ -27,13 +23,13 @@ terraform { } backend "s3" { - bucket = "gitopsterrastate" + bucket = "gitops2003" key = "terraform.tfstate" region = "us-east-2" } - required_version = "~> 1.6.3" + required_version = ">=1.6.3, <=1.11.3" } -## -## -## + + +###### \ No newline at end of file diff --git a/terraform/variables.tf b/terraform/variables.tf index a41d982a0..a19305832 100644 --- a/terraform/variables.tf +++ b/terraform/variables.tf @@ -4,8 +4,11 @@ variable "region" { default = "us-east-2" } -variable "clusterName" { +variable "cluster_name" { description = "Name of the EKS cluster" type = string - default = "kitops-eks" + default = "vprofile-eks" } + + +## \ No newline at end of file