Terraform에서 output을 사용 하는 방법에 대해 알아보자!
소개
안녕하세요! 클래스메소드 금상원 입니다. 이번 블로그에서는 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)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !