Trong bài viết trước mình có chia sẽ nhanh cách tạo một module trong Terraform theo một cách rất là nghiệp dư.
Trong bài này mình muốn bổ sung thêm một vài ý trong quá trình mình học được, để bài viết ngày càng chỉnh chu hơn.
Chuẩn bị môi trường dev
Để tăng tính thuận tiện, mình có chuẩn bị ở đây một file được gọi là Makefile, file này chứa shell script dùng để gọi nhanh những lệnh thường dùng, (bạn có thể dùng alias nhưng setup với makefile sẽ đồng bộ với nhóm của bạn).
Swiss knife of Teraform
.DEFAULT_GOAL := help # Default target
TERRAFORM_OK := $(shell type -p terraform 2>&1) #Check terraform installed
GENERATE_VAR_OK := $(shell type -p scratchrelaxtv 2>&1) #Check scratchrelaxtv installed
TFENV_OK := $(shell type -p tfenv 2>&1) #Check tfenv installed
TFDOCS_OK := $(shell type -p terraform-docs 2>&1) #Check tfenv installed
NODE_OK := $(shell type -p node 2>&1) #Check nodejs installed
help:
@echo "Usage: make [args]"
@echo "Other commands: "
@echo " * make check - dependency check is installed. "
@echo " * make tfver - check version terraform. "
@echo " * make tfver ver=x.x.x - switch version terraform. "
@echo " * make lint - lint code terraform. "
@echo " * make docs - generate documentation from Terraform modules in README.md. "
@echo " * make genvar - extract variables from main.tf and generate a variables.tf file. "
@echo " * make genvar/tfvars - generate .tfvars with Terraform vars. "
@echo " * make genmodule - scaffolding/boilerplate generator for new Terraform module projects. "
check: Terraform-exists Scratchrelaxtv-exists TFenv-exists TFdocs-exists Node-exists Generator-tf-module-exists
Terraform-exists:
@if [ -z $(TERRAFORM_OK) ]; then echo "terraform could not be found. "; exit 2; fi
Scratchrelaxtv-exists:
@if [ -z $(GENERATE_VAR_OK) ]; then echo "scratchrelaxtv could not be found. See https://github.com/YakDriver/scratchrelaxtv"; exit 2; fi
TFenv-exists:
@if [ -z $(TFENV_OK) ]; then echo "tfenv could not be found. See https://github.com/tfutils/tfenv"; exit 2; fi
TFdocs-exists:
@if [ -z $(TFDOCS_OK) ]; then echo "terraform-docs could not be found. See https://github.com/terraform-docs/terraform-docs "; exit 2; fi
Node-exists:
@if [ -z $(NODE_OK) ]; then echo "node could not be found. See https://nodejs.org/en/download/ "; exit 2; fi
lint:
terraform fmt -recursive .
genvar:
scratchrelaxtv -cf
genvar/tfvars:
scratchrelaxtv -t
docs:
terraform-docs markdown table --output-file README.md --output-mode inject .
.PHONY: tfver
tfver:
tfenv install $(ver) && tfenv use $(ver) && terraform -v
genmodule:
npx -p yo -p generator-tf-module -c 'yo tf-module'
Để sử dụng bạn tạo file với tên là Makefile trong thư mục dự án. sau đó cài đặt make
Đối với macOS:
brew install make
Một số công cụ cần thiết
Khi sử dụng terraform bạn cũng sẻ cần dùng thêm một số công cụ hổ trợ, makefile có thể hiểu là một macro cho các công cụ đó.
Bắt đầu dự án module TF
tại thư mục làm việc của bạn. lưu ý phải có file tên là Makefile. Bạn chay lệnh sau để kiểm tra các gói phụ thuộc đã được cài hay chưa
make check
Cài đặt terraform theo verison
các bạn chạy lệnh sau
make tfver ver=x.x.x
tạo dự án module
các bạn chạy lệnh sau.
make genmodule
sau đó nhập các thôn tin cần thiết cho dự án.

thư mục dự án sẻ trông như thế này.
.
├── README.md
├── example
│ ├── main.tf
│ ├── outputs.tf
│ └── variables.tf
├── main.tf
├── outputs.tf
├── test
│ └── example_test.go
└── variables.tf
Trong thư mục dự án bao gồm các tệp như sau
.editorconfig: dùng để chuẩn hóa các cấu hình của IDE, tăng trãi nghiệm đồng nhất giữa các thành viên trong nhóm.
example: thư mục này dùng để hướng dẫn cách sử dụng module
README: không thể nào thiếu tệp này.
.gitignore: một file cũng quang trọng không kém, hạn chế đưa những thứ không cần thiết lên git repo.
test: dùng để test module của bạn. Nếu không cần bạn có thẻ xóa nó đi.
Tạo file variables.tf
giả sử mình có một tệp main.tf như sau

mình muốn nhanh chóng tạo file variables.tf từ các biến trên. Mình sẽ copy Makefile vào thư mục dự án sau đó chạy lệnh
make genvar
ngay lập tức mình sẽ có file variables.tf như sau

Tạo README
Sau khi mình hoàn thiện modules mình chạy lên sau để tạo README.
make docs
file README sẽ trông như sau.

Chuyển đổi version TF
Trong một số trường hợp cần dùng một phiên bả TF cụ thể bạn có thể sử dụng lệnh dưới đây để chuyển đến phiên bản phù hợp.
make tfver ver=x.x.x
Hy vọng chia sẻ của mình sẻ có ích với bạn. Chúc bạn thành công.