모듈에서 값 관리하기
모듈에서 값 관리하기
입력 변수 값, 지역 값(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 블록 참조를 참고하세요.