ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [T102 4주차] (2)테라폼 모듈(Module)
    테라폼(Terraform) 스터디 2023. 7. 30. 03:01

    모듈(Modele)이 란?

    • 구성의 집합이다. 
      • 테라폼의 규모가 커지고 복잡해져 생긴 문제를 보완하고 관리 작업을 수월하게 하기 위한 방안으로 활용 
      • 관리성 : 일관된 변경 작업을 진행 가능
      • 캡슐화 : 필요한 항목만을 외부에 노출
      • 재사용성 :  비슷한 프로비저닝에 이미 검증된 구성을 바로 사용
      • 일관성표준화 : 구성의 일관성을 제공

     

    모듈(Modele)의 구분

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

     

    모듈(Modele) 작성 기본 원칙

    • 모듈 디렉터리 형식을 terraform-<프로바이더 이름>-<모듈 이름> 형식을 제안
    • 테라폼 구성은 궁극적으로 모듈화가 가능한 구조로 작성할 것을 제안
    • 각각의 모듈을 독립적으로 관리하기를 제안
    • 공개된 테라폼 레지스트리의 모듈을 참고하기를 제안
    • 작성된 모듈은 공개 또는 비공개로 게시해 팀 또는 커뮤니티와 공유하기를 제안
    • 모듈 작성 실습
      • 하나의 프로비저닝에서 사용자와 패스워드를 여러 번 구성해야 하는 경우를 가상의 시나리오로 삼아 모듈화를 진행해보겠다.
        • random_pet는 이름을 자동으로 생성하고, random_password는 사용자의 패스워드를 설정한다 - random_pet
        • random_password는 random 프로바이더 리소스로 난수 형태로 패스워드를 만들 수 있다.

     

    ● 실습

    시나리오- 하나의 피로비저닝에서 모듈을 통해사용자와 패스워드를 여러번 구성하기

     

    (1) main.tf, variable.tf, output.tf  파일 생성

    # main.tf 생성
    resource "random_pet" "name" {
      keepers = {
        ami_id = timestamp()
      }
    }

    resource "random_password" "password" {
      length           = var.isDB ? 16 : 10
      special          = var.isDB ? true : false
      override_special = "!#$%*?"
    }
    # variable.tf 파일 생성
    variable "isDB" {
      type        = bool
      default     = false
      description = "패스워드 대상의 DB 여부"
    }
    # output.tf 파일 생성
    output "id" {
      value = random_pet.name.id
    }

    output "pw" {
      value = nonsensitive(random_password.password.result) 
    }

    ● 실행- (1)자식 모듈 동작 테스트

    # 디렉토리 생성
    cd 06-module-traning/modules/terraform-random-pwgen

    # tf 파일형식 파일 보기
    ls *.tf
    ls *.tf  실행 결과

    terraform init && terraform plan

    # 테스트를 위해 apply 시 변수 지정
    terraform apply -auto-approve -var=isDB=true
    테라폼 apply




    # 확인
    terraform state list
    terraform state show random_pet.name
    terraform state show random_password.password

    결과 확인


    # tfstate에 모듈 정보 확인 (민감 정보 확인 가능)
    cat terraform.tfstate | grep module

    ● 실행- (2)자식 모듈 호출 실습

    #디렉토리 생성
    mkdir -p 06-module-traning/06-01-basic
    #main.tf 파일 생성

    module "mypw1" {
      source = "../modules/terraform-random-pwgen"
    }

    module "mypw2" {
      source = "../modules/terraform-random-pwgen"
      isDB   = true
    }

    output "mypw1" {
      value  = module.mypw1
    }

    output "mypw2" {
      value  = module.mypw2
    }

    ●실행 결과: 자식 모듈을 호출해 반복 재사용하는 루트 모듈의 결과

    #루트 모듈을 위한 디렉토리 생성
    cd 06-module-traning/06-01-basic

    #
    terraform init && terraform plan && terraform apply -auto-approve
    Plan: 4 to add, 0 to change, 0 to destroy.

    Changes to Outputs:
      + mypw1 = {}
      + mypw2 = {}

    # 확인
    terraform state list
    terraform state list 결과

    # tfstate에 모듈 정보 확인
    cat terraform.tfstate | grep module
    tfstate에 모듈 정보 확인


    # terraform init 시 생성되는 modules.json 파일 확인
    tree .terraform

    ## 모듈로 묶여진 리소스는 module이라는 정의를 통해 단순하게 재활용하고 반복 사용할 수 있다.
    ## 모듈의 결과 참조 형식은 module.<모듈 이름>.<output 이름>으로 정의된다.
    cat .terraform/modules/modules.json | jq

    # graph 확인
    terraform graph > graph.dot


    결과 그래프 확인
Designed by Tistory.