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 làm quen với Ansible Error Handling DevOps ở bài trước, mình đã thấy xử lý lỗi trong playbook “bình tĩnh” thế nào – không còn panic khi fail nữa. Nhưng hồi đó, mình vẫn quản lý server kiểu truyền thống, SSH tay vào từng EC2 instance trên AWS để cài package – mệt muốn xỉu. Rồi mình phát hiện Ansible AWS DevOps, và đúng là bước ngoặt “chơi lớn”! Ansible không chỉ quản lý server on-premise mà còn làm việc với cloud như AWS, Azure, hay GCP. Hôm nay, mình sẽ kể bạn nghe Ansible AWS DevOps là gì, cách dùng Ansible để quản lý AWS, và cùng thực hành tạo một EC2 instance với playbook. Cùng bắt đầu nhé!
Ansible AWS DevOps Là Gì? – “Cánh Tay Đắc Lực” Trên Cloud
Nói đơn giản, Ansible AWS DevOps là cách dùng Ansible để tự động hóa việc quản lý tài nguyên trên AWS, từ tạo EC2 instance, cấu hình security group, đến deploy ứng dụng. Bạn có thể tưởng tượng Ansible như “cánh tay đắc lực” – thay vì vào AWS Console click tay từng bước, bạn viết playbook, Ansible sẽ lo hết. Hồi mới làm DevOps, mình toàn SSH tay vào EC2 để cài Nginx, mỗi lần thêm instance là phải làm lại từ đầu – vừa chậm vừa dễ sai.
Có lần mình cần tạo 5 EC2 instance cho dự án, ngồi click tay trên AWS Console mất cả buổi, chưa kể cấu hình sai security group, làm server không truy cập được. Sau đó, mình mò ra Ansible AWS DevOps, dùng module ec2_instance
để tạo instance, và mọi thứ nhanh hơn cả Flash chạy đua! Ansible hỗ trợ hàng loạt module AWS (như ec2_instance
, s3_bucket
, iam
), giúp tự động hóa gần như mọi thứ trên cloud – đúng là “vũ khí” cho dân DevOps!
Chuẩn Bị Trước Khi Quản Lý AWS
Để dùng Ansible AWS DevOps, bạn cần chuẩn bị vài thứ:
-
Cài Module AWS Cho Ansible: Ansible cần thư viện
boto3
để làm việc với AWS. Cài đặt:pip install boto3
Mình từng quên cài
boto3
, chạy playbook báo lỗi “No module named boto” – mất cả tiếng mới phát hiện. -
Cấu Hình AWS Credentials: Bạn cần Access Key ID và Secret Access Key từ AWS IAM. Tạo file
~/.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
Mình hay dùng biến môi trường để tránh lưu key trong file – an toàn hơn.
-
Inventory Đã Sẵn Sàng: Dùng inventory từ bài 2 (
hosts
), nhưng lát nữa mình sẽ tạo instance mới, nên tạm thời không cần.
Tạo EC2 Instance Với Ansible – Thực Hành Ngay
Giờ mình sẽ dùng Ansible AWS DevOps để tạo một EC2 instance và chạy “Hello World” trên đó. Cùng làm từng bước nhé!
-
Tạo Playbook Tạo EC2: Tạo file
create_ec2.yml
:- name: Create EC2 instance on AWS hosts: localhost connection: local vars: instance_type: t2.micro region: us-east-1 ami_id: ami-0c55b159cbfafe1f0 # Amazon Linux 2 AMI (us-east-1) key_name: my-key-pair tasks: - name: Create EC2 instance amazon.aws.ec2_instance: name: "ansible-test-instance" key_name: "{{ key_name }}" instance_type: "{{ instance_type }}" image_id: "{{ ami_id }}" wait: yes region: "{{ region }}" security_group: default network: assign_public_ip: yes tags: Environment: Testing register: ec2 - name: Debug instance info debug: msg: "Instance created with ID {{ ec2.instances[0].instance_id }} and IP {{ ec2.instances[0].public_ip_address }}"
hosts: localhost
: Chạy trên máy local (vì chưa có server).amazon.aws.ec2_instance
: Module tạo EC2 instance.register: ec2
: Lưu thông tin instance để dùng sau.
Lưu ý: Thay
key_name
bằng SSH key pair của bạn trên AWS, vàami_id
bằng AMI phù hợp với region. -
Chạy Playbook:
ansible-playbook create_ec2.yml
Kết quả:
TASK [Create EC2 instance] ************ changed: [localhost] TASK [Debug instance info] ************ ok: [localhost] => { "msg": "Instance created with ID i-1234567890abcdef0 and IP 54.123.45.67" }
Mình từng quên
wait: yes
, làm playbook chạy trước khi instance sẵn sàng – lỗi ngay lập tức. Nên nhớ: Thêmwait: yes
để Ansible chờ instance khởi động. -
Thêm Instance Vào Inventory: Lấy IP từ output (VD:
54.123.45.67
), thêm vào filehosts
:[new_servers] ansible-test ansible_host=54.123.45.67 ansible_user=ec2-user ansible_ssh_private_key_file=~/.ssh/my-key.pem
-
Chạy “Hello World” Trên Instance: Tạo file
hello_world.yml
:- name: Run Hello World on new instance hosts: new_servers tasks: - name: Create hello file copy: content: "Hello World from Ansible on AWS!" dest: /tmp/hello.txt mode: '0644' - name: Debug hello file shell: cat /tmp/hello.txt register: hello_output - name: Print hello message debug: msg: "{{ hello_output.stdout }}"
Chạy:
ansible-playbook -i hosts hello_world.yml
Kết quả:
ok: [ansible-test] => { "msg": "Hello World from Ansible on AWS!" }
Mình từng quên
ansible_ssh_private_key_file
, làm SSH fail – mất cả tiếng debug. Nên nhớ: Đảm bảo key pair khớp vớikey_name
!
Mẹo Nhỏ Từ Kinh Nghiệm Thật
- Dùng
wait_timeout
: Nếu instance khởi động lâu, thêmwait_timeout
:wait_timeout: 300
Mình từng để mặc định, instance chậm khởi động, playbook fail.
- Kiểm tra quyền IAM: Đảm bảo IAM user có quyền
ec2:*
– nếu không, bạn sẽ gặp lỗi “Access Denied”. - Sao lưu key: Đừng để mất SSH key, mình từng làm mất, phải tạo instance mới – tốn cả buổi.
Có lần mình tạo EC2 nhưng quên mở port 22 trong security group, SSH không được, playbook fail liên tục. Mình nghĩ “Chắc Ansible lỗi”, ngồi debug cả ngày, cuối cùng mới phát hiện security group sai. Từ đó, mình luôn kiểm tra port trước có những lỗi nhỏ mà cứ tìm đâu đâu :)))
Cảm Nhận Sau Khi Dùng Ansible Với AWS
Lần đầu dùng Ansible AWS DevOps, mình thấy nó như “cánh tay đắc lực” – không còn click tay trên AWS Console nữa, chỉ viết playbook là xong. So với SSH tay, Ansible tiết kiệm thời gian và giảm lỗi kinh khủng. Cảm giác như vừa “chơi lớn” với DevOps – tự động hóa cloud mà không phức tạp!
Tiếp Theo Là Gì?
Bài này tụi mình đã làm quen với Ansible AWS DevOps, từ tạo EC2 đến chạy “Hello World”. Lần sau, mình sẽ kể bạn nghe về dynamic inventory – cách tự động lấy danh sách instance từ AWS, không cần thêm tay vào hosts
. Chịu không?
Thử Nghiệm Nhẹ: Thử thêm task tạo security group (dùng module ec2_group
) trước khi tạo instance, mở port 80. Có gì thắc mắc cứ nhắn mình nhé – quản lý cloud là bước lớn, làm quen tốt là bạn đã sẵn sàng cho dự án thật!