one 함수

one 함수 (one Function)

one 함수는 리스트·집합·튜플 값이 정확히 0개 또는 1개의 요소를 가질 때, 그 첫 번째 요소를 반환하거나 컬렉션이 비어 있으면 null을 돌려주는 특수 목적 함수예요. 모듈 작성자가 단일 값이지만 null일 수도 있는 값을 깔끔하게 다루고 싶을 때 유용해요.

출처: 문서

본문

참고: 이 함수는 Terraform v0.15 이상에서만 사용할 수 있어요.

one 함수는 0개 또는 1개의 요소를 가진 리스트, 집합, 또는 튜플 값을 받아요. 컬렉션이 비어 있으면 null을 반환하고, 그렇지 않으면 첫 번째 요소를 반환해요. 요소가 2개 이상이면 오류를 반환해요.

이 함수는 조건부 항목을 0개 또는 1개 요소의 리스트로 표현하는 일반적인 상황을 위해 만들어진 함수예요. 예를 들어 모듈 작성자가 단일 값을 반환하고 싶은데 그 값이 null일 수도 있는 경우에 사용해요. 다음 예시를 볼게요.

variable "include_ec2_instance" {
  type    = bool
  default = true
}

resource "aws_instance" "example" {
  count = var.include_ec2_instance ? 1 : 0

  # (other resource arguments...)
}

output "instance_ip_address" {
  value = one(aws_instance.example[*].private_ip)
}

aws_instance 리소스는 count 인자가 0 또는 1을 반환하는 조건식으로 설정되어 있어서 aws_instance.example의 값은 0개 또는 1개 요소의 리스트가 돼요. instance_ip_address 출력 값은 one 함수를 사용해 단일 인스턴스의 private IP 주소를 반환하거나, 인스턴스가 생성되지 않았으면 null을 반환하는 깔끔한 방법이에요.

스플랫 연산자와의 관계 (Relationship to the "Splat" Operator)

Terraform 언어에는 [*]라는 내장 연산자가 있는데, 이를 스플랫(splat) 연산자라고 해요. 그 기능 중 하나는 null일 수도 있는 원시 값을 0개 또는 1개 요소의 리스트로 변환하는 거예요.

variable "ec2_instance_type" {
  description = "The type of instance to create. If set to null, no instance will be created."

  type    = string
  default = null
}

resource "aws_instance" "example" {
  count = length(var.ec2_instance_type[*])
}

더 알아보기 (Learn more)