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 반복문은 다음과 같이 동작
var.names 에 해당하는 변수를 참조
var.names 의 list 값을 name 이라는 변수에 1개씩 반복 대입 후 그대로 name 변수 출력
출력된 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 등 다양하게 활용될 수 있다.