본문 바로가기
  • lakescript
스터디 이야기/Terraform

[T101] 3-4. Terraform - 조건식

by lakescript 2024. 6. 26.

 

더보기

이 스터디는 CloudNet@에서 진행하는 T101 스터디를 참여하면서 공부하는 내용을 기록하는 블로그 포스팅입니다.

CloudNet@에서 제공해주는 자료들과 테라폼으로 시작하는 IaC 를 바탕으로 작성되었습니다.

 

조건문

테라폼에서 조건식은 3항 연상자 형태를 갖습니다. 조건은 true 또는 false로 확인되는 모든 표현식을 사용할 수 있고, 일반적으로 비교, 논리 연산자를 사용해 조건을 확인합니다

#<조건 정의> ? <옳은 경우> : <틀린 경우>
var.a != "" ? var.a : "default-a"

 

조건식은 ? 기호를 기준으로 왼쪽이 조건이며 오른쪽은 : 기호를 기준으로 왼쪽이 조건에 대해 true가 반환되는 경우이고 오른쪽이 false가 반환되는 경우입니다. 

 

var.a가 빈 문자열이 아니라면 var.a를 나타내지만, 비어 있을 때는 default-a를 반환합니다.

 

조건식 형태 권장 사항

# 비권장
var.example ? 12 : "hello"

#권장
var.example ? "12" : "hello"   
var.example ? tostring(12) : "hello"

 

조건식의 각 조건은 비교 대상의 형태가 다르면 테라폼 실행 시 조건 비교를 위해 형태를 추론하여 자동으로 변환하는데, 이때 협업하는 작업자 사이에 의미 전달이 명확하지 않아 혼란을 겪을 수 있으므로 명시적인 형태로 작성하는 것을 권장합니다.

 

조건식과 count를 조합해 리소스 생성 여부 결정에 활용

조건식은 단순히 특정 속성에 대한 정의, 로컬 변수에 대한 재정의, 출력 값에 대한 조건 정의 뿐만 아니라 리소스 생성 여부에 응용할 수 있습니다. 

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 : ""
}

count에 조건식을 결합한 경우 위의 코드와 같이 특정 조건에 따라 리소스 생성 여부를 선택할 수 있습니다.

enable_file의 값이 true라면 local_file.foo의 count의 조건문에 의해 1로 할당되고 만약 enable_file의 값 false라면 0이 할당됩니다.

 

 

terraform apply --auto-approve -var=enable_file=false

variable의 우선순위가 가장 강한 CLI 실행 시 -var 인수에 지정하여 terraform apply를 실행하겠습니다.

 

위에 설명한 대로 enable_file의 값 false이기 때문에 0이 할당되어 output으로 content = ""이 보여지는 것을 확인할 수 있습니다.

 

terraform apply --auto-approve

-var 인수를 제거하여 terraform apply를 실행하면 코드에 명시되어 있는대로 enable_file의 값이 true로 할당되어 foo.bar 파일이 생성되고 output으로 content = "foo!"가 보여지는 것을 확인하실 수 있습니다.