데브포일 홈
DEV MODE - 실서버 영향 없음 📦 배포 관리
Terraform IaC & 인프라 자동화
+650 XP
LEVEL 99 QUEST

Terraform IaC & 인프라 자동화

terraform apply 한 번으로 전체 인프라 배포! VPC, K8s, RDS, ElastiCache, Kafka 클러스터까지 코드 한 줄로 만드는 IaC

LEVEL 99 - INFRASTRUCTURE AS CODE

Terraform IaC & 인프라 자동화

$ terraform apply

코드 한 줄로 VPC, EKS, RDS, ElastiCache, Kafka 클러스터 전부 배포!
수동으로 AWS 콘솔 클릭하던 시대는 끝났습니다

HashiCorp Terraform으로 인프라를 코드로 선언하고, 버전 관리하고, 자동 배포합니다

1 Terraform 모듈 아키텍처

하나의 거대한 main.tf에 모든 것을 넣으면 관리가 불가능합니다.
VPC, EKS, RDS, ElastiCache, MSK(Kafka) 각각을 독립 모듈로 분리합니다.
이것이 FAANG에서 수백 개의 인프라를 관리하는 방법입니다.

terraform/
  modules/
    vpc/ # VPC, Subnet, NAT Gateway, Route Table
    eks/ # EKS 클러스터, Node Groups, IRSA
    rds/ # PostgreSQL Multi-AZ, Read Replica
    elasticache/ # Redis Cluster Mode, Failover
    msk/ # Kafka 클러스터, Topic 자동 생성
    monitoring/ # CloudWatch, Prometheus, Grafana
  environments/
    dev.tfvars # 개발 환경 변수
    staging.tfvars # 스테이징 환경 변수
    prod.tfvars # 프로덕션 환경 변수
  main.tf # 모듈 조합 (오케스트레이션)
  backend.tf # S3 + DynamoDB 상태 관리
  variables.tf # 공통 변수 정의
  outputs.tf # 출력값 (endpoint, ARN 등)
main.tf - 모듈 오케스트레이션
// main.tf - 전체 인프라 오케스트레이션
module "vpc" {
  source = "./modules/vpc"
  env    = var.environment
  cidr   = var.vpc_cidr
  azs    = ["ap-northeast-2a", "ap-northeast-2b", "ap-northeast-2c"]

  private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
  public_subnets = ["10.0.101.0/24", "10.0.102.0/24", "10.0.103.0/24"]

  enable_nat_gateway  = true
  single_nat_gateway  = var.environment != "prod"
  enable_flow_logs    = true
}

module "eks" {
  source         = "./modules/eks"
  cluster_name   = "shorts-${var.environment}"
  cluster_version = "1.29"
  vpc_id         = module.vpc.vpc_id
  subnet_ids     = module.vpc.private_subnet_ids

  node_groups = {
    gpu  = { instance_types = ["g5.2xlarge"], min = 1, max = 10 }
    cpu  = { instance_types = ["c6i.2xlarge"], min = 3, max = 20 }
    spot = { instance_types = ["m6i.xlarge"], min = 0, max = 30, capacity = "SPOT" }
  }
}

module "rds" {
  source          = "./modules/rds"
  engine          = "postgres"
  engine_version  = "16.1"
  instance_class  = var.environment == "prod" ? "db.r6g.2xlarge" : "db.t4g.medium"
  multi_az        = var.environment == "prod"
  read_replicas   = var.environment == "prod" ? 2 : 0
  vpc_id          = module.vpc.vpc_id
  subnet_ids      = module.vpc.private_subnet_ids
  backup_retention = 30
}

module "elasticache" {
  source        = "./modules/elasticache"
  engine        = "redis"
  node_type     = var.environment == "prod" ? "cache.r6g.xlarge" : "cache.t4g.micro"
  cluster_mode  = var.environment == "prod"
  num_shards    = var.environment == "prod" ? 3 : 1
  replicas_per_shard = 2
  vpc_id        = module.vpc.vpc_id
  subnet_ids    = module.vpc.private_subnet_ids
}

module "msk" {
  source         = "./modules/msk"
  cluster_name   = "shorts-kafka-${var.environment}"
  kafka_version  = "3.6.0"
  broker_count   = var.environment == "prod" ? 6 : 3
  instance_type  = var.environment == "prod" ? "kafka.m5.2xlarge" : "kafka.t3.small"
  ebs_volume_size = var.environment == "prod" ? 1000 : 100
  vpc_id         = module.vpc.vpc_id
  subnet_ids     = module.vpc.private_subnet_ids
}
6
독립 모듈
3
환경 (dev/stg/prod)
1
apply로 전체 배포
🔒
여기까지는 미리보기입니다
Terraform IaC & 인프라 자동화
무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.
Google로 3초 만에 시작 →🧵 Threads로 시작무료 공개 강의 둘러보기 (Lv.1~3)