Terraform 모듈(Module) 활용
1️⃣ 모듈(Module)의 개념 및 필요성
1 모듈이란?
Terraform에서 모듈(Module) 은 하나 이상의 .tf
파일을 묶은 재사용 가능한 코드 단위입니다.
- 마치 프로그래밍의 함수처럼 여러 번 재사용 가능
- 공통 인프라 구성 반복 방지
- 코드 구성, 유지보수 효율성 향상
📌 예시 구조 (EC2를 만드는 모듈)
modules/
└── ec2_instance/
├── main.tf
├── variables.tf
└── outputs.tf
💡 모듈을 사용하면 “DRY(Don’t Repeat Yourself)” 원칙을 Terraform에 적용할 수 있습니다.
2️⃣ 루트 모듈(Root Module)과 하위 모듈(Sub Module)
1 루트 모듈이란?
Terraform을 실행하는 디렉토리에 있는 코드.
사용자 terraform apply
를 수행하는 위치.
📂 예:
/project
├── main.tf ← 루트 모듈
└── modules/
└── vpc/ ← 하위 모듈
2 하위 모듈이란?
루트 모듈에서 호출되는 모듈 단위의 디렉토리
→ module
블록으로 정의됨
module "vpc" {
source = "./modules/vpc"
cidr_block = "10.0.0.0/16"
}
3️⃣ 모듈 생성 및 재사용
1 모듈 생성
모듈은 일반 Terraform 구성처럼 작성합니다.
📁 예시: modules/ec2_instance/main.tf
resource "aws_instance" "example" {
ami = var.ami_id
instance_type = var.instance_type
}
📁 예시: variables.tf
variable "ami_id" {}
variable "instance_type" {
default = "t2.micro"
}
📁 예시: outputs.tf
output "instance_id" {
value = aws_instance.example.id
}
2 모듈 재사용
루트 모듈에서 여러 번 호출할 수 있습니다.
module "web_server_1" {
source = "./modules/ec2_instance"
ami_id = "ami-0abcdef1234567890"
instance_type = "t2.micro"
}
module "web_server_2" {
source = "./modules/ec2_instance"
ami_id = "ami-0abcdef1234567890"
instance_type = "t3.micro"
}
4️⃣ 모듈 버전 관리 및 원격 저장소(Git, Terraform Registry) 활용
1 Git 저장소 활용
GitHub 등에서 직접 모듈을 가져올 수 있습니다.
module "vpc" {
source = "git::https://github.com/your-org/terraform-aws-vpc.git?ref=v1.0.0"
}
2 Terraform Registry 활용
Terraform 공식 모듈 저장소를 활용하면 인증된 모듈을 쉽게 사용 가능
🔗 예시:
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "5.1.0"
name = "my-vpc"
cidr = "10.0.0.0/16"
azs = ["us-west-1a", "us-west-1b"]
public_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
}
5️⃣ 모듈 입력(input variables)과 출력(output values)
1 입력 변수 (Input Variables)
모듈의 동작을 외부에서 제어할 수 있도록 값 전달
📁 variables.tf
variable "instance_type" {
description = "EC2 인스턴스 타입"
default = "t2.micro"
}
📁 호출부
module "web_server" {
source = "./modules/ec2_instance"
instance_type = "t3.micro"
}
2 출력 변수 (Output Values)
모듈에서 중요한 값을 외부로 전달
📁 outputs.tf
output "public_ip" {
value = aws_instance.example.public_ip
}
📁 루트 모듈에서 사용
terraform output web_server.public_ip
📌 정리
구성 요소 | 설명 |
---|---|
모듈(Module) | 재사용 가능한 코드 단위 |
루트 모듈 | Terraform 실행 디렉토리 |
하위 모듈 | 루트 모듈에서 호출하는 모듈 |
input/output | 변수 전달 및 결과 출력 |
Registry | 공개 저장소에서 검증된 모듈 활용 가능 |
마지막 수정일자