본문 바로가기

Terraform

[Terraform] Terraform module

이번 시간에는 module에 대해서 알아보겠습니다.

Terraform module


단일 구조의 문제점

  • 테라폼 구성에서 원하는 항목을 찾고 수정하는 것이 점점 어려워짐
  • 리소스들 간의 연관 관계가 복잡해질수록 변경 작업의 영향도를 분석하기 위한 노력이 늘어남
  • 개발/스테이징/프로덕션 환경으로 구분된 경우 비슷한 형태의 구성이 반복되어 업무 효율이 줄어듦
  • 새로운 프로젝트를 구성하는 경우 기존 구성에서 취해야 할 리소스 구성과 종속성 파악이 어려움

https://developer.hashicorp.com/terraform/language/modules

[Modules Overview - Configuration Language | Terraform | HashiCorp Developer

Modules are containers for multiple resources that are used together in a configuration. Find resources for using, developing, and publishing modules.

developer.hashicorp.com](https://developer.hashicorp.com/terraform/language/modules)

Module

모듈은 부모 모듈(Root Module)과 자식 모듈(Child Module)로 구분이 됩니다.

  • 부모 모듈 Root Module : 테라폼을 실행하고 프로비저닝하는 최상위 모듈
  • 자식 모듈 Chile Module : 루트 모듈의 구성에서 호출되는 외부 구성 집합

Module의 구성의 집합

Terraform으로 관리하는 대상의 규모가 커지고 복잡해져 생긴 문제를 보완하고 관리 작업을 수월하게 하기 위한 방안으로 활용합니다.

  • 관리성
    • 모듈은 서로 연관 있은 구성의 묶음
    • 원하는 구성요소를 단위별로 쉽게 찾고 업데이트 가능
    • 모듈은 다른 구성에서 쉽게 하나의 덩어리로 추가하거나 삭제.
    • 모듈이 업데이트되면 이 모듈을 사용하는 모든 구성에서 일관된 변경 작업 가능
  • 캡슐화
    • 테라폼 구성 내에서 각 모듈은 논리적으로 묶여져 독립적으로 프로비저닝 및 관리
    • 은닉성을 갖춰 필요한 항목만을 외부에 노출
  • 재사용성
    • 테라폼 구성을 모듈화하면 이후에 비슷한 프로비저닝에 이미 검증된 구성 사용 가능
  • 일관성표준화
    • 테라폼 구성 시 모듈을 활용하는 워크플로는 구성의 일관성을 제공
    • 서로 다른 환경과 프로젝트에도 이미 검증한 모듈을 적용해 복잡한 구성과 보안 사고 방지

Module 작성 기본 원칙

프로그래밍 언어에서 쓰는 라이브러리나 패키지와 역활이 비슷합니다.

  • Module 디렉터리 형식은 terraform-<프로바이더 이름>-<모듈 이름>
    • 디렉터리 또는 레지스트리 이름이 테라폼을 위한 것
    • 어떤 프로바이더의 리소스를 포함
    • 부여된 이름이 무엇인지 판별
    • 참고 자료
  • 테라폼 구조는 궁극적으로 Module 가 가능한 구조로 작성
    • 처음부터 모듈화를 가정하고 구성파일 작성 > 후에 다른 Module 이 호출할 것을 예상하고 구조화 가능
    • 작성자의 의도한 리소스 묶음을 구상한 대로 논리적인 구조로 그룹화 가능
  • 각각의 Module 을 독립적으로 관리
    • 하위 Module 또한 독립적인 Module 이므로 Root Module 하위에 두기 보다는 동일한 파일 시스템 레벨에 위치하거나 별도 Moulde 만을 위한 공간에서 호출
  • 공개된 테라폼 레지스트리의 Module 를 참고
    • 대다수의 테라폼 Module 은 공개되어 있고, 거의 모든 인수에 대한 모범사례 공개
  • 작성된 Module 은 공개 또는 비공개로 게시
    • Module 의 사용성을 높이고 피드백을 통해 더 발전된 Module 구성 가능

 


 

모듈화

 

모듈의 기본적 구조는 테라폼 구성으로 입력 변수를 구성하고 결과를 출력하기 위한 구조로 구성 합니다.

모듈화’라는 용어는 이런 구조재활용하기 위한 템플릿 작업을 말한다.

애플리케이션 개발시에도 자주 사용되는 용어로 테라폼은 작성된 모듈을 다른 루트 모듈에서 가져다 사용하며 이를 통해 재사용성과 표준화 구조를 구성할 수 있다.

 

  • Module 의 기본적 구성
    • 테라폼 구성으로 입력 변수를 구성하고 결과를 출력하기 위한 구조로 구성

모듈화 

  • 테라폼 구조를 재활용하기 위한 템플릿 작업
  • 작성된 Module 을 다른 Root Module 에서 가져다 사용
  • 재사용성과 표준화 구조를 구성

Root Module 과 Child Module

  • 기존에 작성된 Module 은 다른 Module 에서 참조 사용
  • Module 에서 필요한 값은 variable 로 선언
  • Module 에서 생성된 값 중 외부 Module 에서 참조하고 싶은 값은 output 으로 설정