표현식을 재사용하는 지역 값(local) 사용하기

표현식을 재사용하는 지역 값(local) 사용하기

지역 값(local value)은 다른 프로그래밍 언어의 함수 범위 변수와 비슷해요. 지역 값은 표현식에 이름을 붙여서, 모듈 안에서 그 표현식을 반복하는 대신 이름을 여러 번 사용할 수 있게 해줘요.

출처: 문서

본문

실습: Simplify Terraform Configuration with Locals 튜토리얼을 해보세요.

지역 값 정의하기

설정 전체에서 표현식을 재사용하고 싶을 때 locals 블록을 추가하세요. locals 블록은 어떤 모듈에서든 정의할 수 있고, 그 값으로 유효한 Terraform 표현식을 뭐든 지정할 수 있어요. 다음 구조를 참조할 수 있어요:

  • 변수 (Variables)
  • 리소스 속성 (Resource attributes)
  • 함수 출력 (Function outputs)
  • 다른 지역 값 (Other local values)

예를 들어 일관된 명명 규칙을 만들고, 기본 서브넷을 식별하고, 환경별 구성 설정을 따로 떼어 놓기 위해 locals 블록을 정의할 수 있어요:

locals {
  # Naming convention
  resource_name = "${var.project_name}-${var.environment}"

  # Process the subnet list
  primary_public_subnet = var.subnet_ids[0]
  subnet_count          = length(var.subnet_ids)

  # Environmental deployment settings
  is_production      = var.environment == "prod"
  monitoring_enabled = var.monitoring || local.is_production
}

지역 변수 구성 방법에 대한 자세한 내용은 locals 블록 참조를 참고하세요.

지역 변수 참조하기

설정에서 locals 블록의 값을 참조하려면 local. 문법을 사용하세요. locals 블록은 지역 값을 정의하지만, 개별 값을 참조할 때는 단수형 local 키워드를 사용해야 해요.

예를 들어 설정에서 local.resource_name을 참조해 리소스에 이름을 붙이고, local.primary_public_subnetlocal.monitoring_enabled를 사용해 웹 서버를 구성할 수 있어요:

resource "aws_instance" "web" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = var.instance_type
  subnet_id     = local.primary_public_subnet
  monitoring    = local.monitoring_enabled

  tags = {
    Name        = local.resource_name
    Environment = var.environment
  }
}

resource "aws_security_group" "web" {
  name = "${local.resource_name}-sg"

  tags = {
    Name = "${local.resource_name}-security-group"
  }
}

지역 값은 정의한 모듈 안에서는 접근할 수 있지만, 다른 모듈에서는 접근할 수 없어요. 다만 지역 값을 인자로 하위 모듈에 전달할 수는 있어요.

지역 값은 반복을 피하게 해주고 표현식의 값에 의미 있는 이름을 부여해줘요. 하지만 값이 어디서 비롯됐는지 숨기기 때문에 설정을 읽기 어렵게 만들 수도 있어요. 한 값을 여러 곳에서 재사용해 한 곳에서 값을 변경할 수 있게 하거나, 값이 복잡한 표현식의 결과일 때 지역 값을 사용하세요.

locals 블록에 대해 더 알아보려면 locals 블록 참조를 참고하세요.

더 알아보기 (Learn more)