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 등)
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)무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.