required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.47.0"
}
provider "aws" {
region = var.region
shared_credentials_files = ["$HOME/.aws/credentials"]
profile = "default"
}
# data "aws_availability_zones" "available" {}
locals {
cluster_name = "joo-eks" //수정
}
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "3.19.0"
name = "joo-vpc"
cidr = "20.0.0.0/16"
# azs = slice(data.aws_availability_zones.available.names, 0, 3)
azs = ["ap-northeast-2a", "ap-northeast-2c"]
private_subnets = ["20.0.1.0/24", "20.0.2.0/24"]
public_subnets = ["20.0.4.0/24", "20.0.5.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
}
}
module "s3_bucket" {
source = "terraform-aws-modules/s3-bucket/aws"
bucket = "test.s3.bucket.for.joo.team"
acl = "private"
versioning = {
enabled = true
}
}
module "eks" {
source = "terraform-aws-modules/eks/aws"
version = "19.10.0"
cluster_name = local.cluster_name
cluster_version = "1.24"
vpc_id = module.vpc.vpc_id
subnet_ids = module.vpc.private_subnets
cluster_endpoint_public_access = true
eks_managed_node_group_defaults = {
ami_type = "AL2_x86_64"
}
eks_managed_node_groups = {
one = {
name = "joo-eks-node-group-1"
instance_types = ["t2.medium"]
min_size = 1
max_size = 2
desired_size = 1
subnets = [module.vpc.private_subnets[0]]
}
two = {
name = "joo-eks-node-group-2"
instance_types = ["t2.medium"]
min_size = 1
max_size = 2
desired_size = 1
subnets = [module.vpc.private_subnets[1]]
}
}
}
eks_managed_node_groups = {
one = {
name = "joo-eks-node-group-1"
instance_types = ["t2.medium"]
min_size = 1
max_size = 2
desired_size = 1
subnets = [module.vpc.private_subnets[0]]
}
two = {
name = "joo-eks-node-group-2"
instance_types = ["t2.medium"]
min_size = 1
max_size = 2
desired_size = 1
subnets = [module.vpc.private_subnets[1]]
}
locals {
cluster_name = "joo-eks" //수정
az_subnet_mapping = {
"ap-northeast-2a" = "20.0.1.0/24"
"ap-northeast-2c" = "20.0.2.0/24"
}
}
eks_managed_node_groups = {
one = {
name = "joo-eks-node-group-1"
instance_types = ["t2.medium"]
min_size = 1
max_size = 2
desired_size = 1
subnets = [local.az_subnet_mapping["ap-northeast-2a"]]
}
two = {
name = "joo-eks-node-group-2"
instance_types = ["t2.medium"]
min_size = 1
max_size = 2
desired_size = 1
subnets = [local.az_subnet_mapping["ap-northeast-2c"]]
}
}
Terraform 스크립트에서 사용할 수 있는 로컬 변수를 정의하는 데 사용되는 블록이다.
로컬 변수는 중복을 줄이고 코드를 재사용하기 쉽게 만드는 데 도움이 된다
locals 블록 안에서 정의된 변수는 local.변수명
형식으로 참조할 수 있다.
variables.tf 파일은 입력 변수를 정의하는 데 사용되고, 입력 변수는 Terraform 구성 외부에서 전달되는 값이다.
이를 사용하면 사용자나 다른 Terraform 모듈로부터 값을 받아와 동적으로 구성할 수 있다는 장점이 있다.
입력 변수는 var.변수명 형식으로 참조하며 variables.tf 파일에 아래와 같이 변수를 정의할 수 있다.
variable "region" {
description = "The AWS region to deploy the resources."
default = "us-west-2"
}
Terraform 구성 내부에서 사용되는 로컬 변수를 정의하는 데 사용된다
로컬 변수는 중복을 줄이고 코드의 가독성과 재사용성을 높이는데 도움이 될 수 있으며, 로컬 변수는 local.변수명
형식으로 참조가능하다.
예를 들어, locals 블록에 아래와 같이 변수를 정의할 수 있다.
locals {
cluster_name = "joo-eks"
}