Terraform은 선언적 언어로, Kubernetes의 yaml/json manifest 파일처럼 실제 배포된 내용을 정확히 나타내는데 유용하다. 파일의 내용을 보고 마지막 상태를 추론할 수 있는 장점이 있는데, 보통 선언적 언어는 for 반복문, if문을 지원하지 않는다.
리소스를 생성할 때 반복문과 조건문이 필요할 때가 있을 텐데, 그럼 Terraform에서는 for/if 를 어떻게 사용되는지 알아보자.
위 4가지 방법 중 for_each를 예를들어 실습을 진행해보자.
iam.tf
provider "aws" {
region = "ap-northeast-2"
}
resource "aws_iam_user" "myiam" {
for_each = toset(var.user_names)
name = each.value
}
variables.tf
variable "user_names" {
description = "Create IAM users with these names"
type = list(string)
default = ["kimchi", "baechu", "ggakddugi"]
}
outputs.tf
output "all_users" {
value = aws_iam_user.myiam
}
그럼 working dir에서 terraform을 실행해보자.
terraform init & terraforn plan
결과 : variables.tf 에 정의한 세 명의 유저가 iam.tf의 for_each 구문에 의해서 IAM 유저로 생성이 된다.
If문자열 지시자
%{ if <CONDITION> }<TRUEVAL>%{ endif }
CONDITION은 boolean 으로 평가되는 표현식이고, TRUEVAL은 CONDITION이 True로 평가되면 렌더링할 표현식
IF-ELSE문자열 지시자
%{ if <CONDITION> }<TRUEVAL>%{ else }<FALSEVAL>%{ endif }
실습코드
variable "name" {
description = "A name of render"
type = string
}
output "if_else_directive" {
value = "Hello, %{ if var.name != ""}${var.name}%{ else }(unnamed)%{ endif }"
}
name변수에 값이 있으면 그 값을 출력하고, 없으면 unnamed를 출력하는 코드이다.
그럼 working dir에서 terraform을 실행해보자.
terraform init & terraforn plan
If-else 조건에 맞게 output이 잘 출력되었다.
여기까지 Terraform에서 반복분 조건문을 알아보았다. 쉬어보이긴 하지만, 실무에서 특정조건과 상황을 따져서 코드를 구현하려면 신경써야 할 부분이 많을 것 같다.