본문 바로가기
terraform

[terraform] 테라폼 module 사용법(테라폼 모듈 사용법)

by devjh 2022. 5. 11.
반응형

이전 게시글에서 이어지는 내용입니다.

 

[terraform] terraform variable 사용법(테라폼 변수 사용법)

이전 게시글에서 이어지는 내용입니다. [terraform] terraform 시작하기 (terraform tutorial, 테라폼 예제) aws를 잘 몰라도 테라폼을 할 수 있도록 간단한 예제 게시글을 작성합니다 vpc셋팅같이 aws 지식이

frozenpond.tistory.com

 

이번 게시글에서는 terraform module 사용법에 대해 정리합니다.

마찬가지로 s3 bucket만 사용한 예제입니다.

 

1. terraform module이란?

템플릿의 개념으로 resource를 가져와서 원하는 자원을 만드는 terraform 자원입니다.

 

개인적으로는 처음 공부할때 가장 헷갈리는 개념이었습니다.

모듈은 보통 만들어놓고 외부에서 가져다가 쓰는 느낌이었는데 terraform에서는 module을 만들어서 원하는 틀을 상속받고 필요한 부분을 override해서 사용하는 느낌입니다.

 

여러 resource를 variable과 함께 정의하고 module을 사용해 해당 디렉토리 자체를 가져가 사용하는 테라폼 기능입니다.

 

소스코드는 아래의 github 레포 module 브랜치에서 확인할 수 있습니다.

 

GitHub - jaeho310/terraform-study

Contribute to jaeho310/terraform-study development by creating an account on GitHub.

github.com

2. common/main.tf

resource "aws_s3_bucket" "this" {
  bucket = var.bucket_name
}

 

common디렉토리 아래 main.tf를 만듭니다.

bucket 이름은 var.bucket_name으로 지정합니다.

 

3. common/variables.tf

variable "bucket_name" {
  type = string
}

common디렉토리 아래 variable.tf를 만듭니다.

변수를 선언하는 부분입니다.

선언이 되어 있어야 bucket이름으로 var.bucket_name을 사용할 수 있습니다.

4. terraform.tfvars

bucket_name = "my-terraform-bucket-02"

common디렉토리 아래 terraform.tfvars 를 만듭니다.

이번게시글에서는 있어도 되고 없어도 되는 부분이지만 tfvars와 module의 우선순위를 확인하기 위한 예제입니다.(일반적으로 module로 당겨갈때는 해당 파일을 만들지 않습니다)

variables에 default value가 없다면 tfvars파일이나 module에서 변수를 채워줘야합니다.

5. order-serivce/main.tf

module "order-service-main" {
  // 원하는 디렉토리를 가져옵니다.
  source = "../common/s3"
  // source 디렉토리에 있는 variable을 채우줍니다.
  bucket_name = "order-service-bucket-135"
}


// provider는 module을 당겨온 쪽에서 정의합니다.
provider "aws" {
#  profile = "your profile"
  region = "ap-northeast-2"
}

주문관련 팀이 있고 해당 팀에서 bucket 생성한다고 가정합니다.

 

order-service라는 디렉토리를 만들고 main.tf 파일을 생성한 후 

source 필드에 common/s3를 넣어줍니다.

그리고 s3/common/variable에 선언했던 bucket_name 을 채워줍니다.

 

테라폼의 엔드포인트는

resource "xx" "xx" {}

으로 해당 내용을 채워주는게 목적입니다.

 

모듈을 사용할때는 해당 엔드포인트에서 모듈을 가져가 채워주는게 아니라
엔드포인트를 가져와서(디렉토리 자체를 가져와서) module에 넣어주고 변수를 재정의 해서 사용한다는 점에 유의합니다.

 

해당 내용을 모두 작성하였으면 order-serivce 디렉토리로 이동한후 init plan apply를 진행합니다.

5. 확인

 

이제 원하는 공통단을 만들어놓고 하위모듈에서 변수만 채워주며 편하게 버킷을 만들어 줄수 있게 됐습니다.

 

6. 마치며

추가적인 테라폼 핵심 문법을 확인하고 싶으시면 아래 게시글을 참고해주세요

 

[terraform] 테라폼 count, 조건문, 반복문, dynamic, for_each, lookup 사용법

이번게시글에서는 count, 조건문, 반복문 사용법을 정리합니다. s3 bucket만 사용한 예제입니다. 1. count 사용법 provider "aws" { region = "ap-northeast-2" } resource "aws_s3_bucket" "this" { count = 3 bucket = "frozen-bucket-$

frozenpond.tistory.com

 

반응형

댓글