locals 블록 참조

locals 블록 참조 (Locals Block Reference)

locals 블록을 사용해 값을 정의하고 Terraform 모듈 안에서 재사용할 수 있어요. 로컬 값은 표현식에 이름을 부여해서 동일한 표현식을 반복하는 대신 이름을 여러 번 사용할 수 있게 해줘요.

출처: 문서

본문

locals 블록을 사용해 값을 정의하고 Terraform 모듈 안에서 재사용하세요.

직접 해보기: Simplify Terraform Configuration with Locals 튜토리얼을 시도해보세요.

배경

locals 블록은 다른 프로그래밍 언어의 함수 스코프 변수와 유사해요. 로컬 값은 표현식에 이름을 부여해서 모듈 안에서 표현식을 반복하는 대신 이름을 여러 번 사용할 수 있게 해줘요.

어떤 모듈에서도 로컬 값을 정의할 수 있어요. 로컬 값은 유효한 Terraform 표현식이면 무엇이든 될 수 있으며, 변수, 리소스 속성, 함수 출력 또는 다른 로컬 값을 참조해 데이터를 변환하거나 결합할 수 있어요.

구성에서 locals 블록을 사용하는 방법에 대해 더 알아보려면 locals를 사용해 표현식 재사용하기를 참조하세요.

구성 모델

locals 블록은 표현식에 이름을 할당하는 것을 지원해요:

전체 구성

locals 블록은 표현식에 이름을 할당하는 것을 지원해요:

locals {
   =
   =
}

사양

locals 블록은 다음 구성을 지원해요.

locals

모듈 안에서 locals 블록을 사용해 여러 임시 값을 정의할 수 있어요. 단일 모듈에 여러 locals 블록을 선언할 수 있으며, Terraform은 마치 모두 단일 블록에 정의된 것처럼 취급해요.

locals {
  value_name =
}

locals {
  other_value_name =
}

로컬 값 이름은 유효한 식별자 (identifiers)여야 해요. locals 값으로 유효한 Terraform 표현식이면 무엇이든 할당할 수 있으며, 변수, 리소스, 데이터 소스 또는 다른 로컬 값에 대한 참조를 포함할 수 있어요.

요약

  • 데이터 유형: 블록
  • 필수: 정의하는 각 locals 블록에 대해 최소 하나의 값을 할당해야 해요.
  • 예시: 기본 locals 예시

예시

다음 예시들은 locals 블록의 일반적인 사용 사례를 보여줘요.

기본 locals 예시

다음 예시에서 locals 블록은 서비스 메타데이터에 대한 로컬 값을 정의한 다음, aws_instance 리소스가 local. 구문을 사용해 그 값을 참조해요:

locals {
  service_name = "forum"
  owner        = "community-team"
  environment  = "production"
}

resource "aws_instance" "web" {
  ami           = "ami-12345678"
  instance_type = "t3.micro"

  tags = {
    Name        = local.service_name
    Owner       = local.owner
    Environment = local.environment
  }
}

locals 블록이 로컬 값을 정의하지만, 참조할 때는 단수형인 local이라는 객체의 속성으로 참조해요. 로컬 값은 정의한 모듈 안에서만 접근할 수 있고, 다른 모듈에서는 접근할 수 없어요.

데이터 결합 및 변환

다음 예시에서 local.instance_ids는 concat 함수로 두 개의 다른 리소스 목록의 인스턴스 ID를 결합해요. local.common_tags 값은 다른 로컬 값과 변수를 참조하는 맵이에요.

locals {
  instance_ids = concat(aws_instance.blue[*].id, aws_instance.green[*].id)

  common_tags = {
    Service     = local.service_name
    Owner       = local.owner
    Environment = var.environment
    ManagedBy   = "terraform"
  }
}

여러 locals 블록

다음 예시에서 여러 locals 블록이 관련 값을 구성해요. 첫 번째 locals 블록은 네트워크 구성을, 두 번째는 애플리케이션 구성을, 세 번째는 계산된 값을 구성해요:

locals {
  # Network configuration
  vpc_cidr = "10.0.0.0/16"
  az_count = length(data.aws_availability_zones.available.names)
}

locals {
  # Application configuration
  app_name = "${var.project_name}-${var.environment}"
  app_port = 8080
}

locals {
  # Computed values
  subnet_cidrs = [
    for i in range(local.az_count) :
    cidrsubnet(local.vpc_cidr, 8, i)
  ]
}

Terraform은 여러 locals 블록을 마치 단일 블록에 정의된 것처럼 취급하지만, 별도의 블록을 사용해 관련 값을 시각적으로 구분되는 블록으로 구성하면 사용자가 구성을 더 쉽게 이해할 수 있어요.

더 알아보기 (Learn more)