module
TL;DR
- Terraform 모듈을 사용하면 코드 재사용성과 유지보수성이 높아짐.
- 모듈화된 코드는 팀 협업과 인프라 확장에 유리함.
- 입력 변수와 출력을 명확하게 정의하여 모듈 간 의존성을 최소화해야 함.
- 인프라 리소스를 재사용 가능한 단위로 구성한 코드 블록임.
.tf
파일로 구성되며, 입력 변수(variables.tf
)와 출력 값(outputs.tf
)을 포함함. module
블록을 통해 다른 프로젝트에서 쉽게 호출 가능함.
- 재사용성: 동일한 인프라 구성을 여러 프로젝트에서 활용 가능함.
- 유지보수성: 모듈화된 코드를 통해 변경 사항을 쉽게 적용할 수 있음.
- 일관성: 동일한 인프라 구성을 보장하여 운영 리스크를 줄일 수 있음.
- 확장성: 인프라 변경 및 확장을 쉽게 수행할 수 있음.
my-module/
├── main.tf # 리소스 정의
├── variables.tf # 입력 변수 정의
├── outputs.tf # 출력 값 정의
├── README.md # 모듈 설명 문서
variable "instance_type" {
description = "EC2 인스턴스 유형"
type = string
default = "t2.micro"
}
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 모듈을 활용하면 효율적이고 일관된 인프라 구축이 가능함.
- 적절한 모듈화를 통해 팀 협업과 유지보수성을 향상할 수 있음.
- 공식 문서 및 커뮤니티 모듈을 참고하여 모범 사례를 따르는 것이 중요함.