이번 시간에는 반복문에 대해서 알아보겠습니다.
Terrafrom의 반복문은 count, for_each. for, dynamic 이 있습니다.
count
count는 반복문, 정수 값만큼 리소스나 모듈을 생성합니다.
아래와 같이 count를 이용 할 수 있습니다.
// 유저 목록을 변수로 선언
variable "user_names" {
description = "Create IAM users with these names"
type = list(string)
default = ["test1", "test2", "test3"]
}
// provider는 aws로 설정
provider "aws" {
region = "ap-northeast-2"
}
// count를 이용하여 변수에 선언한 유저 목록만큼 생성
resource "aws_iam_user" "test_iam" {
count = length(var.user_names)
name = var.user_names[count.index]
}
count를 사용할때 제약사항이 존재합니다.
중간에 값이 삭제되면 인덱스가 줄어들어 의도했던 중간 값에 대한 리소스가 삭제가 될 것이라고 생각되지만 실제로 중간 값에 대한 리소스만 사라지는게 아니라 인덱스가 하나씩 앞으로 오면서 재생성이 됩니다.
for_each
for_each는 리소스 또는 모듈 블록에서 입력된 데이터 형태가 map 또는 set으로 이루어지며, 선언된 key 값 개수만큼 리소스를 생성하게 됩니다.
아래와 같이 for_each를 사용 할 수 있습니다.
// 유저 목록을 변수로 선언
variable "user_names" {
default = {
first = "test1"
second = "test2"
third = "test3"
}
}
// provider는 aws로 설정
provider "aws" {
region = "ap-northeast-2"
}
// count를 이용하여 변수에 선언한 유저 목록만큼 생성
resource "aws_iam_user" "test_iam" {
for_each = var.user_names
name = each.value
}
위의 count 와 다른 점은 for_each는 map 또는 set 형태 이기에 key,value 갯수만 확인 하기 때문에 중간에 값이 삭제가 되도 count의 제약 조건가 다르게 에러가 나지 않습니다.
for
복합 형식 값의 형태를 변환하는 데 사용합니다. JAVA나 JavaScript 등 일반 언어와 달리 for와 for_each는 다릅니다.
for문은 기본적으로 for <item> in <List> : output 으로 사용이 가능하며
map 또는 set 일 경우는 for <key, item> in <Map> : output 으로 사용이 가능합니다.
아래와 같이 for문을 사용할 수 있습니다.
variable "names" {
type = list(string)
default = ["a", "b"]
}
output "A_upper_value" {
value = [for v in var.names : upper(v)]
}
output "B_index_and_value" {
value = [for i, v in var.names : "${i} is ${v}"]
}
output "C_make_object" {
value = { for v in var.names : v => upper(v) }
}
output "D_with_filter" {
value = [for v in var.names : upper(v) if v != "a"]
}
'Terraform' 카테고리의 다른 글
[Terraform] Terraform 상태관리 및 격리방안 (0) | 2023.07.28 |
---|---|
[Terraform] Terraform 기본 사용법 조건문, 함수, Provisioners, moved, 시스템 변수 (0) | 2023.07.22 |
[Terraform] Terrafrom 기본 사용법 Local / Output (0) | 2023.07.15 |
[Terraform] Terrform 사용법 데이터소스 / 변수(Variable) (0) | 2023.07.15 |
[Terraform] Terraform 사용법 (0) | 2023.07.09 |