728x90
더보기
이 스터디는 CloudNet@에서 진행하는 T101 스터디를 참여하면서 공부하는 내용을 기록하는 블로그 포스팅입니다.
CloudNet@에서 제공해주는 자료들과 테라폼으로 시작하는 IaC 를 바탕으로 작성되었습니다.
반복문
for
for문은 복합적인 형식의 값 형태를 변환하는 데에 사용됩니다. 예를 들어, list값의 포맷을 변경하거나 특정 접두사를 추가할 수도 있고, output에 원하는 형태로 반복적인 결과를 표현할 수도 있습니다.
- list 타입인 경우 value 또는 index와 value을 반환
- map 타입인 경우 key 또는 key와 value를 반환
- set 타입의 경우 key 값에 대해 반환
variable "names"{
default = ["a", "b", "c"]
}
resource "local_file" "abc" {
content = jsonencode(var.names)
filename = "${path.module}/abc.txt"
}
위와같이 main.tf에 list의 내용을 파일에 담는 리소스를 생성하는 코드를 작성합니다.
var.name의 내용이 결과 파일에 content로 작성됩니다.
variable "names"{
default = ["a", "b", "c"]
}
resource "local_file" "abc" {
content = jsonencode([for s in var.names: upper(s)])
filename = "${path.module}/abc.txt"
}
위의 코드는 var.name의 값을 순차적으로 대문자로 변환하는 코드입니다.
content 값을 정의하는 부분에 for 구문을 사용하면 내부의 값을 순차적으로 변경할 수 있습니다.
사용 규칙
- list 유형의 경우 반환 받는 값이 1개로 되어 있으면 value, 2개인 경우 앞의 인수가 index를 반환하고 뒤의 인수가 value를 반환 (i,v)
- map 유형의 경우 반환 받는 값이 1개로 되어 있으면 key, 2개인 경우 앞의 인수가 key를 반환하고 뒤의 인수가 value를 반환 -> k,v
- 결과 값은 for문을 묶는 기호가 [ ] 인경우 tuple로 반환되고 { }인 경우 object 형태로 반환
- object 형태의 경우 key와 value에 대한 쌍은 => 기호로 구분
- { } 형식을 사용해 object 형태로 결과를 반환하는 경우 key는 고유해야 하므로 value뒤에 그룹화 모드 심볼(...)을 붙여서 key의 중복을 방지
- if 구문을 추가해 조건 부여 가능
list 유형
variable "names" {
type = list(string)
default = ["a", "b", "c"]
}
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} == ${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"]
}
list 유형에 대한 for 구문 처리 및 몇 가지 예를 확인하기 위해 위와 같이 main.tf 파일을 작성하고 output을 확인해보겠습니다.
- output.A_upper_value의 경우 var.names를 순차적으로 돌면서 value의 값을 대문자로 변환하여 출력합니다.
- output.B_index_and_value의 경우 var.name를 순차적으로 돌면서 index와 value를 출력합니다.
- output.C_make_object의 경우 tuple 형태로 선언된 값을 object 형태로 변환하여 출력합니다.
- output.D_with_filter는 var.names를 순차적으로 돌면서 "a"가 아닌 값만 출력합니다.
map 유형
variable "members" {
type = map(object({
role = string
}))
default = {
member-dev = {role = "member", group = "dev"}
admin-dev = {role = "admin", group = "dev"}
member-ops = {role = "member", group = "ops"}
}
}
output "A_to_tuple" {
value = [for k, v in var.members: "${k} is ${v.role}"]
}
output "B_get_only_role" {
value = {
for name, user in var.members: name => user.role
if user.role == "admin"
}
}
output "C_group" {
value = {
for name, user in var.members: user.role => name...
}
}
map 유형에 대한 for 구문 처리 및 몇 가지 예를 확인하기 위해 위와 같이 main.tf 파일을 작성 후 output을 확인해보겠습니다.
- output.A_to_tuple은 var.names를 순차적으로 돌면서 key와 value 값을 출력합니다.
- output.B_get_only_role은 var.names를 순차적으로 돌면서 role이 admin인 쌍을 출력합니다.
- output.C_group은 var.names를 순차적으로 돌면서 role별로 그룹화하여 출력합니다.
728x90
'스터디 이야기 > Terraform' 카테고리의 다른 글
[T101] 3-4. Terraform - 조건식 (0) | 2024.06.26 |
---|---|
[T101] 3-3. Terraform - 반복문(dynamic) (0) | 2024.06.26 |
[T101] 3-1. Terraform - 반복문(for_each) (0) | 2024.06.24 |
[T101] 2-4. Terraform - 반복문(count) (0) | 2024.06.22 |