Như bài trước đã giới thiệu về Atlantis -  CI/CD giải pháp cho Infrastructure as Code Terraform, thì ở bài này mình sẽ chỉ ra những ưu và nhược điểm theo cá nhân mình đã trải nghiệm vài ngày dùng thử.

Ưu điểm

  • Có thể hoạt động với team size vừa hoặc lớn.
  • Quản lý terraform code trên Git repository -> tạo merge request sẽ auto plan cho team vào review code + kết quả sau khi đã chạy "plan".
  • Tối ưu và bảo mật chỉ riêng atlantis server, phân những quyền cần thiết lên atlantis server mà không cần phân quyền cho các thành viên trong team ( các thành viên trong team có thể view-only hệ thống để cần biết mình code thêm gì cho hệ thống). Ví dụ: assign IAM role cho EC2 mà đã cài đặt atlantis lên, và hạn chế phân role IAM cho member hoặc IAM user mà chỉ phân quyền IAM role read-only ...
  • Có thể lock lại các process đã chạy "plan" tránh "plan" nhiều lần ...

Nhược điểm

  • Atlantis chưa có allow users, người mà có thể review code và trực tiếp "apply" những thay đổi vào hệ thống.
  • atlantis.yaml ở root folder, có thể nhận biết những file .tf thay đổi trong folder con nhưng nếu không define trực tiếp folder nào trong file "atlantis.yaml" thì sẽ không "plan" hoặc "apply" vào folder con.

Về phần chỉnh sửa code thì theo mình thấy nhược điểm 1 cần giải quyết đầu tiên vì liên quan tới quyền hạn mà ai cũng có thể apply thay đổi vào hệ thống được. Nhược điểm 2 có thể giải quyết sau do độ ưu tiên thấp hơn nhược điểm 1 hoặc có thể không thay đổi code vì có thể thay đổi rất nhiều và mất kiểm soát dẫn đến những bug phát sinh không đáng có.

Chỉnh sửa code

Vì mình đang dùng Gitlab nên chỉ thay đổi trong file "server/gitlab_request_parser_validator.go", trong function "ParseAndValidate" thì có thêm 1 đoạn:

  • Lấy thông tin user được apply ở biến môi trường, dùng lib "os" để lấy biến môi trường.
  • Về comment trên merge request event thuộc về MergeCommentEvent sẽ implement 1 đoạn xác thực nếu "plan" sẽ cho mọi người cũng "plan và nếu detect action "apply" thì sẽ kiểm tra user có thuộc biến môi trường ở trên hay không. Có sẽ cho phép qua, nếu không sẽ return về 401 - Unauthorized.

Quan điểm mình là thế, còn bạn, có ý kiến gì comment phía dưới để cùng thảo luận nhé. :D