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 블록을 마치 단일 블록에 정의된 것처럼 취급하지만, 별도의 블록을 사용해 관련 값을 시각적으로 구분되는 블록으로 구성하면 사용자가 구성을 더 쉽게 이해할 수 있어요.