IaC

Terraform - (3) Variables

Operation CWAL 2021. 6. 7. 23:38

Terraform 변수형

Terraform 코드 안에서 다양한 타입의 변수를 정의하고, 이를 참조할 수 있다. 기본 제공하는 변수형은 다음과 같다. 'variable' 키워드로 시작하며, 그 뒤에 변수명을 선언하는 것으로 새로운 변수를 정의할 수 있다.

string

variable "vpcname" {
    type = string
    default = "myvpc"
}

일반적인 문자열이며, Unicode 문자들로 구성된다.

number

variable "sshport" {
    type = number
    default = 22
}

숫자(numeric)를 담을 수 있는 변수형으로, 정수형 데이터 외에 실수(ex: 3.14)도 표현 가능하다.

bool

variable "enabled" {
    type = bool
    default = true
}

true/false 값을 갖는 boolean 변수를 의미한다.

list

variable "mylist" {
    type = list(string)
    default = ["val1", "val2"]
}

여러개의 변수를 순서대로 저장하는 변수형으로, 참조시 0-index부터 시작한다. list에 저장할 변수형을 지정(ex: list(string))해야한다.

 

tuple

variable "mytuple" {
    type = tuple([string, number, string])
    default = ["cat", 1, "dog"]
}

다양한 변수형을 저장할 수 있는 변수형으로, 각각의 항목은 index를 통해 접근할 수 있다. list와 비슷하지만 다양한 Data Type을 지원한다는 점과 길이가 정해진다는 점에서 차이가 있다. 

map

variable "mymap" {
    type = map
    default = {
        key1 = "val1"
        key2 = "val2"
    }
}

key-value 쌍으로 데이터를 저장할 수 있는 변수형이다.

object

variable "myobject" {
    type = object({name = string, port = list(number)})
    default = {
        name = "MK"
        port = [22,25,80]
    }
}

다른 프로그래밍 언어에서 Class를 정의하는 것처럼, Terraform에서는 사용자가 원하는 변수형을 object를 통해 정의할 수 있다. map과 비슷하지만, Field의 Data Type을 미리 정의한다는 점에서 차이가 있다.

input

variable 정의시 default 필드가 존재하지 않는 경우, 사용자에게 직접 입력을 받는 프롬프트가 발생한다. 예를 들어 string 타입의 변수를 사용자에게 입력받아야 하는 경우, 다음과 같이 variable을 정의한다.

variable "inputname" {
    type = string
    description = "Set the name of the VPC"
}

output

terraform 수행 후 결과를 사용자에게 출력해야 한다면, output 키워드를 사용한다. 다음은 "myvpc" VPC의 id를 출력하는 예시이다.

output "vpcid" {
    value = aws_vpc.myvpc.id
}

 

응용

지금까지 공부한 내용을 바탕으로, 다음과 요구사항을 만족시키는 Terraform 파일을 작성해보자.

  • Region: ap-northeast-2
  • 아래와 같은 VPC를 생성한다.
    • Name: TerraformVPC 
    • CIDR: 192.168.0.0./24
  • Terraform 적용 후, VPC의 ID 출력한다.

 

사람마다 다를 수 있지만, main.tf 파일은 대부분 다음과 같은 형태일 것이다.

provider "aws" {
    region = "ap-northeast-2"
}

variable "vpccidr" {
    type = string
    default = "192.168.0.0/24"
}

variable "vpc_tags" {
    type = object({Name = string})
    default = {
        Name = "TerraformVPC"
    }
}

resource "aws_vpc" "myvpc" {
    cidr_block = var.vpccidr

    tags = var.vpc_tags
}

output "vpcid" {
    value = aws_vpc.myvpc.id
}

다음은 'terraform apply' 결과이다. AWS 콘솔에서도 동일한 내용을 확인 가능하다.

참고

Type and Values - Terraform

'IaC' 카테고리의 다른 글

Terraform - (5) Modules  (0) 2021.06.10
Terraform - (4) 기본 AWS 리소스  (0) 2021.06.08
Terraform - (2) 기본 사용법  (0) 2021.06.06
Terraform - (1) 소개 및 설치  (0) 2021.03.29
Ansible - Playbook Tutorial(3/3)  (0) 2021.03.07