Contents
소개
for문은 입력받은 complex type을 변환하여 새로운 complex type 만든다.
- complex type을 input 값으로 넣으면 새로운 complex type의 output을 출력한다.
Input으로 사용가능한 Type
for문의 Input으로 사용 가능한 type이다.
list()
set()
tuple([, …])
map()
object({ = , … })
예제
[ for k, v in var.map : length(k) + length(v) ]
요소 설명
k
: key 혹은 index를 나타내는 기호이다.- Input 값의 type에 따라 의미하는 바가 다르다.
- map , object : key 혹은 attribute를 의미한다.
- list, set , tuple : element를 의미한다.
- Input 값의 type에 따라 의미하는 바가 다르다.
v
: map, object, lists, tuples 일 경우 사용되는 추가 기호이다.- Input 값의 type에 따라 의미하는 바가 다르다.
- map, obejct : 각 key의 value를 의미한다.
- lists, tuples : 각 element의 index를 의미한다.
- Input 값의 type에 따라 의미하는 바가 다르다.
💡 추가 기호는 옵션이다. 만약, for 키워드 뒤에 하나의 기호만 지정하면 그 기호는 항상 Input 값의 각 element값을 나타낸다.
var.map
: for문의 input 값이다.- 위에서 설명한 것처럼 list, set, tuple, map, object Type이 들어갈 수 있다.
length(k) + length(v)
: Input 값의 각 element 별로 수행하는 작업을 의미한다.k
기호와v
기호에 매칭되는 요소들을 불러와서length()
함수를 수행한다.
괄호 유형에 따른 다른 결과 Type
for문의 주변의 괄호 유형에 따라서 결과 Type이 결정된다.
1️⃣ [ ] 괄호일 경우
만약, for문을 []로 감쌀경우 출력 Type은 tuple이다.
예제
[ for k in var.list : upper(k) ]
출력
[
"A",
"B",
"C",
]
- tuple 형식으로 출력된다.
2️⃣ { } 괄호일 경우
만약, for문을 {}로 감쌀경우 출력 Type은 object이다.
예제
{ for k in var.list : k => upper(k) }
출력
{
"a" = "A"
"b" = "B"
"c" = "C"
}
- object 형식으로 출력되고 => 기호로 구분된 두 가지의 결과 식을 제공해야 한다.
Element 필터링
for문의 Input값의 요소를 필터링하여 예상보다 적은 값을 출력시킬 수 있다.
- Input 값의 요소 중 사용하지 않는 요소를 필터링할 때 유용하다.
예제
variable "users" {
type = map(object({
is_admin = bool
}))
}
locals {
admin_users = {
for name, user in var.users : name => user
if user.is_admin
}
regular_users = {
for name, user in var.users : name => user
if !user.is_admin
}
}
Element 정렬
기본적으로 순서가 정렬되지 않는 형식을 for문으로 돌리게 되면 Terraform이 자동으로 순서를 정렬하게 된다.
1️⃣ maps, objects Type의 정렬
lexical sorting을 사용하여 key 또는 attributes의 이름별로 element를 정렬한다.
2️⃣ 문자열 집합 (sets of strings) Type의 정렬
lexical sorting을 사용하여 value를 기준으로 element를 정렬한다.
3️⃣ 기타 집합 (sets of other) Type의 정렬
임의의 순서를 사용하여 정렬한다.
💡 기타 집합의 경우 임의의 순서로 정렬이 되기 때문에 표현식의 결과를 set으로 변환하여 순서를 정렬하는 걸 추천한다.
toset([for e in var.set : e.example])
'Devops > Terraform' 카테고리의 다른 글
[Terraform] Assume Role 기반으로 인증방식 변경하기 (0) | 2023.01.16 |
---|---|
[Terraform] Configuration Syntax (0) | 2022.12.30 |
[Terraform] Types (0) | 2022.12.26 |
[Terraform] count와 for_each (Meta-Arguments) (0) | 2022.12.25 |
[Terraform] Terragrunt와 Terraform Cloud(TFC) 연동해보기 (1) | 2022.12.16 |