개요
2025.10.31-[Terraform] 변수와 Output에서 Terraform 코드를 보다 동적으로 구성할 수 있게 하는 변수와 Output을 살펴보았다. 이번 글에서도 비슷한 목적을 위한 module 개념을 적어둔다.
Modules
Terraform에서의 Modules란 재사용할 수 있는 구성 세트를 뜻하는데, 여러 리소스와 데이터 소스를 포함한 인프라 배포를 일관성 있게 관리할 수 있게 한다. 다른 프로그래밍과 마찬가지로 재사용성을 위한 개념이다. Provider와 동일하게 테라폼 레지스트리에서 제공하고 있으므로 제공되는 모듈을 사용할 수 있고, 자체적인 모듈을 생성해 공유할 수도 있다.

아래 예시는 두 개의 퍼블릭 서브넷과 두 개의 프라이빗 서브넷을 포함하는 VPC를 정의한다.
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "5.19.0"
name = "example-vpc"
cidr = "10.0.0.0/16"
azs = ["us-west-2a", "us-west-2b", "us-west-2c"]
private_subnets = ["10.0.1.0/24", "10.0.2.0/24"]
public_subnets = ["10.0.101.0/24"]
enable_dns_hostnames = true
}
Modules 관련 개념
루트 모듈/자식 모듈
Modules는 크게 작업 공간 내 위치에 따라 구분할 수 있는데, 루트 디렉터리의 구성 파일은 루트 모듈이라고 하고 module 블록을 사용한 모듈은 자식 모듈이라고 한다. 테라폼 코드를 적용하면 루트 모듈이 자식 모듈을 호출하며, 자식 모듈의 리소스를 작업 공간에 추가하고 관리한다.
Source
모듈에서 소스란 모듈을 로드하는 위치로, 테라폼은 로컬 파일 시스템, 테라폼 레지스트리, VCS 저장소 등에서 모듈을 로드할 수 있다. 테라폼 레지스트리에서는 다양한 공통 인프라를 구성하기 위해 널리 사용하는 테라폼 모듈을 호스팅 하며, 이 모듈은 Hashicorp와 그 파트너사, 테라폼 커뮤니티에서 관리한다.
참고 문서
https://developer.hashicorp.com/terraform/tutorials/aws-get-started/aws-manage#modules
https://developer.hashicorp.com/terraform/language/modules