DevOps/Terraform

[Terraform] 출력값(Output Value), 로컬값(Local Value)

TTOII 2022. 4. 22. 18:17
728x90

✔️ 출력 값 (Output Value)

 

Output Values - Configuration Language | Terraform by HashiCorp

Output values are the return values of a Terraform module.

www.terraform.io

출력값을 지정해 자주 확인해야 하는 리소스의 값을 확인할 수 있다.

 

인스턴스의 퍼블릭 ip나 EIP ip를 알고싶을 때는 어떻게 해야 할까 ?

terraform state show aws_eip.app_server_eip ← 해당 명령어로 확인할 수 있다.

하지만, 매번 terraform.tfstate 파일을 열어 보거나 terraform show를 통해서 보는 것은 번거로운 작업이다.

 

이러한 값들을 출력하기 위해 사용하는 것이 Output 변수이다.

 

사용 방법은 Input 변수와 유사하다. Output이라는 블록을 지정하고 Output 변수를 선언한다.
value에서 출력하기를 원하는 리소스의 값을 참조한다.

 

Outputs :
해당 포맷으로 값이 출력된다.

 

예제

output "instance_ip_addr" {
  value = aws_instance.server.private_ip
}

output.tf

output "app_server_elastic_ip" {
  value = aws_eip.app_server_eip.public_ip
}

apply 실행

Outputs:

또한 terraform output 하면 해당 명령어로 항상 Outputs을 볼 수 있다.

아래와 같이 선언하면 public_ip와 eip를 확인할 수 있다.

output "app_server_elastic_ip" {
  value = aws_eip.app_server_eip.public_ip
}

output "app_server_public_ip" {
  value = aws_instance.app_server.public_ip
}

추가로 ouput block 선언시 sensitive 인자를 통해 출력값을 숨길 수도 있다.

 

 

✔️ 로컬 값 (Local Value)

 

Local Values - Configuration Language | Terraform by HashiCorp

Local values assign a name to an expression that can be used multiple times within a Terraform module.

www.terraform.io

새로운 변수를 정의하거나 기존의 값을 바꿀 수 있다.

테라폼 문서의 Input variable에서보면

  • Input variables are like function arguments.
  • Output values are like function return values.
  • Local values are like a function's temporary local variables.

  • 입력 변수는 함수의 인자
  • 출력 변수는 함수의 리턴 값
  • 로컬 변수는 함수의 임시 로컬 변수

로컬 값은 테라폼 코드 내부에서만 사용하기위한 변수라고 생각하면 된다.
locals 라는 블록을 사용한다.

locals {
  service_name = "forum"
  owner        = "Community Team"
}

참조할 때는 다음과 같이 사용한다.

resource "aws_instance" "example" {
  # ...

  tags = local.common_tags
  tags = local.service_name # == forum 
}

로컬 값은 어떻게 응용하는가 ?

우리가 aws 리소스를 만들 때 태그를 붙이는 이유는 나중에 검색에 용이하게 하기 위해서이다.
만약 동시에 생성되는 리소스들에 동일한 태그를 붙이고 싶을 때 로컬 변수를 사용할 수 있다.

 

변수를 먼저 정의해보자
variable.tf

variable "project_name" {
  description = "Project Name"
  type        = string
  default     = "My_First_Project"
}

variable "project_environment" {
  description = "Project Environment"
  type        = string
  default     = "Local Development"
}

두개의 변수를 선언한다.

 

태그에는 기본적으로 아래와 같이 딕셔너리가 들어가지만 로컬 변수를 사용하면 이렇게 할 필요가 없다.

 tags = {
    Name        = var.instance_name
    Environment = "Terraform"
  }

 

local.tf

locals {
  common_tags = {
    Name         = "My Terraform"
    project_name = var.project_name
    project_env  = var.project_environment
  }
}

common_tags 라는 로컬 값을 만들고 내부에 다음 키들을 선언한다.
main.tf에서 리소스의 태그를 tags = local.common_tags 라고 선언하면 로컬 값을 참조한다.

+ tags                        = {
          + "Name"         = "My Terraform"
          + "project_env"  = "Local Development"
          + "project_name" = "My_First_Project"
        }

aws 콘솔에서 태그 정보를 확인하면 부여된 태그 정보를 확인할 수 있다.

이러한 방식은 서비스의 묶음에 일괄적으로 태그를 부여해 검색하기에 용이하다.

728x90