본문 바로가기

IaC/Terraform

[Terraform]테라폼 Local Values 사용법

Terraform에는 명명된 값을 요청하거나 게시하기 위한 몇 가지 종류의 블록이 포함되어 있습니다.

  • Input Variables 는 Terraform 모듈의 매개변수 역할을 하므로 사용자는 소스를 편집하지 않고도 동작을 커스터마이징할 수 있습니다. 
  • Output Values 은 Terraform 모듈의 반환(return) 값과 같습니다.
  • Local Values 은 표현식에 간단한 이름을 지정할 수 있는 편리한 기능입니다.

테라폼의 Local Values(지역 변수)란?

테라폼에서는 값(value)을 다루기 위한 다양한 방법이 있습니다. 여기서는 그 중 'Local Values'라는 것에 대해 알아보겠습니다.

Local Values란, 테라폼 코드 내에서 반복하여 사용되는 값을 간편하게 표현하기 위해 만든 변수입니다. 이를 통해 코드의 반복을 줄이고, 가독성을 높일 수 있습니다.

Local Values 사용 예시

1. 기본 설정 및 AWS 설정

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
}

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

2. 사용자 입력 변수

ec2_name 변수를 사용하여 EC2의 이름을 설정합니다.

variable "ec2_name" {
  description = "생성되는 ec2의 이름 설정"
  type        = string
  default     = "ec2-name-from-input-variable"
}

3. Local Values 정의

공통으로 사용되는 태그들을 Local Values로 저장합니다.

locals {
  common_tags = {
    Env = "dev"
    Project = "IaC"
  }
}

4. 리소스 생성

EC2 인스턴스를 생성하는 코드입니다. 여기서는 tags 속성에 Local Values를 사용하여 공통 태그들을 포함시킵니다.

resource "aws_instance" "jeff_tf_ubuntu" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t2.micro"
  subnet_id     = "subnet-004f0791a0c0c4e57"
  security_groups = [ "sg-07a2fa9eb741e42d6" ]
  tags = merge(
    {
      Name = var.ec2_name
    },
    local.common_tags # Local Values 사용
  )
}

locals { # Local Values 작성 }

tags = local.common_tags # Local Values를 사용

tags와 같은 맵(Map) 형태의 속성에 대해 두 개의 맵을 병합할 때는 merge 함수를 사용한다.

5. 데이터 정보 가져오기

AWS에서 사용할 AMI 이미지 정보를 가져옵니다.

data "aws_ami" "ubuntu" {
  most_recent = true
  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
  }
  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }
  owners = ["099720109477"] # Canonical
}

6. 실행

실행 후, 태그 정보에 Local Values로 설정한 공통 태그들이 포함되어 있는 것을 확인할 수 있습니다.

tf apply

tf apply 

➜ tf apply                                         
# 중략
      + tags                                 = {
          + "Env"     = "dev"
          + "Name"    = "ec2-name-from-custom.auto.tfvars"
          + "Project" = "IaC"
        }

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

결과

 

 

전체코드

terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.0"
    }
  }
}

# Configure the AWS Provider
provider "aws" {
  region = "ap-northeast-2"
}

# Input values 작성
variable "ec2_name" {
  # 공백으로 두고 apply할때 vpc_name을 입력 받는다.  
  description = "생성되는 ec2의 이름 설정"
  type        = string
  default     = "ec2-name-from-input-variable"
}

# Local values 작성
locals {
  common_tags = {
    Env = "dev"
    Project = "IaC"
  }
  
}

# resource - instanace 
resource "aws_instance" "jeff_tf_ubuntu" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t2.micro"
  subnet_id = "subnet-004f0791a0c0c4e57" # public-management-1a
  security_groups = [ "sg-07a2fa9eb741e42d6" ] # management
  tags = merge(
    {
      Name = var.ec2_name
    },
    local.common_tags # Local Values를 사용
  )
}

# data - aws_ami
data "aws_ami" "ubuntu" {
  most_recent = true

  filter {
    name   = "name"
    values = ["ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*"]
  }

  filter {
    name   = "virtualization-type"
    values = ["hvm"]
  }

  owners = ["099720109477"] # Canonical
}

 

2023.02.07 - [IaC/Terraform] - [Terraform]테라폼 Input Variables 사용법

2023.08.14 - [IaC/Terraform] - [Terraform]테라폼 Output Values 사용법

2023.02.09 - [IaC/Terraform] - [Terraform]테라폼 Local Values 사용법

Local Values doc link
사용한 terraform code
2023.02.05 - [IaC/Terraform] - [Terraform]AWS Provider로 Ubuntu AWS EC2 Instance 만들기