이번 게시글에서는 Terraform으로 EKS 구성하기(1) 에서 작성했던 main.tf 가 AWS의 어떤 인프라스트럭처들을 생성하게 되는지 알아보겠습니다.

provider "aws" {
  region = var.region
	access_key = "AWS_ACCESS_KEY"
  secret_key = "AWS_SECRET_KEY"
}

data "aws_availability_zones" "available" {}

locals {
  cluster_name = "education-eks-${random_string.suffix.result}"
}

resource "random_string" "suffix" {
  length  = 8
  special = false
}

module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "3.19.0"

  name = "education-vpc"

  cidr = "10.0.0.0/16"
  azs  = slice(data.aws_availability_zones.available.names, 0, 3)

  private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
  public_subnets  = ["10.0.4.0/24", "10.0.5.0/24", "10.0.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
  }
}

module "eks" {
  source  = "terraform-aws-modules/eks/aws"
  version = "19.5.1"

  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 = "node-group-1"

      instance_types = ["t3.small"]

      min_size     = 1
      max_size     = 3
      desired_size = 2
    }

    two = {
      name = "node-group-2"

      instance_types = ["t3.small"]

      min_size     = 1
      max_size     = 2
      desired_size = 1
    }
  }
}

위 Terraform 코드를 실행하면 다음과 같은 AWS 인프라스트럭처가 생성됩니다.

  1. VPC (Virtual Private Cloud): module.vpc
  2. EKS (Elastic Kubernetes Service): module.eks

위 코드에서 사용된 AWS 리소스는 다음과 같습니다.

위와 같이 인프라스트럭처를 Terraform으로 관리하면 코드 버전 관리, 인프라 변경 사항 추적, 일관된 인프라 구성 등의 이점을 얻을 수 있습니다.


위의 코드는 AWS EKS 클러스터를 구성하는 Terraform 코드입니다.

Terraform은 인프라스트럭처를 코드로 관리할 수 있도록 도와주는 도구이며, AWS의 다양한 서비스들을 Terraform 모듈로 제공하고 있습니다.

위의 코드에서는 AWS EKS 클러스터를 구성하기 위해 다음과 같은 Terraform 모듈을 사용하고 있습니다.

코드의 구성을 살펴보면, 우선 AWS 프로바이더를 설정하고 지역(region) 정보를 변수로 받아와 설정합니다. 그리고 사용 가능한 가용 영역 정보를 조회하기 위해 **data "aws_availability_zones" "available" {}**를 사용합니다.

이어서, random_string 모듈을 사용하여 클러스터 이름을 랜덤하게 생성하고 로컬 변수(local)에 저장합니다.