Terraform에서 output을 사용 하는 방법에 대해 알아보자!

2023.07.07

소개

안녕하세요! 클래스메소드 금상원 입니다. 이번 블로그에서는 Terraform에서 output을 정의하고 다른 모듈에서 사용하는 방법에 대해 알아보겠습니다.

output이란?

작성한 인프라에 대한 정보를 명령줄에서 사용할 수 있도록 하며 사용할 다른 Terraform 구성에 대한 정보를 노출할 수 있습니다.

출력 값의 용도

  • 하위 모듈은 출력을 사용하여 리소스 속성의 하위 집합을 상위 모듈에 노출할 수 있습니다.
  • 루트 모듈은 출력을 사용하여 실행 후 CLI 출력에 특정 값을 출력할 수 있습니다 terraform apply.
  • 원격 상태 를 사용할 때 루트 모듈 출력은 terraform_remote_state데이터 소스를 통해 다른 구성에서 액세스할 수 있습니다.

output 사용 방법

목표

VPC의 ID를 출력 해보자

VPC 전체 코드

이번 블로그에서는 output만 사용하는 방법에 기술되어 있으므로 VPC구축에 필요한 전체 코드는 아래의 블로그를 확인 해 주세요.

디렉토리 구조

├── ./envs
│   ├── ./envs/network.tf
│   ├── ./envs/provider.tf
│   └── ./envs/s3.tf
└── ./module
    ├── ./module/network
    │   ├── ./module/network/network.tf
    │   ├── ./module/network/output.tf
    │   └── ./module/network/variables.tf
    └── ./module/s3
        ├── ./module/s3/output.tf
        ├── ./module/s3/s3.tf
        └── ./module/s3/variables.tf

VPC 부분

envs/network.tf

module "network" {
  source   = "./module/network"
  cidr_vpc = "10.0.0.0/16"
}

위의 코드에서 network 모듈을 정의하고 VPC의 Cidr범위를 지정합니다.

module/network/variables.tf

variable "cidr_vpc" {}

위에서 작성한 cidr_vpc 값을 variables.tf 로 전달 합니다.

module/network/network.tf

resource "aws_vpc" "vpc" {
  cidr_block           = var.cidr_vpc
  instance_tenancy     = "default"
  enable_dns_hostnames = true
}

전달된 값을 이용하여 위의 코드처럼 VPC를 작성 합니다.

module/network/output.tf

output "vpc_id"{
    value = aws_vpc.vpc.id
    description = "The ID of the VPC"
}

위의 코드에서 작성된 VPC의 ID를 출력 합니다.

S3 부분

envs/s3.tf

module "s3" {
    source   = "./module/s3"
    vpc_id = module.network.vpc_id
}

network 모듈에서 output한 VPC의 ID를 사용할 수 있도록 작성 합니다.

module/s3/variables.tf

variable "vpc-id"{}

위에서 작성한 vpc_id값을 variables.tf로 전달 합니다.

module/s3/s3.tf

resource "aws_s3_bucket" "test-bucket" {
    bucket = "vpc-flowlog-${var.vpc-id}"
}

전달된 값을 참조하여 위의 코드와 같이 작성 하면 network 모듈에서 output한 값을 사용할 수 있습니다.

마무리

이번 블로그에서는 Terraform에서 제공하고 있는 output 이라는 기능을 소개 하였습니다. 다른 모듈의 값을 사용해야하는 분들께 조금이나마 도움이 되었으면 좋겠습니다.

참고 자료

본 블로그 게시글을 보시고 문의 사항이 있으신 분들은 클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !