yamldecode 함수

yamldecode 함수 (yamldecode Function)

yamldecode 함수는 문자열을 YAML의 부분 집합으로 파싱해 그 값의 표현을 생성해요. YAML 1.2의 일부만 지원하며, YAML 값을 Terraform 언어 값으로 매핑해요.

출처: 문서

본문

yamldecode 함수는 문자열을 YAML의 부분 집합으로 파싱해 그 값의 표현을 생성해요.

이 함수는 아래에 설명된 대로 YAML 1.2의 부분 집합을 지원해요.

이 함수는 YAML 값을 Terraform 언어 값으로 다음과 같이 매핑해요.

YAML 타입 Terraform 타입
!!str string
!!float number
!!int number
!!bool bool
!!map object(...) (속성 타입은 이 표에 따라 결정)
!!seq tuple(...) (요소 타입은 이 표에 따라 결정)
!!null Terraform 언어의 null
!!timestamp RFC 3339 형식의 string
!!binary base64 인코딩 표현을 담은 string

Terraform 언어의 자동 타입 변환 규칙 덕분에, 주어진 값에 대해 정확히 어떤 타입이 생성되는지 크게 걱정하지 않고 직관적으로 결과를 사용할 수 있어요.

다만 위 매핑은 모호하다는 점을 알아두세요. 서로 다른 여러 소스 타입이 같은 대상 타입으로 매핑되므로, yamldecodeyamlencode를 거치는 왕복(round-trip)은 동일한 결과를 만들 수 없어요.

YAML은 복잡한 언어이고 Terraform 언어의 타입 시스템으로 표현할 수 없는 많은 가능성을 지원해요. 그래서 이 YAML 디코더는 다음과 같은 제약을 포함해 YAML 1.2의 부분 집합만 지원해요.

  • 이전 앵커에 대한 별칭(alias)은 지원되지만, 순환 데이터 구조(컬렉션 안에 그 컬렉션에 대한 참조가 나타나는 경우)는 지원되지 않아요. yamldecode가 이런 구조를 감지하면 오류를 반환해요.
  • 위 표에 표시된 타입 태그(또는 그 태그들과 동등한 대체 표현)만 지원돼요. 다른 태그는 오류를 발생해요.
  • YAML 문서는 하나만 허용돼요. 주어진 문자열에 여러 문서가 있으면 이 함수는 오류를 반환해요.

예시 (Examples)

> yamldecode("hello: world")
{
  "hello" = "world"
}
> yamldecode("true")
true
> yamldecode("{a: &foo [1, 2, 3], b: *foo}")
{
  "a" = [
    1,
    2,
    3,
  ]
  "b" = [
    1,
    2,
    3,
  ]
}
> yamldecode("{a: &foo [1, *foo, 3]}")

앵커와 별칭이 지원되는 예시를 통해, ba의 별칭 *foo를 참조해 같은 [1, 2, 3] 값을 얻게 되는 것을 확인할 수 있어요.

더 알아보기 (Learn more)