[Terraform] 테라폼 variable (1)

전형빈·2023년 3월 29일
0

테라폼

목록 보기
9/12
post-thumbnail

terraform variable 테라폼 변수 사용법에 대해 정리

terraform variable이란

테라폼도 HCL이라는 언어입니다. 완벽한 프로그래밍 언어라고 보긴 힘들지만 변수나 반복문과 같은 프로그래밍 언어의 기능을 제공합니다. 그 중 variable은 변수와 같은 개념입니다.

변수를 사용하는 방법은 상황에 따라 여러가지가 있습니다. AWS S3를 생성해보며 확인해보도록 하겠습니다.


1. variables.tf 파일에 직접 선언

# main.tf
resource "aws_s3_bucket" "s3_test" {
  bucket = var.bucket_name
}
# variables.tf
variable "bucket_name" {
	type = string
    default = "terraform-bucket-hb-s3"
}

편의상 provider는 생략하겠습니다. 이렇게 variables.tf에서 default로 변수 값을 지정해서 생성할 수 있습니다.


2. terraform.tfvars 파일에서 변수 값 선언

variables.tf에서 default로 변수 값을 넣어주지 않고 type만 정의 후 terraform.tfvars 파일을 생성하여 변수 값을 지정할 수 있습니다. tfvars 파일이 아니어도 module이나 plan 시 직접 입력할 수도 있다.

# variables.tf
variable "aws_s3_bucket" {
    type = string
    default = "terraform-var-default"
}

# terraform.tfvars
aws_s3_bucket = "terraform-var-tfvars"

그럼 만약 variables.tf과 .tfvars에 각각 다른 변수 값이 지정되면 어떤게 최종적으로 적용될지 확인해보겠습니다.


3. 생성된 리소스 확인

위에서 작성한 소스 코드로 실제 aws에 s3를 생성해보면 아래와 같이 생성이 된다.

$ terraform init
$ terraform plan
$ terraform apply
$ aws s3 ls --profile $PROFILE

terraform.tfvars의 변수 값이 적용된 걸 확인할 수 있습니다.


참고

Terraform에서는 정해진 순서를 가지고 값을 읽고 제일 마지막 순서로 정의된 값을 최종적으로 사용합니다.

우선 값을 읽는 순서는

  1. 환경변수
  2. terraform.tfvars 파일
  3. terraform.tfvars.json 파일
  4. .auto.tfvars 또는 .auto.tfvars.json 파일중 사전식 순서대로
  5. Command Line 의 -var 또는 -var-file 옵션을 명시된 순서대로

Terraform 은 위의 순서대로 값을 읽으며 값은 계속 Overwrite 되므로 가장 마지막에 나온 값이 사용되게 됩니다.

예를 들어 동일한 variable 값이 환경변수, terraform.tfvars에 동시에 할당되어 있다면 마지막에 읽은 값인 terraform.tfvars에 있는 값으로 할당이 됩니다.

한가지 헷갈리지 말아야할건 마지막으로 읽은 파일의 값만 사용하는 것이 아니라 값을 읽는 순서대로 계속 값을 Overwrite 한다는 것입니다.

만약 a.tfvars에 A라는 변수 값이, b.tfvars에 B라는 변수 값이 있다면, b.tfvars 파일만 사용해서 값을 할당하는게 아니라 a.tfvars 에서 A값을 할당하고 b.tfvars에선 A값이 없으므로 B 값만 할당해서 결국 A, B 모두 할당이 되는 것이라고 합니다.


<참고>
테라폼 변수 값 할당 순서

0개의 댓글