반복문과 조건문

kimchigood·2022년 12월 11일
0

Terraform Study

목록 보기
5/6
post-thumbnail

Terraform은 선언적 언어로, Kubernetes의 yaml/json manifest 파일처럼 실제 배포된 내용을 정확히 나타내는데 유용하다. 파일의 내용을 보고 마지막 상태를 추론할 수 있는 장점이 있는데, 보통 선언적 언어는 for 반복문, if문을 지원하지 않는다.

리소스를 생성할 때 반복문과 조건문이 필요할 때가 있을 텐데, 그럼 Terraform에서는 for/if 를 어떻게 사용되는지 알아보자.

1. 반복문

1-1. 반복문 적용 방법

  • count 매개 변수 : 리소스를 반복
  • for_each 표현식 : 리소스 내에서 리소스 및 인라인 블록을 반복
  • for 표현식 : 리스트와 맵을 반복
  • for 문자열 지시어 : 문자열 내에서 리스트와 맵을 반복

1-2. 반복문 실습

위 4가지 방법 중 for_each를 예를들어 실습을 진행해보자.

  • 요구사항: AWS에서 kimchi, baechu, ggakddugi 세 명의 IAM 유저를 생성.

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.tffor_each 구문에 의해서 IAM 유저로 생성이 된다.

2. 조건문

2-1. 조건문 적용 방법

  • count 매개 변수 : 조건부 리소스에서 사용
  • for_each와 for표현식 : 리소스 내의 조건부 리소스 및 인라인 블록에 사용
  • If문자열 지시자 : 문자열 내의 조건문에 사용

2-2. 조건문 실습

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에서 반복분 조건문을 알아보았다. 쉬어보이긴 하지만, 실무에서 특정조건과 상황을 따져서 코드를 구현하려면 신경써야 할 부분이 많을 것 같다.

profile
Shout out to Kubernetes⎈

0개의 댓글