Skip to content

module

TL;DR

  • Terraform 모듈을 사용하면 코드 재사용성과 유지보수성이 높아짐.
  • 모듈화된 코드는 팀 협업과 인프라 확장에 유리함.
  • 입력 변수와 출력을 명확하게 정의하여 모듈 간 의존성을 최소화해야 함.

Terraform 모듈이란?

  • 인프라 리소스를 재사용 가능한 단위로 구성한 코드 블록임.
  • .tf 파일로 구성되며, 입력 변수(variables.tf)와 출력 값(outputs.tf)을 포함함.
  • module 블록을 통해 다른 프로젝트에서 쉽게 호출 가능함.

Terraform 모듈의 장점

  • 재사용성: 동일한 인프라 구성을 여러 프로젝트에서 활용 가능함.
  • 유지보수성: 모듈화된 코드를 통해 변경 사항을 쉽게 적용할 수 있음.
  • 일관성: 동일한 인프라 구성을 보장하여 운영 리스크를 줄일 수 있음.
  • 확장성: 인프라 변경 및 확장을 쉽게 수행할 수 있음.

Terraform 모듈 구성 방법

  • 디렉토리 구조:
my-module/
├── main.tf       # 리소스 정의
├── variables.tf  # 입력 변수 정의
├── outputs.tf    # 출력 값 정의
├── README.md     # 모듈 설명 문서
  • 입력 변수 정의 (variables.tf):
variable "instance_type" {
  description = "EC2 인스턴스 유형"
  type        = string
  default     = "t2.micro"
}
  • 출력 값 정의 (outputs.tf):
output "instance_id" {
  description = "생성된 EC2 인스턴스 ID"
  value       = aws_instance.my_instance.id
}

모듈 사용 방법

  • 모듈 호출 예시:
module "web" {
  source        = "./my-module"
  instance_type = "t3.medium"
}
  • 로컬 경로 외에도 GitHub, S3, Terraform Registry에서 모듈을 가져올 수 있음.

모듈 적용 시 유의할 점

  • 입출력 명확성: 사용자가 모듈을 쉽게 이해할 수 있도록 문서화 필요함.
  • 변경 시 영향도 분석: 버전 관리를 통해 하위 호환성을 보장해야 함.
  • 보안 고려: 모듈 내부에 하드코딩된 민감 정보를 피해야 함.

모듈 디버깅 및 테스트 방법

  • terraform plan을 통해 예상 변경 사항을 검토함.
  • terraform validate를 이용해 구문 오류를 사전에 확인함.
  • 로컬 환경에서 작은 단위로 모듈을 테스트하고 점진적으로 확장함.

마무리

  • Terraform 모듈을 활용하면 효율적이고 일관된 인프라 구축이 가능함.
  • 적절한 모듈화를 통해 팀 협업과 유지보수성을 향상할 수 있음.
  • 공식 문서 및 커뮤니티 모듈을 참고하여 모범 사례를 따르는 것이 중요함.