locals, tags

hyuckhoon.ko·2023년 1월 17일
0

테라폼

목록 보기
3/4
post-thumbnail

1. locals

Interpolation Syntax란 개념이 등장한다.
서로 다른 자원에 공통적으로 필요한 정보들이 있다. 이때 미리 정의한 공통 변수 문자열을 연결하여 불필요한 중복 입력 작업을 줄인다.
특히, 테라폼에서 locals로 반복 작업을 줄인다.

variables.tf 업데이트

variable "prefix" {
  default = "ai-service"
}

(이하 생략)

main.tf에 locals 추가

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

provider "aws" {
  access_key = var.aws_access_key
  secret_key = var.aws_secret_access_key
  region     = var.aws_region
}

locals {
  prefix = "${var.prefix}-${terraform.workspace}"
}

2. tags

자원이 많아질수록 어떤 프로젝트의 자원인지, 어떤 환경(dev, staging, production)의 자원인지 빠르게 파악하기가 어려워진다. tags란 메타데이터를 통해 이를 해결한다.

variables.tf 업데이트

variable "prefix" {
  default = "ai-service"
}

variable "project" {
  default = "Your Project Name"
}

variable "description" {
  default = "추가 설명"
}

variable "aws_access_key" {}
variable "aws_secret_access_key" {}
variable "aws_region" {}

main.tf 업데이트

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

provider "aws" {
  access_key = var.aws_access_key
  secret_key = var.aws_secret_access_key
  region     = var.aws_region
}

locals {
  prefix = "${var.prefix}-${terraform.workspace}"
  common_tags = {
    Environment = terraform.workspace
    Project     = var.project
    Description = var.description
    ManagedBy   = "Terraform"
  }
}

3. 유의할 점

main.tf에 locals 블락에 공통으로 사용될 정보를 정의했다.
하지만 해당 locals를 참조할 땐, local로, 즉 s를 뺀 채로 사용해야 한다.

resource "aws_instance" "example_1" {
  # ...

  tags = local.common_tags,
}

resource "aws_instance" "example_2" {
  # ...

  tags =   tags = merge(
    local.common_tags,
    tomap({ "Name" = "${local.prefix}-main" })
  )
}

4. tomap 함수

> tomap({"a" = 1, "b" = 2})
{
  "a" = 1
  "b" = 2
}

테라폼 tomap은 모두 동일한 데이터 타입이어야 한다.
따라서, 아래와 같이 데이터 타입이 다른 경우 다수의 데이터 타입인 문자열로 형변환 한다.

> tomap({"a" = "foo", "b" = true})
{
  "a" = "foo"
  "b" = "true"
}

0개의 댓글