본문으로 바로가기

[Terraform] Types

category Devops/Terraform 2022. 12. 26. 19:05

Contents

    기본 타입 (Primitive)

    string, number, bool 세 가지로 나뉜다.

    • number와 bool은 모두 string으로 변환할 수 있다.
      • number 또는 bool 타입의 값을 string 타입의 값에 할당한다면 Terraform이 자동으로 타입을 변환한다.
        • 그 반대도 마찬가지임.
      • 예를들면 true는 “true”로 변환되고 97은 “97”로 변환된다.

    1️⃣ string

    유니코드 문자열 집합을 나타낸다.

    형식

    "a"
    "b"
    "shin"
    

    2️⃣ number

    정수 또는 소수일 수 있는 숫자를 나타낸다.

    형식

    1
    2
    3
    

    3️⃣ bool

    참과 거짓을 나타내는 true 또는 false로 표현한다.

    • bool은 논리 연산자로 사용할 수 있다.

    복합 타입 (Complex)

    복합 타입은 값의 집합으로(set of values) 구성된 타입이다.

    복합 타입은 총 두가지 유형이 있다.

    컬렉션 타입 (Collection)

    컬렉션에는 동일한 타입의 값 집합이 포함된다.

    • 컬렉션 내의 모든 요소는 반드시 동일한 타입이어야 한다.
    • 컬렉션 타입은 모두 와일드카드 타입의 약어를 지원한다.
      • list는 list(any)와 동일, map은 map(any)와 동일 ..

    1️⃣ list

    연속적인 값의 집합이다.

    • index는 0부터 시작한다.
    • 각 element들에 접근하는 방법은 첨자를 사용한다.
    • 선언은 list(number), list(string), list(bool) 등이 될 수 있다.
      • 괄호 안의 타입이 요소의 타입이다.

    형식

    [
      "shin",
      "seung",
      "hyeon"
    ]
    

    2️⃣ map

    고유한 key가 있는 key-value 쌍의 셋트를 나타낸다.

    • key는 문자열 타입이어야 한다.
      • 만약, map(number)라면 key는 문자열 타입이고 value는 숫자타입이다.
    • key 값이 number를 제외하고는 key값의 쌍따옴표를 생략할 수 있다.
    • 여러 key-value 쌍의 셋트는 , (쉼표)나 new line (줄바꿈)으로 구분해야 한다.
    • Terraform 에서는 : (콜론) 대신 = (equal)을 사용하는걸 추천한다.

    형식

    {
      "a" = "b"
      "c" = "d"
    }
    

    선언방법

    map 타입의 선언 방법은 두 가지 방법이 있다.

    • Terraform 공식문서에서는 : (콜론) 대신 = (equal)을 사용하는걸 추천한다.
    // 첫번째 방법
    {
      "a": "b",
      "c": "d"
    }
    
    // 두번째 방법
    {
      a="b",
      c="d",
    }

    3️⃣ set

    고유한 값의 집합을 나타내는 컬렉션 타입이다.

    형식

    ([
      "user1",
      "user2",
      "user3"
    ])

    구조화된 타입 (Structured)

    구조화된 타입은 서로 다른 타입의 여러 값이 단일의 타입을 형성할 수 있다.

    • 구조화된 타입은 요소의 구조를 나타내는 매개변수로 스키마 구조 정보를 제공해야 한다.

    1️⃣ object

    고유한 타입을 갖는 속성 집합의 모음이다.

    • object 타입과 일치하는 값은 지정된 key를 모두 포함해야 한다.
    • 각 key의 값은 지정한 타입과 일치해야 한다.

    형식

    // 선언
    object({
      age=number,
      name=string
    })
    
    // input
    {
      age  = 27
      name = "Shin"
    }
    
    // input error #1
    {
      name = "Shin"
    }
    
    // input error #2
    {
      age  = "27"
      name = shin
    }
    

    2️⃣ tuple

    tuple 타입은 list와 같은 연속적인 값의 집합이다.

    • 각 요소들은 독립적인 유형을 가진다.
    • list와 마찬가지로 element에 접근하기 위해 첨자를 사용하여 접근할 수 있다.
      • 마찬가지로 index는 0부터 시작한다.
    • tuple의 element 개수는 선언한 타입의 수와 같아야 한다.
    • element의 타입은 tuple에 선언한 타입과 동일해야 한다.

    형식

    // 선언
    tuple([
      string,
      number,
      bool
    ])
    
    // input
    [
      "Shin",
      27,
      "true"
    ]
    • Go언어의 구조체 타입과 유사하다.
      • 구조체는 다른 타입의 값들을 변수 하나로 묶어주는 기능이다.

    요약

    타입 종류 타입 이름 형식
    기본 string "a", "b", "shin"
    number 1, 2, 3
    bool true, false
    컬렉션 map {
      a="b"
    }
    list [
      "shin",
      "seunghyeon"
    ]
    set ([
      "user1",
      "user2"
    ])
    구조화된 object {
      age = 27
      name = "Shin"
    }
    tuple [
      "Shin",
      27,
      true
    ]