1+ terraform {
2+ required_version = " >= 0.12.0"
3+ }
4+
5+ provider "aws" {
6+ version = " >= 2.28.1"
7+ region = var. region
8+ }
9+
10+ provider "random" {
11+ version = " ~> 2.1"
12+ }
13+
14+ provider "local" {
15+ version = " ~> 1.2"
16+ }
17+
18+ provider "null" {
19+ version = " ~> 2.1"
20+ }
21+
22+ provider "template" {
23+ version = " ~> 2.1"
24+ }
25+
26+ data "aws_eks_cluster" "cluster" {
27+ name = module. eks . cluster_id
28+ }
29+
30+ data "aws_eks_cluster_auth" "cluster" {
31+ name = module. eks . cluster_id
32+ }
33+
34+ provider "kubernetes" {
35+ host = data. aws_eks_cluster . cluster . endpoint
36+ cluster_ca_certificate = base64decode (data. aws_eks_cluster . cluster . certificate_authority . 0 . data )
37+ token = data. aws_eks_cluster_auth . cluster . token
38+ load_config_file = false
39+ version = " ~> 1.11"
40+ }
41+
42+ data "aws_availability_zones" "available" {
43+ }
44+
45+ locals {
46+ cluster_name = " ${ var . name_prefix } -${ random_string . suffix . result } "
47+ }
48+
49+ resource "random_string" "suffix" {
50+ length = 8
51+ special = false
52+ }
53+
54+ resource "aws_security_group" "all_worker_mgmt" {
55+ name_prefix = " ${ var . name_prefix } -worker"
56+ vpc_id = module. vpc . vpc_id
57+ }
58+
59+ module "vpc" {
60+ source = " terraform-aws-modules/vpc/aws"
61+ version = " 2.47.0"
62+
63+ name = " ${ var . name_prefix } -vpc"
64+ cidr = " 10.0.0.0/16"
65+ azs = data. aws_availability_zones . available . names
66+ private_subnets = [" 10.0.1.0/24" , " 10.0.2.0/24" , " 10.0.3.0/24" ]
67+ public_subnets = [" 10.0.4.0/24" , " 10.0.5.0/24" , " 10.0.6.0/24" ]
68+ enable_nat_gateway = true
69+ single_nat_gateway = true
70+ enable_dns_hostnames = true
71+
72+ public_subnet_tags = {
73+ " kubernetes.io/cluster/${local.cluster_name}" = " shared"
74+ " kubernetes.io/role/elb" = " 1"
75+ }
76+
77+ private_subnet_tags = {
78+ " kubernetes.io/cluster/${local.cluster_name}" = " shared"
79+ " kubernetes.io/role/internal-elb" = " 1"
80+ }
81+ }
82+
83+ module "eks" {
84+ source = " terraform-aws-modules/eks/aws"
85+ version = " 12.2.0"
86+
87+ cluster_name = local. cluster_name
88+ cluster_version = " 1.17"
89+ subnets = module. vpc . private_subnets
90+
91+ tags = {
92+ Environment = " test"
93+ GithubRepo = " terraform-aws-eks"
94+ GithubOrg = " terraform-aws-modules"
95+ }
96+
97+ vpc_id = module. vpc . vpc_id
98+
99+ worker_groups = [
100+ {
101+ name = " worker-group-1"
102+ instance_type = " r3.large"
103+ asg_desired_capacity = 2
104+ },
105+ {
106+ name = " worker-group-2"
107+ instance_type = " r3.large"
108+ asg_desired_capacity = 1
109+ },
110+ ]
111+
112+ worker_additional_security_group_ids = [aws_security_group . all_worker_mgmt . id ]
113+ map_roles = var. map_roles
114+ map_accounts = var. map_accounts
115+
116+ workers_additional_policies = [aws_iam_policy . worker_policy . id ]
117+ }
0 commit comments