연재 시리즈

테라폼 시리즈 33편. for expression을 이용한 반복문

악분 2022. 11. 19. 13:34
반응형

영상: https://youtu.be/Hj_FGLNmXNI

for expression이란?

For expression은 반복을 이용하여 일괄 변환작업에 사용합니다. 변환작업은 타입 또는 값을 수정하는 작업입니다. 주의사항은 For expression의 결과 타입은 tuple 또는 object입니다. 원본이 list이더라도 결과는 tuple 또는 Object로 변환됩니다. [ ]를 사용하면 tuple 타입, { }를 사용하면 object 타입으로 변환됩니다.

[for item in 조회할 expression: 변환작업] --> 리턴값이 tuple
{for item in 조회할 expression: 변환작업} --> 리턴값이 object

 

예제 - s3 bucket이름 일괄 수정

for expression을 이용하여 s3 bucket이름을 일괄 수정하는 예제를 실습해보겠습니다. bucket생성 반복은 for_each를 사용합니다.

 

s3 bucket이름은 variable set타입에 정의했습니다. 그리고 for expression의 variable를 참조하여 변환작업을 일괄로 진행합니다. for_each는 set, map타입만 사용할 수 있어서 for expression결과를 toset함수를 사용하여 set타입으로 타입변환했습니다.

variable fruits {
  type        = set(string)
  default     = ["apple", "banana"]
  description = "fruit example"
}

provider "aws" {
  region  = "ap-northeast-2"
}

resource "aws_s3_bucket" "mys3bucket" {
  for_each = toset([for fruit in var.fruits: fruit])
  bucket = "akbun-t101study-${each.key}"
}

 

terraform apply명령어를 실행하고 bucket이 잘 생성되었는지 확인합니다. 

terraform apply

 

terraform destroy명령어로 생성한 bucket을 삭제합니다.

terraform destroy

 

갑자기 운영팀에서 test목적으로 생성하는 리소스는 이름 끝에 “test”문자열을 추가해달라는 요청이 왔습니다. 이 요구사항을 for expression을 이용하여 이름을 쉽게 일괄 수정할 수 있습니다. format함수를 사용하여 bucket이름과 postfix문자열을 합쳤습니다.

코드링크: https://github.com/sungwook-practice/terraform-study/blob/main/week5/for-loop/for-expression-variable/main.tf
variable "fruits" {
  type        = set(string)
  default     = ["apple", "banana"]
  description = "fruit example"
}

variable "postfix" {
  type        = string
  default     = "test"
  description = "postfix"
}


provider "aws" {
  region = "ap-northeast-2"
}

resource "aws_s3_bucket" "mys3bucket" {
  for_each = toset([for fruit in var.fruits : format("%s-%s", fruit, var.postfix)])
  bucket   = "akbun-t101study-${each.key}"
}

 

terraform apply명령어를 실행하고 s3 bucket이름을 확인해보세요. 의도한 대로 test라는 문자열이 bucket이름 끝에 추가되었습니다.

terraform apply

반응형