-
[T102 4주차] (2)테라폼 모듈(Module)테라폼(Terraform) 스터디 2023. 7. 30. 03:01
모듈(Modele)이 란?
- 구성의 집합이다.
- 테라폼의 규모가 커지고 복잡해져 생긴 문제를 보완하고 관리 작업을 수월하게 하기 위한 방안으로 활용
- 관리성 : 일관된 변경 작업을 진행 가능
- 캡슐화 : 필요한 항목만을 외부에 노출
- 재사용성 : 비슷한 프로비저닝에 이미 검증된 구성을 바로 사용
- 일관성과 표준화 : 구성의 일관성을 제공
모듈(Modele)의 구분
- 루트 모듈, 자식 모듈로 구분
- 루트 모듈: 테라폼을 실행하고 프로비저닝하는 최상위 모듈
- 자식 모듈: 루트 모듈의 구성에서 호출되는 외부 구성 집합
모듈(Modele) 작성 기본 원칙
- 모듈 디렉터리 형식을 terraform-<프로바이더 이름>-<모듈 이름> 형식을 제안
- 테라폼 구성은 궁극적으로 모듈화가 가능한 구조로 작성할 것을 제안
- 각각의 모듈을 독립적으로 관리하기를 제안
- 공개된 테라폼 레지스트리의 모듈을 참고하기를 제안
- 작성된 모듈은 공개 또는 비공개로 게시해 팀 또는 커뮤니티와 공유하기를 제안
- 모듈 작성 실습
- 하나의 프로비저닝에서 사용자와 패스워드를 여러 번 구성해야 하는 경우를 가상의 시나리오로 삼아 모듈화를 진행해보겠다.
- random_pet는 이름을 자동으로 생성하고, random_password는 사용자의 패스워드를 설정한다 - random_pet
- random_password는 random 프로바이더 리소스로 난수 형태로 패스워드를 만들 수 있다.
- 하나의 프로비저닝에서 사용자와 패스워드를 여러 번 구성해야 하는 경우를 가상의 시나리오로 삼아 모듈화를 진행해보겠다.
● 실습
시나리오- 하나의 피로비저닝에서 모듈을 통해사용자와 패스워드를 여러번 구성하기
(1) main.tf, variable.tf, output.tf 파일 생성
# main.tf 생성
resource "random_pet" "name" {
keepers = {
ami_id = timestamp()
}
}
resource "random_password" "password" {
length = var.isDB ? 16 : 10
special = var.isDB ? true : false
override_special = "!#$%*?"
}# variable.tf 파일 생성
variable "isDB" {
type = bool
default = false
description = "패스워드 대상의 DB 여부"
}# output.tf 파일 생성
output "id" {
value = random_pet.name.id
}
output "pw" {
value = nonsensitive(random_password.password.result)
}● 실행- (1)자식 모듈 동작 테스트
# 디렉토리 생성
cd 06-module-traning/modules/terraform-random-pwgen
# tf 파일형식 파일 보기
ls *.tf
terraform init && terraform plan
# 테스트를 위해 apply 시 변수 지정
terraform apply -auto-approve -var=isDB=true
# 확인
terraform state list
terraform state show random_pet.name
terraform state show random_password.password
# tfstate에 모듈 정보 확인 (민감 정보 확인 가능)
cat terraform.tfstate | grep module● 실행- (2)자식 모듈 호출 실습
#디렉토리 생성
mkdir -p 06-module-traning/06-01-basic#main.tf 파일 생성
module "mypw1" {
source = "../modules/terraform-random-pwgen"
}
module "mypw2" {
source = "../modules/terraform-random-pwgen"
isDB = true
}
output "mypw1" {
value = module.mypw1
}
output "mypw2" {
value = module.mypw2
}●실행 결과: 자식 모듈을 호출해 반복 재사용하는 루트 모듈의 결과
#루트 모듈을 위한 디렉토리 생성
cd 06-module-traning/06-01-basic
#
terraform init && terraform plan && terraform apply -auto-approve
Plan: 4 to add, 0 to change, 0 to destroy.
Changes to Outputs:
+ mypw1 = {}
+ mypw2 = {}
# 확인
terraform state list
# tfstate에 모듈 정보 확인
cat terraform.tfstate | grep module
# terraform init 시 생성되는 modules.json 파일 확인
tree .terraform
## 모듈로 묶여진 리소스는 module이라는 정의를 통해 단순하게 재활용하고 반복 사용할 수 있다.
## 모듈의 결과 참조 형식은 module.<모듈 이름>.<output 이름>으로 정의된다.
cat .terraform/modules/modules.json | jq
# graph 확인
terraform graph > graph.dot
'테라폼(Terraform) 스터디' 카테고리의 다른 글
[T102 6주차] 협업(Git) (0) 2023.08.11 [T102 4주차] (1)테라폼 state (0) 2023.07.30 [T102 3주차] (1) 테라폼 프로비저너 (0) 2023.07.22 [T102 2주차] (2) 테라폼의 기본 문법(스터디 실습 (VPC + 보안그룹 + EC2 배포) (0) 2023.07.15 [T102 2주차] (1) 테라폼의 기본 문법(리소스, 변수) (0) 2023.07.15 - 구성의 집합이다.