Danh sách bài viết trong series Sử dụng Ansible tự động hệ thống
- Bài 1: Ansible Là Gì Mà Dân DevOps Mê Thế?
- Bài 2: Ansible Inventory – Danh Bạ Server Của Bạn
- Bài 3: Ansbile Ad-Hoc – Lệnh Nhanh Như Chớp
- Bài 4: Ansbile Playbook Đầu Tiên – Đừng Sợ YAML
- Bài 5: Ansible Variables – Bí Kíp Linh Hoạt Hóa Mọi Thứ
- Bài 6: Ansible Module Nâng Cao – Mở Rộng Khả Năng
- Bài 7: Ansible Roles – Sạch Sẽ Như Nhà Mới Dọn
- Bài 8: Ansible Template Jinja2 – Config Động Như Phim Marvel
- Bài 9: Ansible Conditionals Và Loops – Đỉnh Cao Điều Khiển
- Bài 10: Ansible Error Handling – Không Panic Khi Fail
- Bài 11: Ansible Quản Lý Cloud – Chơi Lớn Với AWS
- Bài 12: Ansible Dynamic Inventory – Danh Sách Server Tự Động
- Bài 13: Ansible Vault – Khóa Két Sắt Cho Bí Mật
- Bài 14: Ansible Tower/AWX – Trung Tâm Điều Khiển DevOps
- Bài 15: Ansible Best Practices – Viết Ansible Sạch, Chạy Đỉnh Cao
Sau khi dùng Ansible AWS DevOps ở bài trước để tạo EC2 instance và chạy “Hello World”, mình đã thấy Ansible “chơi lớn” thế nào trên cloud. Nhưng hồi đó, mình vẫn phải thêm IP của instance vào file hosts
tay – mỗi lần tạo instance mới là thêm lại, mệt muốn xỉu. Rồi mình phát hiện Ansible Dynamic Inventory DevOps, và đúng là “giải pháp thần kỳ”! Dynamic inventory giúp Ansible tự động lấy danh sách server từ AWS, không cần chỉnh sửa file thủ công. Hôm nay, mình sẽ kể bạn nghe Ansible Dynamic Inventory DevOps là gì, cách thiết lập nó với AWS, và cùng thực hành để bạn thấy sự tiện lợi. Cùng bắt đầu nhé!
Ansible Dynamic Inventory DevOps Là Gì? – “Danh Bạ Sống” Của Server
Nói đơn giản, Ansible Dynamic Inventory DevOps là cách Ansible tự động tạo danh sách server (inventory) dựa trên tài nguyên cloud như AWS, Azure, hay GCP, thay vì dùng file hosts
tĩnh. Bạn có thể tưởng tượng nó như “danh bạ sống” – mỗi khi AWS có instance mới, Ansible tự cập nhật, không cần bạn thêm tay. Hồi mới làm DevOps, mình toàn quản lý inventory bằng file hosts
, mỗi lần scale thêm EC2 là phải chỉnh lại – vừa chậm vừa dễ sai.
Có lần mình quên thêm instance mới vào hosts
, chạy playbook mà server đó không được cấu hình, khách hàng báo lỗi cả buổi. Sau đó, mình mò ra Ansible Dynamic Inventory DevOps, dùng script AWS để lấy danh sách instance – chỉ cần chạy là xong, không cần chỉnh tay nữa! Ansible hỗ trợ dynamic inventory qua script hoặc plugin (như aws_ec2
), giúp quản lý hàng chục, hàng trăm server dễ dàng – đúng là “vũ khí” cho cloud DevOps!
Chuẩn Bị Trước Khi Dùng Dynamic Inventory
Để dùng Ansible Dynamic Inventory DevOps với AWS, bạn cần chuẩn bị:
-
Cài Thư Viện AWS: Cần cài
boto3
vàbotocore
để Ansible giao tiếp với AWS:pip install boto3 botocore
Mình từng quên cài
botocore
, chạy script báo lỗi “No module named botocore” – mất cả tiếng mới phát hiện. -
Cấu Hình AWS Credentials: Đảm bảo bạn đã có Access Key và Secret Key (như bài 11). Thêm vào
~/.aws/credentials
:[default] aws_access_key_id = YOUR_ACCESS_KEY aws_secret_access_key = YOUR_SECRET_KEY
Hoặc set biến môi trường:
export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY export AWS_DEFAULT_REGION=us-east-1
-
Cài Script Hoặc Plugin Dynamic Inventory: Ansible cung cấp script
ec2.py
và pluginaws_ec2
. Mình sẽ dùng plugin vì nó tích hợp tốt hơn. Kiểm tra:ansible-galaxy collection list
Nếu chưa có, cài:
ansible-galaxy collection install amazon.aws
Mình từng quên cài collection, chạy playbook báo lỗi “aws_ec2 not found” – debug cả buổi.
Thiết Lập Dynamic Inventory Với AWS
Giờ mình sẽ thiết lập dynamic inventory để lấy danh sách EC2 instance từ AWS.
-
Tạo File Cấu Hình: Tạo file
inventory_aws.yml
:plugin: aws_ec2 regions: - us-east-1 keyed_groups: - prefix: tag key: tags hostnames: - private-ip-address filters: tag:Environment: Testing
plugin: aws_ec2
: Sử dụng plugin AWS.regions
: Region bạn dùng (thayus-east-1
nếu khác).hostnames
: Dùng private IP làm hostname.filters
: Chỉ lấy instance có tagEnvironment: Testing
(từ bài 11).
-
Kiểm Tra Dynamic Inventory: Chạy lệnh:
ansible-inventory -i inventory_aws.yml --list
Kết quả sẽ là JSON danh sách instance, kiểu:
{ "tag_Environment_Testing": { "hosts": [ "10.0.1.23" ] } }
Mình từng quên set
AWS_DEFAULT_REGION
, làm script không tìm thấy instance – mất cả tiếng mới ra. Nên nhớ: Kiểm tra region và credentials trước nhé! -
Sử Dụng Trong Playbook: Tạo file
check_instances.yml
:- name: Check instances with dynamic inventory hosts: tag_Environment_Testing tasks: - name: Ping instances ping: - name: Create hello file copy: content: "Hello from Dynamic Inventory!" dest: /tmp/hello.txt mode: '0644' become: yes
Chạy:
ansible-playbook -i inventory_aws.yml check_instances.yml
Kết quả:
TASK [Ping instances] ************ SUCCESS => { "changed": false, "ping": "pong" } TASK [Create hello file] ************ changed: [10.0.1.23]
Kiểm tra:
ssh ec2-user@10.0.1.23 "cat /tmp/hello.txt"
Nếu thấy “Hello from Dynamic Inventory!”, là thành công! Mình từng quên
become: yes
, làm taskcopy
fail – suýt khóc vì tưởng khó.
Tùy Chỉnh Dynamic Inventory – “Đa Dạng Hơn”
Bạn có thể tùy chỉnh filter để lấy instance theo tag, trạng thái, hay region. Ví dụ, chỉ lấy instance đang chạy:
filters:
instance-state-name: running
Hoặc kết hợp nhiều tag:
filters:
tag:Environment: Testing
tag:Role: Web
Mình từng dùng filter để lấy instance theo role (VD: Web
, DB
), giúp chạy playbook chọn lọc – tiết kiệm cả đống thời gian!
Mẹo Nhỏ Từ Kinh Nghiệm Thật
- Cập Nhật Thường Xuyên: Dynamic inventory thay đổi theo AWS, chạy
--refresh
để cập nhật:ansible-inventory -i inventory_aws.yml --list --refresh
Mình hay quên, làm danh sách cũ, playbook chạy sai server.
- Kiểm Tra Trước: Dùng
ansible -m ping
để test kết nối:ansible tag_Environment_Testing -i inventory_aws.yml -m ping
- Sao Lưu Credentials: Đừng để mất key AWS, mình từng làm mất, phải tạo lại – tốn cả buổi.
Cảm Nhận Sau Khi Dùng Dynamic Inventory
Lần đầu dùng Ansible Dynamic Inventory DevOps, mình thấy nó như “danh bạ sống” thật – không cần thêm tay vào hosts
nữa, chỉ cần AWS có instance mới là Ansible tự nhận. So với file tĩnh, dynamic inventory tiết kiệm thời gian và giảm lỗi kinh khủng. Cảm giác như vừa “tự động hóa” cả danh sách server – nhẹ nhàng mà chuyên nghiệp!
Tiếp Theo Là Gì?
Bài này tụi mình đã làm quen với Ansible Dynamic Inventory DevOps, từ thiết lập đến dùng với AWS. Lần sau, mình sẽ kể bạn nghe về Ansible Vault – cách bảo mật thông tin nhạy cảm, kiểu như “khoá két sắt” cho bí mật. Chịu không?
Thử Nghiệm Nhẹ: Thử thêm filter instance-state-name: running
vào inventory_aws.yml
, chạy lại ansible-inventory --list
để kiểm tra. Có gì thắc mắc cứ nhắn mình nhé – dynamic inventory là bước lớn, làm quen tốt là bạn đã sẵn sàng cho cloud scale!