prod와 stage(나 dev) 등 여러 스테이지에 같은 코드를 복사 붙여넣기 하는 것은 번거로운 작업

여러번 사용하는 코드를 테라폼 모듈에 넣고 전체 코드의 여러 위치에서 해당 모듈을 재사용 가능

⇒ 재사용, 유지 관리, 테스트 코드 작성에 핵심 요소

모듈

폴더에 있는 모든 테라폼 구성 파일은 모듈.

Untitled

Untitled

이런식으로 모듈에 있는 모든 .tf 파일들을 source만 작성하면 코드 복사 없이 prod/와 stage/에서 사용가능하다

module "<NAME>" {
	source = "<SOURCE>" # 경로

	[CONFIG ...]
}

그런데 이런식으로 작성하게 되면 prod/와 stage/에서 모듈을 두 번 사용하였기 때문에 리소스 이름의 충돌이 발생한다. 또한 terrafrom_remote_state 데이터 소스를 사용해 데이터베이스의 주소와 포트를 파악하기 때문에 데이터베이스 세부 사항도 하드 코딩 되어있는 셈. 근데 기억을 되짚어 보면 terraform_remote_state가 stage 환경을 살펴보기 위해 하드 코딩되어 있기 때문에 prod와 stage 충돌 가능

⇒ webserver-cluster 모듈에 구성 가능한 입력을 추가해 다른 환경에서는 다르게 작동하도록 해야 함

모듈 입력

입력 변수를 추가

Untitled

모듈에 variables.tf를 만들어 다르게 가져가야할 변수들을 지정함으로써 하드 코딩된 값들을 각 환경마다 다르게 설정 가능

“t2.micro” 와 같이 “” 안에 들어있는 값들은 웬만하면 variable로 만드는 것이 좋음

Untitled

모듈과 지역 변수

Untitled