새소식

IaC/Terraform

5주차(3)_Terraform 반복문_for

  • -
CloudNet@ 팀의 가시다님께서 Leading 하시는 Terraform T101 Study 내용 요약

 

해당 Terraform Study 는 Terraform Up and Running 책을 기반으로 진행 중입니다.

 

이번 포스팅에서는 테라폼 반복문 count, for_each, for 3가지 중 마지막인 for 반복문에 대해서 알아보자 !!

 

 

 

1. for


단일 값을 생성하기 위해 반복이 필요할 경우 [list, map 지원]
  • count, for_each 는 리소스와 인라인 블록을 반복했지만, for 반복문에서는 리소스 내의 값을 반복할 수 있다.

 

1.1. for 사용법

for 반복 구문
[for <ITEM> in <LIST> : <OUTPUT>]

 

  • for 반복문을 알아보기 위해 다음과 같은 List 리소스 파일을 생성해보자
variable "names" {
  description = "A list of names"
  type        = list(string)
  default     = ["count", "for_each", "for"]
}

output "output_names" {
  value = [for name in var.names : name]
}

terraform apply 를 해보면 다음과 같은 output 이 출력되는 것을 확인할 수 있다.

 

for 반복문은 다음과 같이 동작

  1. var.names 에 해당하는 변수를 참조
  2. var.names 의 list 값을 name 이라는 변수에 1개씩 반복 대입 후 그대로 name 변수 출력
  3. 출력된 name 값은 output_names 의 value 에 저장

 

 

이 때, name 이라는 변수는 for 반복을 돌리기 위한 변수 이름이기 때문에, 편한대로 입력하여도 무관하다.

 

1.2. Map 리소스의 for 반복문

for 반복문은 Map 형식의 리소스도 반복할 수 있다.
  • Map 리소스 for 구문
[for <KEY>, <VALUE> in <MAP> : <OUTPUT>]
variable "map_for_names" {
  description = "map"
  type        = map(string)
  default     = {
    count    = "first"
    for_each = "second"
    for      = "third"
  }
}

output "output_names_map" {
  value = [for name, row in var.map_for_names : "${row} is ${name}"]
}

 

1.3. for 반복문 활용

for 반복문의 output 을 활용하면 다양한 결과값을 출력할 수 있다.
upper 등 테라폼 내장함수 사용
variable "names" {
  description = "A list of names"
  type        = list(string)
  default     = ["count", "for_each", "for"]
}

output "output_names" {
  value = [for i in var.names : i]
}


output "output_upper_names" {
  value = [for name in var.names : upper(name)]
}

 

특정 조건에 부합하는 값만 출력
output "output_names_if" {
  value = [for name in var.names : name if length(name) < 5]
}

 

특정 리소스 안의 값 출력
provider "aws" {
  region = "ap-northeast-2"
}

resource "aws_iam_user" "myiam" {
  for_each = toset(var.user_names)
  name     = each.value
}

variable "user_names" {
  description = "Create IAM users with these names"
  type        = list(string)
  default     = ["terraform", "aws", "local"]
}

output "output_name_arn" {
  value = [for name in aws_iam_user.myiam : name.arn]
}

 

 


 

 

이번 포스팅에서는 테라폼 for 반복문에 대해서 알아보았다.
for 반복문은 RDS Subnet Group 의 Subnet ID 등 다양하게 활용될 수 있다.

 

다음 포스팅에서는 테라폼 조건문에 대해서 알아보자 !!

Contents

포스팅 주소를 복사했습니다