Terraform

[ Terraform101 Study - 3w ] 조건문

su''@ 2024. 6. 30. 04:38
Terrafrom T101 4기 실습 스터디 게시글입니다.
"테라폼으로 시작하는 IaC" 도서를 참고하여 정리했습니다. 

 

[Conditional Expressions] 테라폼에서의 조건식3항 연산자 형태를 갖는다. 조건은 true 또는 false로 확인되는 모든 표현식을 사용할 수 있다 - 링크

  • 실습을 위해서 3.10 디렉터리를 신규 생성 후 열기 → main.tf 파일 생성
    mkdir 3.10 && cd 3.10
    touch main.tf
  • 일반적으로 비교, 논리 연산자를 사용해 조건을 확인한다.
  • 조건식은 ? 기호를 기준으로 왼쪽조건이며, 오른쪽: 기호를 기준으로 왼쪽이 조건에 대해 true가 반환되는 경우이고 오른쪽false가 반환되는 경우다.
  • 다음의 예에서 var.a가 빈 문자열이 아니라면 var.a를 나타내지만, 비어 있을 때는 “default-a”를 반환한다
    # <조건 정의> ? <옳은 경우> : <틀린 경우>
    var.a != "" ? var.a : "default-a"
  • 조건식의 각 조건은 비교 대상의 형태가 다르면 테라폼 실행 시 조건 비교를 위해 형태를 추론하여 자동으로 변환하는데, 명시적인 형태 작성을 권장
    # 조건식 형태 권장 사항 
    var.example ? 12 : "hello"            # 비권장
    var.example ? "12" : "hello"          # 권장
    var.example ? tostring(12) : "hello"  # 권장
  • 조건식은 단순히 특정 속성에 대한 정의, 로컬 변수에 대한 재정의, 출력 값에 대한 조건 정의 뿐만 아니라 리소스 생성 여부에 응용할 수 있다. count에 조건식을 결합한 경우 다음과 같이 특정 조건에 따라 리소스 생성 여부를 선택할 수 있다.
  • main.tf 파일 내용
    variable "enable_file" {
      default = true
    }
    
    resource "local_file" "foo" {
      count    = var.enable_file ? 1 : 0
      content  = "foo!"
      filename = "${path.module}/foo.bar"
    }
    
    output "content" {
      value = var.enable_file ? local_file.foo[0].content : ""
    }
  • 실행
    # 변수 우선순위3 : 환경 변수 (TF_VAR 변수 이름)
    export TF_VAR_enable_file=false
    export | grep TF_VAR_enable_file
    
    # 
    terraform init && terraform plan && terraform apply -auto-approve
    terraform state list
    echo "var.enable_file ? 1 : 0" | terraform console
    
    # 환경 변수 삭제
    unset TF_VAR_enable_file
    export | grep TF_VAR_enable_file
    
    # 재실행
    terraform plan && terraform apply -auto-approve
    terraform state list
    
    #
    echo "local_file.foo[0]" | terraform console
    echo "local_file.foo[0].content" | terraform console
    echo "var.enable_file ? 1 : 0" | terraform console