Khi hạ tầng đám mây (Cloud Infrastructure) mở rộng từ vài chục lên hàng ngàn máy chủ, cụm Kubernetes và cơ sở dữ liệu phân tán, việc cấu hình thủ công qua giao diện web (ClickOps) hoặc các script Shell/Python tuần tự trở thành nguyên nhân số 1 gây ra State Drift (lệch cấu hình) và thảm họa sập hệ thống do lỗi con người.
Để giải quyết bài toán này, Infrastructure as Code (IaC) ra đời như một tiêu chuẩn bắt buộc cho mọi kỹ sư Cloud Native và DevOps hiện đại. Tuy nhiên, việc lựa chọn đúng công cụ và nắm vững tư duy cốt lõi Declarative (Khai báo trạng thái mong muốn) thay vì Imperative (Chỉ định từng bước thực thi) là ranh giới giữa một hệ thống tự phục hồi vững chắc và một đống script bảo trì ác mộng.
1. Tư Duy Cốt Lõi: Declarative vs Imperative trong Quản Trị Hạ Tầng
1.1. Bản Chất của Phương Pháp Imperative (Mệnh Lệnh)
Trong mô hình Imperative (điển hình như Shell Script, Python Boto3, Ansible khi không dùng đúng module idempotent), kỹ sư phải mô tả từng bước tuần tự để đạt được kết quả:
- Bước 1: Kiểm tra xem S3 Bucket đã tồn tại chưa.
- Bước 2: Nếu chưa có, gọi lệnh tạo Bucket.
- Bước 3: Nếu đã có, gọi lệnh cập nhật Encryption.
- Bước 4: Nếu cấu hình sai, viết hàm rollback thủ công.
Rủi ro lớn nhất của Imperative: Script không có cơ chế ghi nhớ trạng thái hệ thống trước đó. Nếu script bị ngắt giữa chừng (network timeout, OOM), hệ thống rơi vào trạng thái dở dang (partial failure) và việc chạy lại script lần 2 có thể sinh ra tài nguyên rác trùng lặp hoặc lỗi xung đột ResourceAlreadyExists.
1.2. Tư Duy Declarative của Terraform (Khai Báo Trạng Thái)
Với mô hình Declarative của Terraform, kỹ sư chỉ cần mô tả trạng thái mong muốn cuối cùng (Desired State). Terraform sẽ đảm nhận việc so sánh trạng thái mong muốn trong code HCL với trạng thái thực tế trên Cloud (Current State thông qua State File) để tự động tính toán đồ thị hành vi (Execution Plan: Add, Change, Destroy).
2. Bảng So Sánh Kỹ Thuật Toàn Diện (Engineering Matrix)
Dưới đây là ma trận so sánh chi tiết giữa 4 giải pháp quản trị hạ tầng phổ biến nhất hiện nay dựa trên 8 tiêu chí kiểm định thực tế tại các hệ thống tài chính & viễn thông chịu tải cao:
| Tiêu Chí Kỹ Thuật | HashiCorp Terraform | Ansible (Red Hat) | Pulumi | AWS CloudFormation |
|---|---|---|---|---|
| Triết Lý Thiết Kế | Declarative IaC | Imperative / Config Management | Declarative (General Programming) | Declarative (AWS Native) |
| Ngôn Ngữ Định Nghĩa | HCL (HashiCorp Config Lang) | YAML (Playbooks) | TypeScript, Python, Go, C# | JSON / YAML Template |
| Quản Lý Trạng Thái (State) | Explicit State File (S3 / GCS / HCP) | Không có State File (Stateless) | Pulumi Service / S3 Backend | CloudFormation Engine nội bộ AWS |
| Phát Hiện Lệch Cấu Hình (Drift) | Cực mạnh (terraform plan -refresh-only) |
Hạn chế (Dựa trên Check Mode) | Mạnh (pulumi refresh) |
Hỗ trợ qua Drift Detection API |
| Độ Phụ Thuộc Nền Tảng (Portability) | Độc lập (Multi-Cloud Provider) | Độc lập (OS & Cloud Modules) | Độc lập (Multi-Cloud SDK) | Khóa chặt vào hệ sinh thái AWS |
| Khả Năng Preview Kế Hoạch | Rõ ràng, trực quan (plan) |
Hạn chế (Dry-run không hoàn hảo) | Rất tốt (pulumi preview) |
Change Sets |
| Hệ Sinh Thái Module & Registry | 3.500+ Providers, 15.000+ Modules | Galaxy Ansible Roles | Pulumi Registry / NPM / PyPI | AWS Serverless Repo / Registry |
| Mục Đích Sử Dụng Lý Tưởng | Khởi tạo & Vòng đời Hạ tầng Cloud | Cấu hình OS, Cài đặt phần mềm, Patch | Hạ tầng phức tạp cần logic code động | Dự án 100% thuần AWS Serverless |
3. Kiến Trúc Mẫu Triển Khai Chuẩn Production (HCL 1.7+)
Dưới đây là ví dụ cấu hình hạ tầng lưu trữ bảo mật cao tuân thủ quy chuẩn mã hóa KMS, phân quyền IAM least-privilege và chặn truy cập công khai tuyệt đối:
# versions.tf - Định nghĩa phiên bản Terraform và Provider
terraform {
required_version = ">= 1.7.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.40.0"
}
}
backend "s3" {
bucket = "showtech-prod-tfstate-ap-southeast-1"
key = "core/storage/s3-secure.tfstate"
region = "ap-southeast-1"
dynamodb_table = "showtech-prod-tflocks"
encrypt = true
}
}
provider "aws" {
region = var.aws_region
default_tags {
tags = {
Environment = var.environment
ManagedBy = "Terraform"
Project = "ShowTech-Enterprise"
}
}
}
# main.tf - Tài nguyên S3 Bucket được bảo vệ nghiêm ngặt
resource "aws_kms_key" "s3_kms" {
description = "KMS Key ma hoa du lieu cho S3 Bucket Production"
deletion_window_in_days = 30
enable_key_rotation = true
tags = {
Name = "showtech-kms-s3-${var.environment}"
}
}
resource "aws_s3_bucket" "secure_storage" {
bucket = "showtech-enterprise-assets-${var.environment}"
force_destroy = false
lifecycle {
prevent_destroy = true
}
}
resource "aws_s3_bucket_versioning" "versioning" {
bucket = aws_s3_bucket.secure_storage.id
versioning_configuration {
status = "Enabled"
}
}
resource "aws_s3_bucket_server_side_encryption_configuration" "kms_encryption" {
bucket = aws_s3_bucket.secure_storage.id
rule {
apply_server_side_encryption_by_default {
kms_master_key_id = aws_kms_key.s3_kms.arn
sse_algorithm = "aws:kms"
}
bucket_key_enabled = true
}
}
resource "aws_s3_bucket_public_access_block" "block_all_public" {
bucket = aws_s3_bucket.secure_storage.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
4. Case Study Thực Chiến: Khắc Phục Sự Cố "State Lock Conflict"
Tình huống thực tế: Đội ngũ DevOps gồm 5 kỹ sư cùng chạy pipeline CI/CD. Khi một pipeline đang thực thi terraform apply, một kỹ sư khác vô tình chạy lệnh cục bộ trên máy cá nhân khiến quá trình apply bị crash và State bị khóa vĩnh viễn với thông báo:
Error: Error acquiring the state lock: ConditionalCheckFailedException:
The conditional request failed
Lock Info:
ID: e8d99c42-73a1-432b-93ff-1834167e411b
Path: showtech-prod-tfstate-ap-southeast-1/core/storage/s3-secure.tfstate
Operation: OperationTypeApply
Who: runner@github-ci-worker-04
Created: 2026-09-05 14:10:02.123456789 +0000 UTC
Quy Trình Xử Lý Sự Cố 3 Bước Chuẩn Enterprise:
- Bước 1 — Xác thực an toàn: Truy cập CI/CD runner hoặc liên hệ người có tên trong trường
Whođể đảm bảo 100% tiến trình cũ đã bị hủy hoặc crash, không còn ghi đè state. - Bước 2 — Mở khóa cưỡng chế: Sử dụng lệnh chính thống của Terraform kèm Lock ID được ghi rõ trong log:
bash terraform force-unlock e8d99c42-73a1-432b-93ff-1834167e411b - Bước 3 — Đồng bộ trạng thái: Luôn chạy
terraform plan -refresh-onlytrước khi apply lại để cập nhật toàn bộ thay đổi thực tế trên Cloud vào state mà không làm hỏng tài nguyên.
5. Câu Hỏi Phỏng Vấn Kỹ Sư Cao Cấp (Senior Terraform Q&A)
Q1: Tại sao nói Terraform là công cụ "Declarative" nhưng một số tính năng như provisioner và local-exec lại mang tính "Imperative"? Khi nào nên dùng?
Trả lời:
provisioner (chạy script shell/remote-exec) phá vỡ tính Declarative vì Terraform không thể theo dõi hoặc rollback được những thay đổi do script đó thực hiện bên trong máy ảo. Do đó, HashiCorp phân loại provisioner là giải pháp cuối cùng (Last Resort). Thay vào đó, trong môi trường Cloud Native chuẩn, kỹ sư nên dùng Cloud-init, Packer (Bake AMI), hoặc Ansible tách biệt sau khi Terraform đã dựng xong hạ tầng.
Q2: Điều gì xảy ra nếu ai đó xóa thủ công một EC2 Instance trên AWS Console mà không qua Terraform? Khi chạy terraform plan, Terraform xử lý như thế nào?
Trả lời:
Khi chạy terraform plan, Terraform thực hiện chu kỳ Refresh bằng cách gọi AWS API đọc trạng thái thực tế. Nhận thấy Instance đã biến mất (404 Not Found), Terraform cập nhật bộ nhớ tạm so với Desired State trong code HCL (vẫn khai báo resource đó), và đề xuất kế hoạch:
Plan: 1 to add, 0 to change, 0 to destroy.
+ aws_instance.web (re-create)
Đây chính là cơ chế tự phục hồi hạ tầng (Reconciliation Loop) cốt lõi của Declarative IaC.
6. Tổng Kết & Lộ Trình Thực Hành Tiếp Theo
Tư duy Declarative State không chỉ đơn thuần là viết code HCL, mà là cách thiết kế hạ tầng có khả năng mở rộng, dễ dự đoán và tự động hóa 100% trong quy trình CI/CD.
Trong các bài viết tiếp theo của Series, chúng ta sẽ lần lượt giải phẫu chuyên sâu vòng đời thực thi, cú pháp HCL nâng cao, đồ thị DAG, quản trị Variables/Locals/Outputs, cấu trúc State và xây dựng Remote Backend S3/DynamoDB chuẩn Enterprise.
Bài viết thuộc Series đào tạo Terraform Thực Chiến độc quyền trên ShowTech.vn.