[Terraform] variable, ouput

vinca·2025년 7월 24일

Introduction

Terraform의 변수 중, variable과 output의 차이를 알아보자.

용도

v
먼저 간략하게 용도를 살펴보면 variable의 경우, 모듈 내부로 값을 전달하기 위해서 매개변수와 같은 역할로 사용되며, output의 경우 모듈 내부에 정의된 값을 외부에서 사용할 때 주로 사용된다.

용도Terraform 블록방향설명
값을 모듈로 전달variable외부 → 모듈 내부외부(main.tf 등)에서 모듈에 값을 넘겨줄 때 사용
값을 모듈에서 전달output모듈 내부 → 외부모듈 안의 값을 외부(main.tf 등)에서 쓰고 싶을 때 사용

예시 구조를 보면 사용 용도를 보다 쉽게 이해할 수 있다.

가장 메인이 되는 외부의 main.tf 파일이 있고, 하나의 VPC 모듈이 있는 상황을 살펴보자.

VPC를 생성하는 main.tf가 있고 나머지는 우리가 비교해 볼 variable.tfoutput.tf 이다.

구조


1. modules/vpc/variables.tf

variable "cidr_block" {
  type        = string
  description = "VPC CIDR"
}

외부에서 값(매개변수)를 내부로 전달 받을 상자와 같다.

마치 C언어에서 int a; 라고 맨위에 선언 해 놓은 것과 같다.


2. modules/vpc/main.tf

resource "aws_vpc" "my_vpc" {
  cidr_block = var.cidr_block (1번의 값 사용)
}

1번에서 정의된 변수를 사용하는 부분이다.
정의된 변수를 사용해서 현재는 VPC를 만드는 예시이다.


3. modules/vpc/outputs.tf

output "output_vpc_id" {
  value = aws_vpc.my_vpc.id
}

생성된 VPC의 ID값을 외부.tf파일에서 사용할 수 있도록 내보내는 부분이다.


4. main.tf (외부 모듈)

module "vpc" {
  source     = "./modules/vpc"
  cidr_block = "10.0.0.0/16"  # variable에 값 입력 (1번에 입력)
}

resource "aws_subnet" "example" {
  vpc_id = module.vpc.output_vpc_id # 3번 모듈의 output에서 값 받아옴
}

콘솔창에서 명령어가 수행되는 부분인 외부 루트 모듈이다.

module을 통해서 ./modules/vpc 에 정의된 전체 .tf 리소스를 가져오게 되는데, 이 때 cidr_block = "10.0.0.0/16" 을 통해서 variable에 값을 넣어주게 된다.

이후 이 모듈의 outputs.tf에 정의된 output_vpc_id 값을 불러와서 사용하는 것도 확인할 수 있다.


핵심 흐름

  1. "10.0.0.0/16"variable "cidr_block"로 루트(외부)에서 모듈로 값을 전달
  2. aws_vpc.my_vpc.idoutput "vpc_id"을 통해서 모듈에서 외부로 값을 전달
    → 외부에서는 module.vpc.output_vpc_id처럼 사용
profile
붉은 배 오색 딱다구리 개발자 🦃Cloud & DevOps

0개의 댓글