모듈에서 값 관리하기

모듈에서 값 관리하기

입력 변수 값, 지역 값(local value), 출력 값(output value)을 정의해서 Terraform 모듈을 유연하고 조합 가능하며 재사용 가능하게 만들어 보세요.

출처: 문서

본문

배경

Terraform 모듈은 입력(input)과 출력(output)을 통해 서로 소통해요. 모듈을 매개변수화(parameterize)하려면 변수를 추가해서 다른 사용자가 런타임에 커스텀 입력 값을 제공할 수 있게 해요. 출력은 모듈에서 데이터를 노출해서 인프라에 대한 정보를 내보낼 수 있게 해주고, 지역 값(local)은 모듈 안에서 표현식을 정의하고 재사용할 수 있게 해줘요.

모듈에 명확한 인터페이스를 정의하면 모듈 사이에 경계가 생겨서, 각 모듈의 구현을 독립적으로 유지하면서 재사용 가능한 구성 요소로 인프라를 조합할 수 있어요.

입력 모듈 인자에 변수 정의하기

변수는 모듈이 인자로 받아들이는 값을 지정해서 모듈의 입력 인터페이스를 정의해요.

예를 들어 다음 variable 블록은 instance_type이라는 입력 변수를 정의해서, 모듈 사용자가 런타임에 web에 대한 EC2 인스턴스 타입을 지정할 수 있게 해줘요:

variable "instance_type" {
  type        = string
  description = "EC2 instance type for the web server"
  default     = "t2.micro"
}

resource "aws_instance" "web" {
  instance_type = var.instance_type
  # ...
}

변수 정의 방법, 값 할당 방법, HCP Terraform에서 변수를 관리하는 방법에 대해 더 알아보려면 변수로 모듈 인자 입력하기를 참고하세요. variable 블록과 그 인자에 대해 더 알아보려면 variable 블록 참조를 참고하세요.

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

지역 값(local)은 모듈에 범위가 지정된 임시 값을 정의해서, 설정에서 표현식에 이름을 붙이고 재사용할 수 있게 해줘요. 예를 들어 다음 locals 블록은 애플리케이션 이름에 대한 지역 값을 정의해요:

locals {
  app_name = "${var.project_name}-${var.environment}"
}

resource "aws_instance" "example" {
  # ...
  tags = {
    Name = local.app_name
  }
}

resource "aws_instance" "example2" {
  # ...
  tags = {
    Name = local.app_name
  }
}

설정의 다른 부분에서 지역 값을 참조해서 동일한 표현식을 여러 번 다시 입력하는 일을 피할 수 있어요.

지역 값을 언제 사용해야 하는지에 대해 더 알아보려면 표현식을 재사용하는 지역 값 사용하기를 참고하세요. locals 블록과 그 인자에 대해 더 알아보려면 locals 블록 참조를 참고하세요.

모듈 데이터를 노출하는 출력(output) 정의하기

출력은 모듈에서 데이터를 노출해서, 모듈 값을 Terraform CLI, HCP Terraform 그리고 설정의 다른 부분에서 사용할 수 있게 해줘요.

다음 예시에서 instance_ip 출력은 web EC2 인스턴스의 프라이빗 IP 주소를 내보내요:

output "instance_ip" {
  description = "Private IP address of the EC2 instance"
  value       = aws_instance.web.private_ip
}

resource "aws_instance" "web" {
  # …
}

모듈에서 데이터를 노출하고 그 값에 접근하는 방법에 대해 더 알아보려면 모듈 데이터를 노출하는 출력 사용하기를 참고하세요. output 블록과 그 인자에 대해 더 알아보려면 output 블록 참조를 참고하세요.

더 알아보기 (Learn more)