Giới thiệu #
Terraform sử dụng các file state để lưu trữ chi tiết thông tin cấu hình hạ tầng (infrastructure configuration) của người dùng. Mặc định các file state này sẽ được lưu trữ trên máy chủ thực thi câu lệnh apply. Thay vì lưu trữ state trên local, người dùng có thể lưu trữ trên một server nào đó hay còn được Terraform gọi là “remote backend”.
Để hỗ trợ người dùng trong việc lưu trữ các file Terraform state, Gitlab cung cấp tính năng “Terraform HTTP backend”, giúp người dùng có thể lưu trữ các file state một cách an toàn và đơn giản. Khi sử dụng Gitlab để lưu trữ, người dùng có thể:
- Đánh “version” cho các file state.
- Các file state sẽ mặc định được mã hóa trước khi lưu trữ trên Gitlab.
- Lock và unlock state.
- Thực thi các câu lệnh “terraform plan” và “terraform apply” thông qua Gitlab-CI
Lưu ý:
- Để có thể lock, unlock, ghi thông tin state khi sử dụng “terraform apply”, user cần phải có quyền Maintainer trên Gitlab repo
- Để có thể đọc state khi sử dụng terraform plan -lock=false, user tói thiểu cần phải có quyền Developer trên Gitlab repo
Cấu hình backend cho Terraform #
Cách 1 – Khai báo backend thông qua command #
Để có thể cấu hình Gitlab trở thành backend cho Terraform thì bạn cần phải khai báo thêm mục “backend “http” bên trong file <terraform>.tf như sau:
terraform { ... backend "http" {} } ...
Tiếp đó bạn sẽ cần phải khai báo thông tin về backend thông qua câu lệnh “terraform init” như sau:
terraform init \ -backend-config=address="https://gitlab.com/api/v4/projects/<pid>/terraform/<state_name>" \ -backend-config=lock_address="https://gitlab.com/api/v4/projects/<pid>/terraform/state/<state_name>/lock" \ -backend-config=unlock_address="https://gitlab.com/api/v4/projects/<pid>/terraform/state/<state_name>/lock" \ -backend-config=username="<username>" \ -backend-config=password="<access_token>" \ -backend-config=lock_method=POST \ -backend-config=unlock_method=DELETE \ -backend-config=retry_wait_min=5
Trong đó:
- pid: ID của project/repo trên Gitlab (mục Settings / General / Project ID trên Gitlab repo)
- state_name: tên của state, bạn có thể tự do đặt tên state được lưu trữ trên Gitlab
- username: username được sử dụng trên Gitlab
- access_token: Access token của account thay cho password
Cách 2 – Khai báo backend bên trong file code #
Nếu bạn cảm thấy cách 1 sử dụng câu lệnh quá dài và muốn mọi thông tin đều sẽ ghi rõ trong file code, bạn có thể đưa các thông tin về backend vào trong file terraform như sau:
terraform { backend "http" { address = "https://gitlab.com/api/v4/projects/<pid>/terraform/<state_name>" lock_address = "https://gitlab.com/api/v4/projects/<pid>/terraform/state/<state_name>/lock" unlock_address = "https://gitlab.com/api/v4/projects/<pid>/terraform/state/<state_name>/lock" username = "<username>" password = "<access_token>" lock_method = "POST" unlock_method = "DELETE" retry_wait_min = 5 } }
Trong đó:
- pid: ID của project/repo trên Gitlab
- state_name: tên của state, bạn có thể tự do đặt tên state được lưu trữ trên Gitlab
- username: username được sử dụng trên Gitlab
- access_token: Access token của account thay cho password
Kết quả #
Sau khi đã khai báo xong phần thông tin “backend” hoàn tất việc “init”, việc cần làm của bạn lúc này là sử dụng câu lệnh “terraform apply” để tiến hành tạo resouce và lưu state trên Gitlab. Sau khi quá trình tạo resouce diễn ra thành công, bạn có thể vào repo trên Gitlab để kiểm tra state đã được lưu ở mục Infrastructure / Terraform.
Nguồn tham khảo: Gitlab
Trung tâm đào tạo Viễn thông và Công nghệ thông tin TEL4VN (TEL4VN) chuyên đào tạo các khóa học về DevOps như: Docker, Kubernetes, Ansible, Jenkins, Linux…….Ngoài ra, TEL4VN còn là Trung tâm đào tạo duy nhất về VoIP mã nguồn mở. 🌐Website: https://tel4vn.edu.vn/ |