하마롱크의 블로그
테라폼 모듈(Terraform Module) 본문
모듈은 테라폼으로 리소스 구성을 패키징하고 재사용하는 주요 방법이다. 테라폼 모듈 내에 원하는 리소스들을 구성해놓으면, 여러 다른 위치에서 다른 변수값을 사용해서 리소스를 생성할 수 있다.
테라폼 모듈은 단일 디렉토리에 하나 이상의 .tf 파일 세트로 구성된다. 이러한 모듈은 크게 루트 모듈(Root Module)과 하위 모듈로 나눌 수 있다. 루트 모듈 내의 .tf파일에서 모듈 블록을 만나면 해당 모듈을 호출하여 사용하는 형태로 동작한다. 루트 모듈은 다른 모듈들을 호출하여 구성에 리소스를 포함할 수 있다. 다른 모듈이 호출하는 모듈을 하위 모듈이라고 한다. 하위 모듈은 동일한 구성 내에서 여러 번 호출될 수 있으며 여러 구성에서 동일한 하위 모듈을 사용할 수 있다. 그리고 모듈에 따라 다른 설정값을 전달하여 사용할 수도 있다.
모듈이 저장되는 위치는 정해져있지 않다. 로컬 파일시스템에 저장하여 사용할 수도 있고 Terraform Registry와 같은 원격 저장소에 저장되어 다운로드를 통해 사용할 수도 있다. 또한 직접 모듈을 정의하여 사용할 수도 있고 이미 정의된 표준 모델을 사용할 수도 있다.
이러한 모듈을 사용하면 다음과 같은 장점이 있다.
- 재사용성: 모듈을 사용하여 리소스를 정의하면 각 설정은 서로 다른 디렉토리와 파일에 정의되므로 특정 리소스를 재사용하기 위해 해당 리소스가 속한 모듈만 다시 정의하여 사용하면 된다. 또한 작성한 모듈을 GitHub와 같은 형상 관리 툴을 통해 팀원들과 공유하거나 오픈소스로 공개할 수도 있다.
- 일관성: 모듈을 사용하면 인프라의 구성에 대한 일관성을 유지할 수 있다. 그리고 모듈을 사용하면 설정 파일이 일관성을 가지게 되어 파일을 보고 이해하기가 쉬워진다.
- 설정 캡슐화: 모듈은 서로 관련 있는 요소들끼리 캡슐화하여 정의한다. 그러므로 특정 요소의 변경으로 인한 의도하지 않은 변경 발생을 예방할 수 있다. 그리고 각 모듈은 논리적으로 분리되어 있으므로 동일한 이름을 사용하더라도 충돌이 발생하지 않는다.
일반적으로 개발 환경은 다음과 같은 단계를 거치는데,
• Development(dev) : 개발자의 실제 서버에서 테스트 단계
• Staging(stg) : 개발 테스트 이후 통합 테스트 단계 (운영 바로 직전)
• Production(prd) : 실제 사용자들이 사용하는 운영 단계 (상용 서비스)
테스트와 운영을 동일하게 구성하기 위해서 Staging 단계의 소스 전체를 복사한 후 각 설정을 수정하는 방법을 사용할 수도 있겠지만, 실제 운영환경으로 배포를 해야하는데 실수가 생기면 엄청난 문제가 발생할 것이다.
그러므로 모듈을 사용해서 재사용성을 높이는 것이 좋다. Root Module은 그대로 사용하고, 환경별로(prd, sta) 설정값만 변경해서 Root Moudle에 적용하는 것이다. 이렇게 환경이 동일하다면 같은 결과값을 도출할 수 있을 것이다.
References
SDKIM님 교재
https://www.terraform.io/docs/language/index.html
https://jbhs7014.tistory.com/177
https://velog.io/@gentledev10/terraform-modules
https://dev.classmethod.jp/articles/build-multiple-services-with-terraform-05/
'Terraform' 카테고리의 다른 글
AWS에서 Terraform 기본 구성(3) (0) | 2021.10.30 |
---|---|
AWS에서 Terraform 기본 구성(2) (0) | 2021.10.29 |
AWS에서 Terraform 기본 구성(1) (0) | 2021.10.27 |
테라폼(Terraform) (0) | 2021.10.27 |