yamlencode 함수
yamlencode 함수
yamlencode 함수는 주어진 값을 YAML 1.2 블록 문법(block syntax)을 사용하는 문자열로 인코딩해주는 내장 함수예요.
출처: 문서
본문
yamlencode는 Terraform 언어 값을 다음과 같이 YAML 태그에 매핑해요:
| Terraform 타입 | YAML 타입 |
| string | !!str |
| number | !!float 또는 !!int |
| bool | !!bool |
| list(...) | !!seq |
| set(...) | !!seq |
| tuple(...) | !!seq |
| map(...) | !!map |
| object(...) | !!map |
| Null 값 | !!null |
yamlencode는 위 모든 타입에 대해 암시적 문법을 사용하므로, 명시적인 YAML 태그를 생성하지 않아요.
YAML 형식은 Terraform 언어의 모든 타입을 완전히 표현할 수 없기 때문에, yamlencode 결과를 yamldecode에 넘기면 완전히 동일한 값이 나오지는 않아요. 하지만 Terraform 언어의 자동 타입 변환 규칙 덕분에 실제로는 문제가 되는 경우가 거의 없어요.
YAML은 JSON의 상위 집합(superset)이에요. 그래서 가능하다면 원격 시스템이 YAML을 지원하더라도 jsonencode를 사용해 JSON을 생성하는 걸 권장해요. JSON 문법은 flow 스타일 YAML과 동등하며, Terraform은 계획(plan)에서 JSON 값에 대한 자세한 구조 변경 정보를 보여줄 수 있어요. 반면 block 스타일 YAML은 그냥 일반적인 여러 줄 문자열로 취급돼요. 다만 생성된 값을 원격 시스템에서 사람이 직접 읽거나 수정할 예정이라면, YAML로 생성하면 가독성이 좋아질 수 있어요.
예시
> yamlencode({"a":"b", "c":"d"})
"a": "b"
"c": "d"
> yamlencode({"foo":[1, 2, 3], "bar": "baz"})
"bar": "baz"
"foo":
- 1
- 2
- 3
> yamlencode({"foo":[1, {"a":"b","c":"d"}, 3], "bar": "baz"})
"bar": "baz"
"foo":
- 1
- "a": "b"
"c": "d"
- 3
yamlencode는 매핑이나 시퀀스가 비어 있지 않은 한 항상 YAML의 "block 스타일"을 사용해요. flow 스타일 YAML을 생성하려면 jsonencode를 대신 사용하세요. YAML flow 스타일은 JSON 문법의 상위 집합이기 때문이에요.
관련 함수
jsonencode는 YAML 대신 JSON을 사용하는 비슷한 연산이에요.yamldecode는 반대 연산을 수행해서, YAML 문자열을 디코딩해 그 값으로 변환해요.