Terraform 모듈(Module) 활용

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"]
}

📦 Terraform Registry


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 공개 저장소에서 검증된 모듈 활용 가능

RSS Feed
마지막 수정일자