diff --git a/.gitignore b/.gitignore index b7e7326..592238d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea/* target +terraform/.terraform/* \ No newline at end of file diff --git a/terraform/.terraform.lock.hcl b/terraform/.terraform.lock.hcl new file mode 100755 index 0000000..43ae513 --- /dev/null +++ b/terraform/.terraform.lock.hcl @@ -0,0 +1,114 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "3.22.0" + constraints = ">= 2.68.0, >= 3.3.0" + hashes = [ + "h1:f/Tz8zv1Zb78ZaiyJkQ0MGIViZwbYrLuQk3kojPM91c=", + "zh:4a9a66caf1964cdd3b61fb3ebb0da417195a5529cb8e496f266b0778335d11c8", + "zh:514f2f006ae68db715d86781673faf9483292deab235c7402ff306e0e92ea11a", + "zh:5277b61109fddb9011728f6650ef01a639a0590aeffe34ed7de7ba10d0c31803", + "zh:67784dc8c8375ab37103eea1258c3334ee92be6de033c2b37e3a2a65d0005142", + "zh:76d4c8be2ca4a3294fb51fb58de1fe03361d3bc403820270cc8e71a04c5fa806", + "zh:8f90b1cfdcf6e8fb1a9d0382ecaa5056a3a84c94e313fbf9e92c89de271cdede", + "zh:d0ac346519d0df124df89be2d803eb53f373434890f6ee3fb37112802f9eac59", + "zh:d6256feedada82cbfb3b1dd6dd9ad02048f23120ab50e6146a541cb11a108cc1", + "zh:db2fe0d2e77c02e9a74e1ed694aa352295a50283f9a1cf896e5be252af14e9f4", + "zh:eda61e889b579bd90046939a5b40cf5dc9031fb5a819fc3e4667a78bd432bdb2", + ] +} + +provider "registry.terraform.io/hashicorp/kubernetes" { + version = "1.13.3" + constraints = ">= 1.11.1" + hashes = [ + "h1:iV0RArGM0KJ3n0ctwpNzcTkTAnx5G4wV3V3kYkRpJXU=", + "zh:11fd58df9c297a4f3cab82ce8eb2f54f1be27f78fa23be2273ecd545ab254b91", + "zh:5b9e6f352c5666d791e2658a1d18bf0990f3ab70c99c916c393a2ee7f385364c", + "zh:5c94f1350471a5c8e8ee6675874608c506a0bfd3164bdd91b802842723547e2c", + "zh:5d9c5c44dba9addbb86491339012096e74778bb4ea93b70f12333bffba3d05e6", + "zh:6336f9cbb0b580f247cebb97fb7d4cc5e7fe9cc734d8d958d84c4ea3f1e24041", + "zh:bca3b9d4dcbe6f804f5611a83add371dc03b5aa92271f60ebdc2216bfedfab28", + "zh:cbcdc87a593090f490f7899f4f2d302e0c7023155591fcf65e6fadd69f5452f0", + "zh:ec2886a1adbfe3c861b2deb9446369111b9c6116701ae73ef372dc7df5bb3c9e", + "zh:edb5b4172610672bb4d7425511961fda2047b8a00675b99ae6887cd2ece4bda9", + "zh:ff7ea7743246181ea739643d7751c37041c4016eb6bbc39beb1e3b4e99629112", + ] +} + +provider "registry.terraform.io/hashicorp/local" { + version = "1.4.0" + constraints = "~> 1.2, >= 1.4.0" + hashes = [ + "h1:zpODcKdAy9V1Jqfl+gfLvnL7UVwK52QlGJP7bqDtbT4=", + "zh:1b265fcfdce8cc3ccb51969c6d7a61531bf8a6e1218d95c1a74c40f25595c74b", + "zh:2ea6d8c503a1119b80a273eacd187516347c00a54990c47d130235e2ad53d163", + "zh:38bcc4a224d2c0745015564b0803a368b2bd08d1a3e349783bc4c09c68fde24b", + "zh:3fada9c646bf57bcdd6844d7c30153407a2a8100811daa69fc0d674fb39a9d18", + "zh:74ccb372e752188ba4ff1b1280222d6fd61bdf29dcf474edb8ea63178897912c", + "zh:7a323f05ccd7caa1450301af1bb7cac25e2d6ac799eb581219c2c663e5d9ae3f", + "zh:7ef13da7e8ae7129fae8a9c72845d52d4586db496359228ed435aeab2f44aea8", + "zh:9df7edb284f5548918b839b18204c6a78ac33b4df070d4e4a5c264bb11152e9c", + "zh:b062919beaca2e06fd3b333b700dae664828fe734479e51c2c28b8219286e0fc", + "zh:ca9fe963f261236b3f3308f8b4979cdd95dd68281b00c1c18a6d17db07519ac8", + "zh:e125e4a7d838e231a88e0efc1e727f5a1807db5c0cad5e1cbaf1b52c560b47c7", + "zh:f3c3bbab3785f00433135538bdb697d516bc43f102c1b128a0c1419b172e88f6", + ] +} + +provider "registry.terraform.io/hashicorp/null" { + version = "2.1.2" + constraints = ">= 2.1.0, ~> 2.1" + hashes = [ + "h1:l0/ASa/TB1exgqdi33sOkFakJL2zAQBu+q5LgO5/SxI=", + "zh:0cc7236c1fbf971b8bad1540a7d0c5ac4579248239fd1034c023b0b660a8d1d5", + "zh:16fc2d9b10cf9e5123bf956e7032c338cc93a03be1ca2e9f3d3b7014c0e866c7", + "zh:1e26465ff40ded59cef1a9e745752eef9744471e69094d12f8bc40a060e8cdb9", + "zh:3c7afd28076245f455d4348af6c124b73409722be4a73680d4e4709a4f25ea91", + "zh:4190a92567efaa444527f19b28d65fac1a01aeba907013b5dceacd9ba2a23709", + "zh:677963437316b088fc1aac70fe7d608d2917c46530c4a25ec86a43e9acaf2811", + "zh:69fe15f6b851ff82700bc749c50a9299770515617e677c18cba2cb697daaff36", + "zh:6b505cc60cc1494e1cab61590bca127b06dd894d0b2a7dcacd23862bce1f492b", + "zh:719aa11ad7be974085af595089478eb24d5a021bc7b08364fa6745d9eb473dac", + "zh:7375b02189e14efbfaab994cd05d81e3ff8e46041fae778598b3903114093a3e", + "zh:c406573b2084a08f8faa0451923fbeb1ca6c5a5598bf039589ec2db13aacc622", + "zh:fb11299a3b20711595713d126abbbe78c554eb5995b02db536e9253686798fb6", + ] +} + +provider "registry.terraform.io/hashicorp/random" { + version = "2.3.1" + constraints = ">= 2.1.0, ~> 2.1" + hashes = [ + "h1:3L/rQ5ZcgRwOEDHogAIuYYZsh8gB9hpciLBnhyna6f0=", + "zh:322ec2b56765162c193d0ff0f7634351bf4ca09d719558df82b92d31059995a1", + "zh:34c500857d14148bc6f7f21f9fc0d832ba31d00e1b911b0437d99dda29aeb108", + "zh:a3372514add474fcb07d2026a49b0c0d8a699e365f540e43e5f590eb924b95f7", + "zh:a54acd50f13f38a86454acad16b3487701608188fd2cc454fd48beee00127ae5", + "zh:b1285c47ab01fc11b6086f080da7d17b9155b3fac6a4175948a2abb5d52c60af", + "zh:c7e7bd46218cf504ca31d8a1e4eab5cad625c9951fb89d4f56861d5bddec9afb", + "zh:d9f95764480d7b884db7247a5ee9d1c72aaf1c1cde3d7b5e34bc33c4ef5ccf48", + "zh:ddf11fb807d61ff93c08206733129bf9668fc0c4adedf8a6ac38a7c382a24b35", + "zh:f631a0c1ffa94991d87cd5fe4e08c0dd6d36c780585f35a582c05ee2affb7e86", + "zh:fb5f5fb19e8a9ff73dbdee85a97f548099e480497a7a1f4ca4725c83db300b8d", + ] +} + +provider "registry.terraform.io/hashicorp/template" { + version = "2.2.0" + constraints = ">= 2.1.0, ~> 2.1" + hashes = [ + "h1:0wlehNaxBX7GJQnPfQwTNvvAf38Jm0Nv7ssKGMaG6Og=", + "zh:01702196f0a0492ec07917db7aaa595843d8f171dc195f4c988d2ffca2a06386", + "zh:09aae3da826ba3d7df69efeb25d146a1de0d03e951d35019a0f80e4f58c89b53", + "zh:09ba83c0625b6fe0a954da6fbd0c355ac0b7f07f86c91a2a97849140fea49603", + "zh:0e3a6c8e16f17f19010accd0844187d524580d9fdb0731f675ffcf4afba03d16", + "zh:45f2c594b6f2f34ea663704cc72048b212fe7d16fb4cfd959365fa997228a776", + "zh:77ea3e5a0446784d77114b5e851c970a3dde1e08fa6de38210b8385d7605d451", + "zh:8a154388f3708e3df5a69122a23bdfaf760a523788a5081976b3d5616f7d30ae", + "zh:992843002f2db5a11e626b3fc23dc0c87ad3729b3b3cff08e32ffb3df97edbde", + "zh:ad906f4cebd3ec5e43d5cd6dc8f4c5c9cc3b33d2243c89c5fc18f97f7277b51d", + "zh:c979425ddb256511137ecd093e23283234da0154b7fa8b21c2687182d9aea8b2", + ] +} diff --git a/terraform/eks-cluster.tf b/terraform/eks-cluster.tf new file mode 100644 index 0000000..75cb399 --- /dev/null +++ b/terraform/eks-cluster.tf @@ -0,0 +1,43 @@ +provider "kubernetes" { + load_config_file = "false" + host = data.aws_eks_cluster.myapp-cluster.endpoint + token = data.aws_eks_cluster_auth.myapp-cluster.token + cluster_ca_certificate = base64decode(data.aws_eks_cluster.myapp-cluster.certificate_authority.0.data) +} + +data "aws_eks_cluster" "myapp-cluster" { + name = module.eks.cluster_id +} + +data "aws_eks_cluster_auth" "myapp-cluster" { + name = module.eks.cluster_id +} + +module "eks" { + source = "terraform-aws-modules/eks/aws" + version = "13.2.1" + + cluster_name = var.cluster_name + cluster_version = var.k8s_version + + subnets = module.myapp-vpc.private_subnets + vpc_id = module.myapp-vpc.vpc_id + + tags = { + environment = var.env_prefix + application = "myapp" + } + + worker_groups = [ + { + instance_type = "t2.small" + name = "worker-group-1" + asg_desired_capacity = 2 + }, + { + instance_type = "t2.medium" + name = "worker-group-2" + asg_desired_capacity = 1 + } + ] +} \ No newline at end of file diff --git a/terraform/variables.tf b/terraform/variables.tf new file mode 100644 index 0000000..0663d77 --- /dev/null +++ b/terraform/variables.tf @@ -0,0 +1,27 @@ +variable env_prefix { + default = "dev" +} + +variable region { + default = "eu-west-3" +} + +variable vpc_cidr_block { + default = "10.0.0.0/16" +} + +variable private_subnet_cidr_blocks { + default = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"] +} + +variable public_subnet_cidr_blocks { + default = ["10.0.4.0/24", "10.0.5.0/24", "10.0.6.0/24"] +} + +variable k8s_version { + default = "1.17" +} + +variable cluster_name { + default = "myapp-eks-cluster" +} diff --git a/terraform/versions.tf b/terraform/versions.tf new file mode 100644 index 0000000..2851b0f --- /dev/null +++ b/terraform/versions.tf @@ -0,0 +1,17 @@ +terraform { + required_version = ">= 0.12" + required_providers { + random = "~> 2.1" + local = "~> 1.2" + null = "~> 2.1" + template = "~> 2.1" + } +} + +/* +** Defining provider versions inside provider block deprecated in Terraform 0.13 and above +** +provider "random" { + version = "~> 2.1" +} +*/ \ No newline at end of file diff --git a/terraform/vpc.tf b/terraform/vpc.tf new file mode 100644 index 0000000..52a950c --- /dev/null +++ b/terraform/vpc.tf @@ -0,0 +1,35 @@ +provider "aws" { + region = var.region +} + +data "aws_availability_zones" "available" {} + +module "myapp-vpc" { + source = "terraform-aws-modules/vpc/aws" + version = "2.64.0" + + name = "myapp-vpc" + cidr = var.vpc_cidr_block + private_subnets = var.private_subnet_cidr_blocks + public_subnets = var.public_subnet_cidr_blocks + azs = data.aws_availability_zones.available.names + + enable_nat_gateway = true + single_nat_gateway = true + enable_dns_hostnames = true + + tags = { + "kubernetes.io/cluster/${var.cluster_name}" = "shared" + } + + public_subnet_tags = { + "kubernetes.io/cluster/${var.cluster_name}" = "shared" + "kubernetes.io/role/elb" = 1 + } + + private_subnet_tags = { + "kubernetes.io/cluster/${var.cluster_name}" = "shared" + "kubernetes.io/role/internal-elb" = 1 + } + +}