Có ai ở đây từng cảm thấy "ngợp" trước đống server cần quản lý không? Hồi mới tập làm DevOps, mình nghĩ mình sẽ trở thành một "thần đồng" viết Bash scripting phức tạp. Mình mải mê viết những script dài dằng dặc với đủ thứ if/else, while để tự động hóa mọi thứ. Cảm giác là mình đang tạo ra một hệ thống cực kỳ thông minh, nhưng thực tế? Nó là một cơn ác mộng bảo trì.
Chuyện là thế này: Mình viết một script để backup database mỗi tối, dùng crontab để chạy. Đầu tiên thì ổn, nhưng sau vài tháng, khi có sự cố, mình không biết lỗi xảy ra ở đâu, log thì chẳng có, error message thì vứt vào /dev/null vì "không cần thiết". Thêm vào đó, khi cần chạy script đó trên 10 con server khác nhau, mình phải SSH từng cái để copy file script qua. Tệ hơn nữa là mỗi server có một cấu hình khác nhau một chút, nên script đó chạy được trên server A thì lỗi ngay trên server B.
Lúc đó, một anh Senior bảo mình: "Đừng cố viết Bash để làm mọi thứ. Hãy để Bash làm những việc đơn giản, còn việc cấu hình hàng loạt hãy giao cho Ansible."
Mình bắt đầu học Ansible và mới nhận ra sự khác biệt lớn lao. Thay vì viết một script Bash dài 200 dòng với logic rối rắm, mình chỉ cần viết một file YAML mô tả "trạng thái mong muốn" (desired state). Ví dụ, thay vì viết lệnh để xóa file cũ rồi tạo file mới, mình chỉ nói với Ansible: "Tôi muốn file này tồn tại và có nội dung thế này". Ansible sẽ tự lo liệu phần còn lại.
Tuy nhiên, mình không muốn nói Bash là vô dụng nhé. Bash vẫn là "linh hồn" của Linux. Nhưng mình nghĩ ranh giới nên được phân định rõ ràng. Bạn nên dùng crontab để kích hoạt một task đơn giản, như là gọi một playbook của Ansible. Ví dụ:
0 2 * * * /usr/bin/ansible-playbook -i inventory/my_servers.yml backup.yml
Cách này vừa giữ được sức mạnh của automation từ Ansible (idempotency, idempotent, dễ đọc, dễ test), vừa tận dụng được cơ chế scheduling quen thuộc của cron. Quan điểm của mình là: Đừng cố trở thành "thợ hàn" (Bash) để sửa mọi thứ, hãy trở thành "kiến trúc sư" (Ansible) để vẽ bản thiết kế, rồi để các công cụ khác làm việc nặng.
Mong là chia sẻ nhỏ này giúp các bạn đang vật lộn với đống script cũ kỹ có một góc nhìn mới. Automation không có nghĩa là viết nhiều code nhất, mà là viết code dễ hiểu và bền vững nhất.