참고: https://registry.terraform.io/modules/terraform-aws-modules/vpc/aws/latest
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "~> 3.19.0"
name = "terraform-vpc"
cidr = "${lookup(var.cidr_ab, var.environment)}.0.0/16"
private_subnets = local.private_subnets
public_subnets = local.public_subnets
azs = local.availability_zones
enable_dns_hostnames = true
enable_dns_support = true
create_igw = true
}
resource "aws_default_route_table" "terraform-route-table" {
default_route_table_id = module.vpc.default_route_table_id
route {
cidr_block = "0.0.0.0/0"
gateway_id = module.vpc.igw_id
}
}
subnet의 route table에 gateway가 없으면 아래와 같은 에러 메세지가 뜨면서 조인 안됨 → 참고
Instances failed to join the kubernetes cluster
resource "aws_eks_cluster" "terraform_pipeline_cluster" {
name = var.cluster
version = var.kubernetes_version
role_arn = var.role_arn
vpc_config {
subnet_ids = var.subnet_ids
endpoint_private_access = false
endpoint_public_access = true
}
# Ensure that IAM Role permissions are created before and deleted after EKS Cluster handling.
# Otherwise, EKS will not be able to properly delete EKS managed EC2 infrastructure such as Security Groups.
depends_on = [
var.cluster_policy_role,
var.vpn_resource_controller_role,
]
}
모듈로 생성
module "cluster" {
source = "../../modules/cluster"
cluster = var.cluster
kubernetes_version = var.kubernetes_version
role_arn = module.aws_iam.aws_iam_role
subnet_ids = module.vpc.public_subnets
cluster_policy_role = module.aws_iam.aws_iam_eks_cluster_policy_role
vpn_resource_controller_role = module.aws_iam.aws_iam_vpc_resource_controller_role
}
resource "aws_eks_node_group" "terraform_pipeline_node_group" {
cluster_name = var.cluster
node_group_name = var.name
node_role_arn = var.role_arn
subnet_ids = var.subnet_ids
disk_size = var.disk_size
instance_types = var.instance_types
scaling_config {
desired_size = var.desired_size
min_size = var.min_size
max_size = var.max_size
}
update_config {
max_unavailable = var.max_unavailable
}
# Ensure that IAM Role permissions are created before and deleted after EKS Node Group handling.
# Otherwise, EKS will not be able to properly delete EC2 Instances and Elastic Network Interfaces.
depends_on = [
var.node_policy_role,
var.cni_policy_role,
var.ecr_policy_role,
]
}
cluster에 위에서 만든 cluster name을 넣어주면 자동으로 join이 됨
모듈로 만들기
module "cpu_node_group" {
source = "../../modules/node_group"
cluster = module.cluster.name
name = "cpu-node-group"
role_arn = module.aws_iam.aws_iam_role
subnet_ids = module.vpc.public_subnets
disk_size = 100
instance_types = ["t3.large"]
desired_size = 1
min_size = 1
max_size = 3
max_unavailable = 1
node_policy_role = module.aws_iam.aws_iam_node_policy_role
cni_policy_role = module.aws_iam.aws_iam_cni_policy_role
ecr_policy_role = module.aws_iam.aws_iam_ecr_policy_role
}