Ansible vs Terraform năm 2026: Infrastructure as Code và Câu hỏi Phỏng vấn DevOps
So sánh Ansible vs Terraform năm 2026: quản lý cấu hình và provisioning, khi nào sử dụng công cụ nào, OpenTofu, và chuẩn bị phỏng vấn DevOps.

Ansible vs Terraform là một trong những câu hỏi so sánh phổ biến nhất trong các buổi phỏng vấn DevOps, tuy nhiên cách đặt vấn đề này tự nó đã bộc lộ một sự hiểu lầm: hai công cụ này giải quyết những vấn đề khác nhau. Ansible 2.20 xử lý configuration management và triển khai ứng dụng, trong khi Terraform 1.15 provisioning các tài nguyên hạ tầng. Hiểu được khi nào mỗi công cụ phát huy thế mạnh, ở đâu chúng chồng chéo, và cách chúng bổ sung cho nhau là điều phân biệt DevOps engineer cấp cao với những người vẫn đang học các kiến thức nền tảng.
Terraform quản lý state hạ tầng theo cách khai báo (VM, mạng, database). Ansible cấu hình những gì chạy trên hạ tầng đó theo cách thủ tục (package, service, file). Hầu hết các môi trường production sử dụng cả hai.
Khai báo vs Thủ tục: Sự Khác Biệt Cơ Bản
Terraform sử dụng phương pháp khai báo. File cấu hình mô tả trạng thái cuối cùng mong muốn, và Terraform tính toán các thay đổi cần thiết để đạt được nó. Phương pháp này hoạt động tốt cho hạ tầng cần được tạo, sửa đổi hoặc xóa như một đơn vị thống nhất.
# main.tf
resource "aws_instance" "web" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t3.medium"
tags = {
Name = "web-server"
Environment = "production"
}
}
resource "aws_security_group" "web" {
name = "web-sg"
description = "Allow HTTP and HTTPS"
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}Chạy terraform apply sẽ tạo cả hai resource nếu chúng chưa tồn tại, hoặc cập nhật chúng để khớp với cấu hình. Chạy lại mà không có thay đổi sẽ không tạo ra thao tác nào: Terraform so sánh cấu hình với state file của nó và không tìm thấy gì cần làm.
Ansible sử dụng phương pháp thủ tục với các task được thực thi theo thứ tự. Mặc dù các module Ansible thường có tính idempotent (chạy chúng hai lần cho kết quả giống nhau), bản thân playbook mô tả một chuỗi các hành động thay vì một trạng thái cuối cùng.
# webserver.yml
- name: Configure web server
hosts: webservers
become: true
tasks:
- name: Install nginx
ansible.builtin.apt:
name: nginx
state: present
update_cache: true
- name: Copy nginx configuration
ansible.builtin.template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Restart nginx
- name: Ensure nginx is running
ansible.builtin.service:
name: nginx
state: started
enabled: true
handlers:
- name: Restart nginx
ansible.builtin.service:
name: nginx
state: restartedMỗi task chạy theo thứ tự. Pattern notify/handler cung cấp một số hành vi khai báo: handler chỉ chạy một lần ở cuối, bất kể có bao nhiêu task kích hoạt nó.
Quản lý State: Chủ đề Phỏng vấn Quan trọng
Terraform duy trì một state file ánh xạ cấu hình với các tài nguyên thực. State này theo dõi ID tài nguyên, các phụ thuộc và metadata. Không có nó, Terraform không thể xác định những gì tồn tại hoặc những gì cần thay đổi.
| Khía cạnh | Terraform | Ansible |
|---|---|---|
| Lưu trữ state | Bắt buộc (file cục bộ hoặc remote backend) | Không có mặc định |
| Phát hiện drift | Tích hợp sẵn qua terraform plan | Cần kiểm tra rõ ràng |
| Theo dõi tài nguyên | Tự động thông qua state | Dựa trên inventory |
| Rollback | Destroy và recreate từ state | Không có rollback native |
Ansible không có state file tương đương. Nó kết nối với các hệ thống đích và thực thi các task, dựa vào state hệ thống hiện tại và tính idempotent của module. Điều này làm cho Ansible đơn giản hơn để bắt đầu nhưng khó theo dõi các thay đổi theo thời gian hơn.
Một câu hỏi phỏng vấn phổ biến hỏi về bảo mật state file. State Terraform có thể chứa dữ liệu nhạy cảm: mật khẩu database, API key, định danh tài nguyên. Các deployment production lưu trữ state từ xa (S3, Azure Blob, Terraform Cloud) với mã hóa và kiểm soát truy cập.
# backend.tf
terraform {
backend "s3" {
bucket = "company-terraform-state"
key = "prod/infrastructure.tfstate"
region = "us-east-1"
encrypt = true
dynamodb_table = "terraform-locks"
}
}Bảng DynamoDB cung cấp cơ chế khóa, ngăn hai engineer sửa đổi state cùng lúc.
Khi nào Sử dụng Mỗi Công cụ
Terraform xuất sắc trong việc provisioning hạ tầng cloud: máy ảo, managed database, load balancer, IAM role, VPC. Nó xử lý các phụ thuộc giữa các tài nguyên tự động và hỗ trợ tất cả các nhà cung cấp cloud lớn thông qua cú pháp HCL nhất quán.
Ansible xuất sắc trong việc cấu hình các hệ thống hiện có: cài đặt package, quản lý user, triển khai mã ứng dụng, điều phối các deployment nhiều bước. Nó kết nối qua SSH (hoặc WinRM cho Windows) mà không cần agent trên máy đích.
Vùng chồng chéo gây ra nhầm lẫn. Cả hai đều có thể cài đặt phần mềm trên VM. Terraform có thể sử dụng provisioner để chạy script sau khi tạo tài nguyên. Ansible có thể tạo tài nguyên cloud thông qua các module như amazon.aws.ec2_instance. Tuy nhiên, sử dụng mỗi công cụ ngoài thế mạnh của nó dẫn đến các vấn đề về khả năng bảo trì.
Sử dụng provisioner Terraform rộng rãi cho configuration management tạo ra hạ tầng dễ hỏng. Provisioner chỉ chạy tại thời điểm tạo, không phải trên các lần apply tiếp theo. Sử dụng Terraform cho hạ tầng, sau đó chuyển giao cho Ansible để cấu hình.
Quy trình Kết hợp trong Production
Hầu hết các tổ chức sử dụng cả hai công cụ cùng nhau. Terraform provisioning hạ tầng và xuất ra chi tiết kết nối. Ansible tiêu thụ các output đó để cấu hình hệ thống.
# outputs.tf
output "web_server_ips" {
value = aws_instance.web[*].private_ip
description = "Private IPs of web servers"
}
output "db_endpoint" {
value = aws_rds_instance.main.endpoint
description = "RDS endpoint for application config"
}Pipeline CI/CD chạy Terraform trước, capture output, tạo inventory Ansible động, sau đó chạy playbook với hạ tầng mới.
# ansible/inventory/aws_ec2.yml
plugin: amazon.aws.aws_ec2
regions:
- us-east-1
filters:
tag:Environment: production
instance-state-name: running
hostnames:
- private-ip-address
groups:
webservers: "'web' in tags.Role"
databases: "'db' in tags.Role"Inventory động này truy vấn AWS trực tiếp, nhóm các instance theo tag của chúng. Không cần quản lý IP thủ công.
Sẵn sàng chinh phục phỏng vấn DevOps?
Luyện tập với mô phỏng tương tác, flashcards và bài kiểm tra kỹ thuật.
OpenTofu: Fork Thay đổi Toàn cảnh
HashiCorp đã cấp phép lại Terraform theo Business Source License (BSL) vào tháng 8 năm 2023. Cộng đồng đã phản hồi bằng cách fork Terraform 1.5 thành OpenTofu, hiện được lưu trữ dưới Linux Foundation.
Tính đến tháng 8 năm 2026, OpenTofu 1.11.6 vẫn là sự thay thế drop-in cho hầu hết các workflow Terraform. Cùng cú pháp HCL, cùng hệ sinh thái provider, cùng định dạng state. OpenTofu đã thêm các tính năng không có trong binary open-source của Terraform: mã hóa state, provider for_each, và đánh giá biến sớm.
Để chuẩn bị phỏng vấn, hãy hiểu sự khác biệt về giấy phép. BSL cho phép sử dụng nội bộ nhưng hạn chế xây dựng các sản phẩm cạnh tranh. Các tổ chức lo ngại về vendor lock-in hoặc có yêu cầu compliance cụ thể có thể ưa thích giấy phép MPL 2.0 của OpenTofu. Việc IBM mua lại HashiCorp vào tháng 12 năm 2024 đã thêm một biến số khác vào các cuộc thảo luận về quan hệ vendor.
Câu hỏi Phỏng vấn DevOps Phổ biến
Q: Ansible có thể thay thế Terraform không?
Không hiệu quả. Ansible có thể tạo tài nguyên cloud, nhưng thiếu quản lý state. Chạy cùng playbook hai lần có thể tạo tài nguyên trùng lặp. State file Terraform theo dõi những gì tồn tại và tính toán các thay đổi tối thiểu. Sử dụng Ansible cho những gì nó làm tốt nhất: configuration management.
Q: Làm thế nào để xử lý secret trong Terraform?
Không bao giờ commit secret vào version control. Sử dụng biến môi trường, tích hợp Vault, hoặc secret manager của nhà cung cấp cloud. Đánh dấu biến là sensitive để ngăn chúng xuất hiện trong log:
# variables.tf
variable "db_password" {
type = string
sensitive = true
description = "Database password from Vault or environment"
}Q: Idempotency của Ansible là gì?
Một thao tác idempotent tạo ra kết quả giống nhau dù chạy một lần hay nhiều lần. Module apt với state: present cài đặt package nếu thiếu và không làm gì nếu đã được cài đặt. Viết playbook idempotent ngăn các thay đổi không mong muốn trong các lần chạy tiếp theo.
Q: Làm thế nào để test infrastructure code?
Terraform: terraform validate kiểm tra cú pháp, terraform plan xem trước các thay đổi, và các tool như Terratest chạy integration test. Ansible: ansible-lint phát hiện vấn đề, chế độ --check thực hiện dry run, và Molecule test role với container.
Để chuẩn bị phỏng vấn Terraform sâu hơn, xem Terraform Interview Questions: Infrastructure as Code Complete Guide. Thực hành hands-on với các module Terraform Basics và Ansible Configuration Management.
Tương thích Phiên bản và Hệ sinh thái
Các phiên bản ổn định hiện tại tính đến tháng 8 năm 2026:
| Công cụ | Phiên bản | Ngày phát hành | Tính năng chính |
|---|---|---|---|
| Ansible | 2.20.5 | Tháng 4 2026 | Quản lý collection được cải thiện |
| Terraform | 1.15.8 | Tháng 7 2026 | Hỗ trợ Windows ARM64, hàm convert |
| OpenTofu | 1.11.6 | Tháng 4 2026 | Mã hóa state, provider for_each |
Kiến trúc collection của Ansible tách chức năng cốt lõi khỏi các module cụ thể theo provider. Collection amazon.aws nhận cập nhật độc lập với Ansible core. Điều này quan trọng cho version pinning trong pipeline CI/CD.
Versioning provider của Terraform tuân theo các nguyên tắc tương tự. Lock file (terraform.lock.hcl) đảm bảo phiên bản provider nhất quán giữa các thành viên team và hệ thống CI.
# versions.tf
terraform {
required_version = ">= 1.15.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.60"
}
}
}Chọn Giữa Hai Công cụ: Framework Quyết định
Câu hỏi hiếm khi là Ansible hay Terraform. Câu hỏi là công cụ nào xử lý trách nhiệm nào.
| Use Case | Công cụ Khuyến nghị |
|---|---|
| Provision VM, database, mạng | Terraform |
| Cấu hình OS, cài đặt package | Ansible |
| Quản lý tài nguyên Kubernetes | Terraform hoặc kubectl/Helm |
| Deploy mã ứng dụng | Ansible hoặc CI/CD native |
| Tạo IAM role và policy | Terraform |
| Quản lý tài khoản user trên server | Ansible |
| Setup hạ tầng monitoring | Terraform (tạo tài nguyên) + Ansible (cấu hình agent) |
Để có cái nhìn toàn diện về cách các công cụ này phù hợp với workflow deployment hiện đại, xem CI/CD Pipeline Interview Questions.
Những gì Engineer Senior Cần Biết về Ansible và Terraform
- Terraform quản lý state hạ tầng theo cách khai báo; Ansible cấu hình hệ thống theo cách thủ tục. Sử dụng cả hai cùng nhau tạo ra hạ tầng có khả năng bảo trì.
- Bảo mật state file quan trọng. Lưu trữ state Terraform từ xa với mã hóa và khóa được bật.
- OpenTofu cung cấp giải pháp thay thế có giấy phép MPL cho Terraform với các tính năng bổ sung. Di chuyển đơn giản cho hầu hết các workflow.
- Idempotency không tự động. Viết playbook tạo ra kết quả nhất quán trong các lần chạy lặp lại.
- Inventory động loại bỏ quản lý host thủ công. Truy vấn nhà cung cấp cloud trực tiếp để có hạ tầng hiện tại.
- Version pinning ngăn bất ngờ. Khóa phiên bản provider trong Terraform; pin phiên bản collection trong Ansible.
- Test infrastructure code yêu cầu các phương pháp khác nhau:
terraform planđể xem trước các thay đổi, chế độ--checkcho Ansible dry run, framework integration test cho cả hai.
Bắt đầu luyện tập!
Kiểm tra kiến thức với mô phỏng phỏng vấn và bài kiểm tra kỹ thuật.
Bạn có tìm ra lỗi trong DevOps không?
Một đoạn mã thật, một lỗi ẩn, mỗi ngày một lượt. Không cần tài khoản để thử.

Viết bởi
Anthony Fillion-MailletNgười sáng lập SharpSkill
Lập trình viên fullstack hơn 10 năm. Anh điều hành SharpSkill và chịu trách nhiệm về mọi nội dung đăng tại đây.
Cập nhật ngày 22 tháng 8, 2026
Chia sẻ
Bài viết liên quan

Quản lý Secrets Kubernetes 2026: External Secrets, Vault và Câu hỏi Phỏng vấn
Hướng dẫn toàn diện về quản lý secrets Kubernetes với External Secrets Operator và HashiCorp Vault. Bao gồm cấu hình production, rotation tự động và câu hỏi phỏng vấn DevOps.

Docker Compose 2026: Ứng dụng Multi-Container, Networking và Câu hỏi Phỏng vấn DevOps
Hướng dẫn Docker Compose cho ứng dụng multi-container với networking, volumes và deployment production. Bao gồm câu hỏi phỏng vấn DevOps.

Kubernetes Helm Charts 2026: Hướng Dẫn Đóng Gói, Triển Khai và Câu Hỏi Phỏng Vấn
Tìm hiểu sâu về Helm Charts trong Kubernetes với hướng dẫn thực hành về tạo chart, templating, deployment và các câu hỏi phỏng vấn thường gặp nhất.