Tổng hợp 40 câu hỏi phỏng vấn Terraform & IaC kèm đáp án chi tiết, song ngữ Việt–Anh — sắp xếp từ cơ bản đến nâng cao. Ôn luyện miễn phí, tự động lưu tiến độ.
Hạ tầng thành code có review, có version, dựng lại được. Cùng một repo dựng ra staging và production giống nhau, và git log trả lời được câu "vì sao security group này mở port 6379". Click tay không trả lời được câu đó. Sau…
State là bảng ánh xạ giữa địa chỉ resource trong code và ID thật ở provider, cộng với snapshot attribute của lần apply gần nhất. Không có state, Terraform không biết awsdbinstance.main ứng với DB nào nên apply sẽ tạo mới thay vì update. Lý…
Dòng ... must be replaced và ký hiệu -/+. Đó là destroy rồi create lại, và với RDS hay EBS thì bằng mất dữ liệu. Đọc theo thứ tự: 1. Dòng tổng cuối: Plan: 2 to add, 1 to change, 3 to destroy. — số…
Không. Provider là plugin dịch resource block thành API call của một dịch vụ cụ thể, mà resource của mỗi cloud khác nhau hoàn toàn. awsinstance không chạy trên GCP, đổi cloud vẫn phải viết lại gần hết code. Cái dùng chung được là tool,…
Từ thấp lên cao: default trong block variable, rồi TFVAR, rồi terraform.tfvars / .auto.tfvars, rồi -var-file, cao nhất là -var trên CLI. Cấu trúc thường dùng: mỗi env một file prod.tfvars / staging.tfvars, commit vào repo, trừ secret. Khác biệt giữa hai env nằm rõ…
resource tạo và quản lý vòng đời; data chỉ đọc thứ đã tồn tại, không tạo, không sửa, không xoá. Đây là cách nối các state độc lập mà không gộp chúng: team platform sở hữu VPC, team application chỉ đọc và không có quyền…
init tải provider + module về .terraform/, cấu hình backend, và sinh hoặc cập nhật .terraform.lock.hcl. Lock file phải commit. Lock file ghi version chính xác + checksum của từng provider. Không commit thì mỗi máy resolve ra một version khác, plan khác nhau giữa…
Dựa vào dependency graph suy ra từ tham chiếu giữa các resource, không phải thứ tự viết trong file. Resource không phụ thuộc nhau được tạo song song. dependson chỉ cần khi có phụ thuộc ẩn mà Terraform không thấy qua tham chiếu: Lạm dụng…
Locking chặn hai apply chạy song song trên cùng state. Không có nó, hai người apply cùng lúc ghi đè state của nhau, hậu quả là resource mồ côi không nằm trong state nào. Checklist backend production: - Encryption at rest — state chứa secret.…
Plan phát hiện drift lúc refresh và đề xuất kéo resource về đúng code, nên thay đổi làm tay bị revert ở lần apply kế tiếp. Đây vừa là feature vừa là bẫy: hotfix mở port lúc sự cố sẽ bị xoá âm thầm khi…
Không. Module tách về mặt code để reuse, nhưng mọi module trong cùng một config vẫn dùng chung một state. Gõ nhầm terraform destroy vẫn xoá hết. Hai mức tách khác nhau hoàn toàn: - Module = reuse code, interface là variable / output. -…
count đánh địa chỉ theo index, nên xoá phần tử ở giữa list làm mọi phần tử sau bị shift index và Terraform destroy/recreate hàng loạt. Đây là cái bẫy tốn kém nhất với người mới: chèn một subnet vào giữa list và plan báo…
Viết resource block tương ứng, import vào state theo ID thật, rồi sửa code tới khi terraform plan ra "No changes". Cách mới (khai báo trong code, review được trong PR): Cách cũ chạy lệnh trực tiếp: Bước tốn thời gian nhất là bước cuối:…
Khai báo moved block. Terraform nhận diện resource theo địa chỉ trong config, nên đổi tên mà không khai báo bị hiểu là destroy cái cũ + create cái mới. Cách cũ là chạy lệnh trên state: moved block tốt hơn vì nó được review…
Dự án lớn thường tách thư mục, mỗi env một state riêng, cùng gọi chung module. Workspace hợp cho env tạm và ngắn hạn. Vì sao tách thư mục hợp hơn cho production: - Khác biệt giữa hai env hiện ra trong code, review được.…
Không. Nó chỉ che giá trị trong output và log, hiện ra (sensitive value). State vẫn lưu plaintext. Đây là hiểu nhầm rất phổ biến và là nguyên nhân nhiều vụ leak: team tưởng đánh dấu là đủ rồi để state bucket cho cả công…
plan tự động khi mở PR và post output vào comment, apply sau khi merge. Thay đổi hạ tầng đi qua đúng quy trình như thay đổi code. Điểm quan trọng về tính đúng đắn: apply đúng file plan đã review, đừng plan lại lúc…
Xếp nhiều lớp, vì một lớp không đủ: preventdestroy làm mọi plan chứa thao tác destroy resource đó fail thay vì chạy. Giới hạn của nó: chỉ chặn ở tầng Terraform, xoá thẳng trên console thì không đỡ được — nên phải có deletionprotection ở…
Kết quả của lệnh không được ghi vào state, nên Terraform chỉ biết provisioner đã chạy hay chưa, không biết máy đang ở cấu hình nào. Lệnh fail giữa chừng để lại resource tainted. Thay bằng, theo thứ tự ưu tiên: 1. AMI dựng sẵn…
Khai báo nhiều provider block với alias, rồi chỉ định provider cho từng resource. Các trường hợp thường cần: cert cho CloudFront, DR ở region thứ hai, và kiến trúc multi-account (mỗi env một account, dùng assumerole). Khi truyền vào module, module phải khai báo…
Từ fmt + validate + plan tự động trong CI. Ba bước này rẻ, chạy vài giây, và bắt được phần lớn lỗi trước khi hạ tầng bị đụng tới. Các tầng theo mức đầu tư tăng dần: Dòng cuối là kiểm tra đáng có…
Chỉ CI role. Người chỉ có read-only ở production. Nhờ vậy mọi thay đổi đều qua review, để lại audit trail, và không ai apply từ laptop. Dùng OIDC để CI mượn role ngắn hạn, không giữ access key: Phải chuẩn bị sẵn break-glass: một…
createbeforedestroy. Mặc định Terraform destroy trước rồi create sau, nên có một khoảng không có resource nào phục vụ. Điều kiện để chạy được: hai bản phải tồn tại đồng thời. Nhiều resource ràng buộc tên unique nên phải dùng nameprefix thay vì name, không…
Chặn config vi phạm quy định ngay trong pipeline: S3 bucket public, security group mở port 22 ra 0.0.0.0/0, resource thiếu tag bắt buộc. Điểm mạnh là quy định trở thành thứ chạy được thay vì một trang wiki. Wiki thì người mới không đọc,…
Blast radius quá rộng và apply quá chậm: một sai sót chạm tới mọi thứ, mỗi lần chạy phải refresh hàng nghìn resource, và state lock làm các team chờ nhau. Ba tiêu chí chia thường dùng: theo environment, theo domain nghiệp vụ, và theo…
Chi phí thành thứ nhìn thấy được lúc review PR thay vì phát hiện vào cuối tháng. Ba lợi ích cụ thể: 1. Ước tính trước khi merge — reviewer thấy ngay một PR làm hoá đơn tăng 800 đô/tháng. 2. Dọn dẹp khả thi…
Tag cho phép phân bổ chi phí theo team/dự án và trả lời được resource lạ này của ai. Không có tag thì hoá đơn chỉ là một con số tổng. Áp một lần ở provider level: Tag ManagedBy là cái hữu ích nhất lúc…
Resource đã tạo vẫn được ghi vào state, nên chạy lại sẽ làm tiếp phần còn thiếu chứ không làm lại từ đầu. Terraform không có transaction trên nhiều resource nên không có rollback toàn bộ. Trường hợp khó chịu hơn: resource đã tạo ở…
Reference theo version đã pin, không bao giờ trỏ vào main. Trỏ vào main nghĩa là hạ tầng đổi chỉ vì ai đó merge một PR, và lúc sự cố không ai lần ra nguyên nhân. Quy trình release nên có: semver rõ ràng, changelog…
Mọi resource phải đặt tên theo branch/PR để không trùng, và destroy sạch được khi PR đóng. Các chỗ thường vướng: - Tên unique toàn cầu (S3 bucket, domain, ECR repo). - Resource có preventdestroy hoặc deletionprotection copy từ production sang. - Thứ sinh ra…