티스토리 뷰

 

Terraform Module 작성 방법

 

module은 root module과 child module 로 나누어집니다.

 

root module : terraform 커맨드가 실행 되고 있는 module 

child module : root module에서 리소스를 생성하기 위해 참조하고 있는 module block

 

 

child module 작성 방법

먼저 파일구조입니다.

테라폼은 디렉토리에 있는 모든 *.tf 파일들을 읽습니다.

 

테라폼 컨벤션으로 보통 위 사진과 같이 정의합니다.

 

versions.tf : provider / module 의 버전 의존성
variables.tf : variable 관련
outputs.tf : output 관련
main.tf : resources/data/module/local
README.md

 

version.tf

 

해당 모듈을 사용하기 위해서 최소 버전 0.15 버전 이상의 테라폼 버전이 필요합니다.

 

이 테라폼 모듈을 사용하기 위해 필요한 aws 프로바이더의 모듈 버전 정보입니다.

 

 

variables.tf  

 

 

aws의 password_policy 정책에 맞는 type과 default 값을 보실 수 있습니다.

 

main.tf

 

 

"aws_caller_identity" 를 이용하면 aws의 account_id를 갖고 올 수 있습니다.

aws provider의 resource를 활용해서

 

"aws_iam_account_password_policy"는 variables.tf 파일에서 정의한 변수를 활용합니다.

 

그럼 이렇게 만들어진 리소스들에 대해 module이 output을 출력해줍니다.

 

 

output.tf

 

 

output.tf에서는 참조 가능한 속성들을 작성해줘야합니다.

account module에서는 account의 id를 수행하는 id와 name 편의적인 목적인 signing_url, password 정책 등을 작성했습니다.

 

 

로컬 소스를 활용

 

Account 상위 root의 main.tf를 보면 (account 폴더의 main.tf와는 다릅니다.)

 

프로바이더 설정 후 module block을 통해 source="./account" 와 같이 source='상대 경로' 와 같이 module을 사용할 수 있습니다.

 

이 외에도 다양한 github,테라폼 레지스트리, 테라폼 클라우드 등 모듈들을 설정할 수 있습니다.

 

name에서는 사용할 모듈의 별칭을 적어주고 password_plicy로 안에 내용과 같은 설정을 갖도록 설정하였습니다.

 

또한 root output에서 module의 속성 레퍼런스로 참조하기(output으로 참조하는 것을 의미) 위해서는 해당 module이 output으로 설정한 값들만 가져올 수 있습니다.

(즉, account의 output에서 설정한 값들만 가져올 수 있다는 의미)