
Terraform의 변수 중, variable과 output의 차이를 알아보자.
v
먼저 간략하게 용도를 살펴보면 variable의 경우, 모듈 내부로 값을 전달하기 위해서 매개변수와 같은 역할로 사용되며, output의 경우 모듈 내부에 정의된 값을 외부에서 사용할 때 주로 사용된다.
| 용도 | Terraform 블록 | 방향 | 설명 |
|---|---|---|---|
| 값을 모듈로 전달 | variable | 외부 → 모듈 내부 | 외부(main.tf 등)에서 모듈에 값을 넘겨줄 때 사용 |
| 값을 모듈에서 전달 | output | 모듈 내부 → 외부 | 모듈 안의 값을 외부(main.tf 등)에서 쓰고 싶을 때 사용 |
예시 구조를 보면 사용 용도를 보다 쉽게 이해할 수 있다.
가장 메인이 되는 외부의 main.tf 파일이 있고, 하나의 VPC 모듈이 있는 상황을 살펴보자.
VPC를 생성하는 main.tf가 있고 나머지는 우리가 비교해 볼 variable.tf과 output.tf 이다.

modules/vpc/variables.tfvariable "cidr_block" {
type = string
description = "VPC CIDR"
}
외부에서 값(매개변수)를 내부로 전달 받을 상자와 같다.
마치 C언어에서 int a; 라고 맨위에 선언 해 놓은 것과 같다.
modules/vpc/main.tfresource "aws_vpc" "my_vpc" {
cidr_block = var.cidr_block (1번의 값 사용)
}
1번에서 정의된 변수를 사용하는 부분이다.
정의된 변수를 사용해서 현재는 VPC를 만드는 예시이다.
modules/vpc/outputs.tfoutput "output_vpc_id" {
value = aws_vpc.my_vpc.id
}
생성된 VPC의 ID값을 외부.tf파일에서 사용할 수 있도록 내보내는 부분이다.
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 값을 불러와서 사용하는 것도 확인할 수 있다.
"10.0.0.0/16" → variable "cidr_block"로 루트(외부)에서 모듈로 값을 전달aws_vpc.my_vpc.id → output "vpc_id"을 통해서 모듈에서 외부로 값을 전달module.vpc.output_vpc_id처럼 사용