Blog
Thoughts on engineering, design, and building great products.
count và for_each: Cạm Bẫy Chỉ Số, Conditional, templatefile
Hai cách tạo nhiều resource: count theo chỉ số và for_each theo khóa. Bài này chỉ ra cạm bẫy thực tế khi dùng count với một danh sách — bỏ một phần tử giữa làm dịch chỉ số và xóa-tạo lại nhầm hàng loạt — bằng demo thật, rồi cho thấy for_each tránh được. Kèm tạo resource có điều kiện và templatefile.
Data Source, Hàm, Biểu Thức for và Dynamic Block
Đọc thông tin có sẵn trên AWS bằng data source (AMI mới nhất, vùng khả dụng, tài khoản hiện tại), biến đổi và lọc dữ liệu bằng biểu thức for, rồi sinh các block lồng lặp lại bằng dynamic block. Một security group với rule ingress sinh tự động từ danh sách cổng làm ví dụ xuyên suốt.
Variable, Output, Locals và Kiểm Tra Giá Trị Sớm
Tham số hóa cấu hình để cùng một code chạy cho nhiều môi trường: variable nhận đầu vào, output trả kết quả, locals đặt tên cho biểu thức dẫn xuất. Quan trọng hơn là bắt lỗi sớm — validation chặn input sai ngay ở plan, precondition và postcondition kiểm giả định quanh mỗi resource.
Secrets: sensitive, ephemeral, và Write-Only Arguments
State lưu secret ở dạng plaintext — bài này xử lý đúng vấn đề đó. sensitive chỉ che output chứ vẫn ghi vào state; ephemeral resources và write-only arguments (Terraform 1.10/1.11) mới thực sự giữ secret khỏi state. Demo thật: cùng một mật khẩu, cách cũ lọt vào state còn write-only thì không.
Thao Tác State: import Block, state mv, state rm
Làm việc với state hằng ngày: đưa hạ tầng có sẵn vào quản lý bằng import block và tự sinh cấu hình với -generate-config-out, đổi tên resource trong state bằng state mv, và gỡ resource khỏi quản lý mà không xóa nó bằng state rm. Tất cả chạy thật trên một bucket dựng tay từ trước.
Remote State Trên S3 Với use_lockfile
State nằm trên máy cá nhân không chia sẻ được, không an toàn, và hai người chạy cùng lúc sẽ ghi đè nhau. Bài này chuyển state lên S3: bootstrap một bucket có versioning và mã hóa, cấu hình backend, và bật khóa state bằng use_lockfile — cách hiện hành thay cho DynamoDB đã lỗi thời. Có demo xung đột lock thật.
Đồ Thị Phụ Thuộc: Implicit, depends_on, và -target
Terraform tự suy ra thứ tự tạo và xóa resource từ một đồ thị phụ thuộc. Bài này mổ chính đồ thị đó: phụ thuộc ngầm sinh ra từ tham chiếu, xem trực tiếp bằng lệnh graph, vì sao destroy đảo ngược thứ tự, khi nào cần depends_on, và vì sao -target chỉ là lối thoát hiểm.