Bài 12: Ansible Dynamic Inventory – Danh Sách Server Tự Động

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ị:

  1. Cài Thư Viện AWS: Cần cài boto3botocore để 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.

  2. 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
  3. Cài Script Hoặc Plugin Dynamic Inventory: Ansible cung cấp script ec2.py và plugin aws_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.

  1. 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 (thay us-east-1 nếu khác).
    • hostnames: Dùng private IP làm hostname.
    • filters: Chỉ lấy instance có tag Environment: Testing (từ bài 11).
  2. 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é!

  3. 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 task copy 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!

Điều hướng chuỗi bài viết<< Bài 11: Ansible Quản Lý Cloud – Chơi Lớn Với AWS
>> Bài 13: Ansible Vault – Khóa Két Sắt Cho Bí Mật
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận