Terraform là gì? #
Terraform là một công cụ mã nguồn mở hoàn toàn miễn phí được phát hành vào tháng 7 năm 2014 bởi HashiCorp. Công cụ này giúp người dùng định nghĩa và lưu trữ thông tin tài nguyên bên trong hạ tầng hệ thống của mình thông qua các file code. Từ những file code này người dùng có thể sử dụng để triển khai hạ tầng của mình trên cloud như AWS, GCP, Azure, Digital Ocean, GitHub, Cloudflare,… hay cả VMware vSphere,…
Đây cũng là một trong những công cụ IaC (Infrastructure as code) phổ biến nhất tính tới thời điểm hiện tại. Các công cụ khác có thể kể đến bao gồm Ansible, Puppet, Vagrant, Chef, SaltStack,…
Chức năng của Terraform #
Để nói về chức năng, mình sẽ tóm tắt thành 2 chức năng chính như sau:
Đơn giản hóa việc khởi tạo và quản lý tài nguyên #
Mọi thông tin về tài nguyên của hệ thống sẽ được định nghĩa trong file, điều này giúp bạn đơn giản hóa việc triển khai với nhiều bước khác nhau bằng một câu lệnh đơn giản. Ví dụ như bạn cần khởi tạo 1 con EC2 trên AWS, bạn sẽ phải vào console của EC2 và thực hiện các bước “đơn giản” sau:
-
- Nhấn nút khởi tạo EC2
- Chọn “base image”
- Chọn loại EC2 bạn muốn sử dụng theo nhu cầu
- Cấu hình subnet/VPC
- Cấu hình Security Group
- Chọn “pemkey” cho EC2 để sau này có thể SSH vào
- Nhấn nút khởi tạo để AWS tiến hành tạo EC2 dựa trên các cấu hình ở bước trên
Ít nhất cũng 7 bước để có thể tạo 1 con EC2 cho bạn sử dụng. Vậy nếu như bạn tạo nhiều hơn 1 con EC2 thì sẽ như thế nào? Sẽ bao gồm 7*<số con EC2 cần tạo> bước để có thể tạo xong số lượng EC2 chúng ta cần tạo.
Ví dụ chúng ta cần khởi tạo 4 con EC2 với cùng cấu hình thì sẽ khoảng 28 bước để có thể tạo đủ số lượng EC2 này. Nhưng nếu như bạn sử dụng Terraform, mọi thứ sẽ được rút gọn hơn:
-
- Tạo file code chứa thông tin cấu hình EC2
- Nhập câu lệnh của Terraform để triển khai toàn bộ các tài nguyên cần được khởi tạo
Khi sử dụng Terraform, bạn sẽ rút ngắn 3 lần số lượng thao tác bạn phải thực hiện đối khi tạo 1 con EC2 trên AWS. Nếu như bạn tạo nhiều con EC2 khác thì mọi thứ vẫn chỉ bao gồm 2 bước như trên. Thời gian đợi cloud khởi tạo tài nguyên sẽ tăng thêm chút ít.
Đồng nhất quá trình triển khai và quản lý hạ tầng #
Trong trường bạn đang sử dụng từ 2-3 cloud, công việc triển khai cho mỗi cloud hầu như sẽ khác nhau. Nhưng nếu sử dụng Terraform, mọi sự khác nhau sẽ được định nghĩa trên file code, việc triển khai vẫn không thay đổi. Bạn chỉ cần khai báo “provider” & tên tài nguyên tương ứng với cloud. Terraform sẽ thay bạn khởi tạo các tài nguyên trên từng cloud chỉ định. Công việc trước đây tốn hàng giờ để làm thì nay chỉ tốn vài phút là đã hoàn tất cho toàn bộ các cloud được chỉ định.
Cách thức hoạt động của Terraform #
Terraform có thể khởi tạo và quản lý các tài nguyên thông qua các API mà “provider” (cloud/service) hỗ trợ. Các provider sẽ “mở API” cho Terraform được phép truy cập để khởi tạo và quản lý các tài nguyên. Theo số liệu chính thức được đăng tải trên trang chủ của Terraform, đã có hơn 1700 “provider” hỗ trợ Terraform trong việc quản lý hàng ngàn tài nguyên và dịch vụ. Và con số này dự kiến sẽ còn tăng trong thời gian tới.
Luồng xử lý chính của Terraform sẽ cơ bản bao gồm 3 bước sau:
- Write: đây là bước định nghĩa các tài nguyên bạn sẽ khởi tạo và quản lý vào 1 file code với định dạng file là “tf” (định dạng mặc định của Terraform).
- Plan: Terraform sẽ dựa vào file bạn viết ở bên trên để tạo ra 1 plan (kế hoạch) thực thi chi tiết. Plan này sẽ xác định các tài nguyên nào sẽ được tạo mới theo thứ tự cần thiết, các tài nguyên nào sẽ được cập nhật hoặc bị xóa dựa vào tình trạng/trạng thái hiện tại của hạ tầng mà Terraform đã ghi nhận được
- Apply: Terraform sẽ tiến hành thực thi plan với nhiều tiến trình song song. Điều này giúp tối ưu thời gian xử lý thay vì xử lý tuần tự.
Mặc định, Terraform sẽ thực thi cùng lúc 10 thao tác dựa vào plan đã được quy định. Tuy là thực thi song song nhưng sẽ vẫn thứ tự nhất định dựa vào plan đã đề ra. Ví dụ như khi bạn khởi tạo 1 EC2 và 1 Security group cho EC2 trên AWS, Terraform sẽ tiến hành tạo Security group trước khi tạo EC2.
Ưu và nhược điểm #
Bên dưới là một số ưu và nhược điểm mà cá nhân mình tìm hiểu và trải nghiệm
Ưu điểm #
- Mã nguồn mở và miễn phí
- Dễ sử dụng
- Tối ưu thời gian triển khai tài nguyên nhờ vào đa luồng
- Hỗ trợ nhiều cloud
- Dễ dàng tích hợp CI/CD
Nhược điểm #
- Các tính năng collab và bảo mật chỉ có sẵn trong các gói doanh nghiệp đắt tiền
- Không có cơ chế xử lý lỗi
- Không tự động rollback nếu như những thay đổi tài nguyên không chính xác. Trong trường hợp gặp lỗi trong quá trình triển khai một tài nguyên bất kỳ, bạn sẽ cần xóa toàn bộ tài nguyên đã khởi tạo trước thành công trước đó
Nếu bạn thấy bài viết chưa đúng hoặc cần bổ sung, đừng ngần ngại để lại bình luận bên dưới để chúng ta cùng bàn luận và cập nhật thông tin chính xác đến cho bạn đọc.
Nguồn tham khảo: Tổng hợp
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/ |