Tự động hóa CI/CD cho Terraform với Atlantis trên VPS: Hướng dẫn cấu hình toàn tập
Giới thiệu về GitOps và thách thức quản lý Terraform trong đội ngũ
Trong kỷ nguyên điện toán đám mây, Infrastructure as Code (IaC) đã trở thành tiêu chuẩn cốt lõi giúp các doanh nghiệp quản lý hạ tầng một cách nhất quán và có thể mở rộng. Trong số các công cụ IaC, Terraform nổi lên như một giải pháp mạnh mẽ và phổ biến nhất. Tuy nhiên, khi quy trình làm việc mở rộng từ một kỹ sư lên một đội ngũ DevOps gồm nhiều thành viên, những thách thức lớn bắt đầu xuất hiện.
Làm thế nào để đảm bảo hai kỹ sư không thay đổi cùng một tài nguyên hạ tầng cùng một lúc? Làm thế nào để rà soát (review) các thay đổi hạ tầng trước khi chúng được áp dụng thực tế? Thông thường, việc chạy terraform plan và terraform apply từ máy tính cá nhân của lập trình viên sẽ dẫn đến nguy cơ xung đột trạng thái (state file), thiếu tính minh bạch và khó kiểm soát an ninh thông tin. Đây chính là lúc mô hình GitOps và công cụ Atlantis trở thành giải pháp cứu cánh.
Atlantis là gì? Tại sao nên chọn Atlantis cho quy trình CI/CD Terraform?
Atlantis là một ứng dụng mã nguồn mở hoạt động như một webhook lắng nghe các sự kiện từ các nền tảng quản lý mã nguồn (như GitHub, GitLab, Bitbucket). Thay vì chạy các lệnh Terraform dưới máy cục bộ hoặc thiết lập các pipeline CI/CD phức tạp trên Jenkins hay GitHub Actions, Atlantis cho phép các kỹ sư thực thi terraform plan và terraform apply ngay bên trong giao diện Pull Request (PR).
Một cách đơn giản: Hạ tầng của bạn được quản lý và phê duyệt giống hệt như cách bạn rà soát một đoạn mã nguồn phần mềm. Quy trình này mang lại tính minh bạch tuyệt đối và lưu lại toàn bộ lịch sử thay đổi hạ tầng ngay trên Git.
Các lợi ích cốt lõi khi triển khai Atlantis trên VPS bao gồm:
- Tự động khóa trạng thái (Plan Locking): Khi một kỹ sư tạo PR và chạy plan, Atlantis sẽ khóa thư mục hoặc dự án đó lại. Các PR khác không thể can thiệp cho đến khi PR hiện tại được merge hoặc đóng, ngăn chặn hoàn toàn việc ghi đè dữ liệu hạ tầng.
- Tăng cường tính bảo mật: Các kỹ sư DevOps không cần cấp quyền truy cập quản trị (Admin/Cloud Credentials) về máy cá nhân. Mọi quyền hạn được cấu hình tập trung và bảo mật ngay trên máy chủ VPS chạy Atlantis.
- Phê duyệt trực quan (Visibility & Collaboration): Kết quả của lệnh
planđược hiển thị dưới dạng bình luận (comment) ngay trong PR. Toàn bộ đội ngũ có thể vào thảo luận, đánh giá tác động trước khi bấm phê duyệt.
Hướng dẫn từng bước cấu hình Atlantis trên VPS
Bước 1: Chuẩn bị môi trường máy chủ VPS
Để bắt đầu, bạn cần một máy chủ VPS (Ubuntu 22.04 LTS là một lựa chọn khuyến nghị) có địa chỉ IP tĩnh công khai và đã được cấu hình tên miền (Domain Name) cùng chứng chỉ SSL (Let's Encrypt) để đảm bảo bảo mật cho các webhook gửi từ GitHub.
Tiến hành tải và cài đặt phiên bản Atlantis mới nhất bằng các lệnh sau:
curl -LO https://github.com/runatlantis/atlantis/releases/download/v0.28.0/atlantis_linux_amd64.zip
unzip atlantis_linux_amd64.zip
sudo mv atlantis /usr/local/bin/
Kiểm tra cài đặt thành công bằng cách chạy: atlantis version.
Bước 2: Cấu hình GitHub Access Token và Webhook Secret
Atlantis cần quyền truy cập vào repository của bạn để đọc mã nguồn và viết bình luận. Bạn cần tạo một Personal Access Token (PAT) trên GitHub với các quyền hạn sau: repo (đối với repo riêng tư) hoặc public_repo.
Tiếp theo, hãy tạo một chuỗi ký tự ngẫu nhiên để làm Webhook Secret. Chuỗi này giúp Atlantis xác thực rằng các yêu cầu gửi đến nó thực sự đến từ GitHub chứ không phải kẻ mạo danh. Bạn có thể tạo nhanh bằng lệnh: openssl rand -hex 32.
Bước 3: Cấu hình Webhook trên GitHub Repository
Truy cập vào Repository chứa mã nguồn Terraform của bạn trên GitHub, chọn Settings -> Webhooks -> Add webhook và điền các thông tin sau:
- Payload URL:
https://atlantis.yourdomain.com/events - Content type:
application/json - Secret: Chuỗi mã bảo mật bạn đã tạo ở Bước 2.
- Trigger events: Chọn "Let me select individual events" và tích chọn: Pushes, Pull requests, Pull request reviews, và Issue comments.
Bước 4: Thiết lập file cấu hình Server-Side cho Atlantis
Tạo một file cấu hình định dạng YAML trên VPS tại đường dẫn /etc/atlantis/repos.yaml để định nghĩa các quy tắc kiểm soát an ninh nghiêm ngặt. Cấu hình này đảm bảo chỉ những người có quyền mới được thực thi hạ tầng:
repos:
- id: github.com/your-org/*
allow_custom_workflows: false
allowed_overrides: [apply_requirements]
apply_requirements: [approved, mergeable]Cấu hình trên bắt buộc một Pull Request phải được Approve (Phê duyệt) bởi thành viên cấp cao và phải không bị xung đột mã nguồn (mergeable) thì lệnh atlantis apply mới được phép thực thi.
Vận hành thực tế: Quy trình rà soát hạ tầng qua Pull Request
Sau khi hệ thống Atlantis trên VPS được khởi chạy thành công dưới dạng một systemd service, quy trình làm việc của đội ngũ kỹ sư sẽ thay đổi một cách chuyên nghiệp như sau:
1. Tạo nhánh và chỉnh sửa: Kỹ sư tạo một nhánh Git mới (ví dụ: feature/add-s3-bucket), tiến hành thêm mã nguồn Terraform định nghĩa một Storage Bucket và đẩy (push) lên GitHub.
2. Tạo Pull Request: Khi PR được mở, GitHub sẽ gửi webhook đến Atlantis trên VPS. Atlantis ngay lập tức nhận diện, tự động thực thi lệnh terraform plan ở dưới nền và gửi trả kết quả chi tiết dưới dạng một bình luận ngay trong PR.
3. Rà soát phối hợp: Các kỹ sư khác trong đội ngũ truy cập PR, xem xét kỹ lưỡng các tài nguyên hạ tầng sẽ bị thêm mới, sửa đổi hoặc xóa bỏ thông qua bảng màu trực quan mà Atlantis cung cấp.
4. Phê duyệt và Triển khai: Sau khi kiểm tra, người đánh giá nhấn nút Approve trên GitHub. Lúc này, kỹ sư có thể gõ một bình luận với cú pháp: atlantis apply. Atlantis sẽ nhận lệnh, tiến hành áp dụng thay đổi lên môi trường đám mây thật, cập nhật lại file trạng thái (state file) tập trung, và tự động merge Pull Request đó vào nhánh chính (main/master).
Các lưu ý quan trọng về bảo mật khi vận hành Atlantis trên VPS
Vì Atlantis có toàn quyền can thiệp vào hạ tầng đám mây của doanh nghiệp, việc bảo mật máy chủ VPS chạy Atlantis là ưu tiên hàng đầu:
- Sử dụng HTTPS: Tuyệt đối không chạy Atlantis qua giao thức HTTP thường. Hãy luôn sử dụng Reverse Proxy như Nginx hoặc Traefik để mã hóa dữ liệu với SSL.
- Nguyên tắc đặc quyền tối thiểu (Least Privilege): Cấp quyền cho IAM Role hoặc Service Account mà Atlantis sử dụng trên AWS/GCP/Azure vừa đủ để quản lý các tài nguyên quy định, không lạm dụng quyền siêu quản trị (Root/Owner) nếu không cần thiết.
- Cấu hình Whitelist IP: Nếu có thể, hãy cấu hình tường lửa (UFW hoặc Security Group của VPS) chỉ cho phép các dải IP chính thức từ GitHub Webhooks truy cập vào cổng hệ thống.
Lời kết
Áp dụng Atlantis trên VPS mang lại một bước nhảy vọt về mặt quy trình cho các doanh nghiệp đang sử dụng Terraform. Nó không chỉ tự động hóa các thao tác thủ công nhàm chán, mà quan trọng hơn, nó thiết lập một cơ chế kiểm soát, rà soát chặt chẽ, giảm thiểu tối đa sai sót của con người (human error) trong việc quản trị hạ tầng. Hãy bắt tay vào cấu hình Atlantis ngay hôm nay để nâng tầm hệ thống CI/CD cho doanh nghiệp của bạn.
