Terraform: Từ câu lệnh đầu tiên đến infrastructure thực tế — hướng dẫn siu có tâm nhé em zai!
Giới thiệu: Đừng sợ — ai cũng từng “terraform apply” xong… hoảng!
Lần đầu bạn gõ terraform apply
và thấy AWS tạo ra 10 resource trong 30 giây — cảm giác như có phép thuật. Nhưng cũng chính lần đó, bạn có thể vô tình tạo một EC2 instance public với security group mở port 22 cho cả thế giới… và nhận được hóa đơn $500.
Đừng lo. Bài viết này dành cho bạn — người mới, người từng “hỏng tay”, hoặc người chỉ muốn học Terraform một cách an toàn, có hệ thống và… có tâm.

Terraform là gì? Và tại sao DevOps cần nó?
Terraform là công cụ mã nguồn mở từ HashiCorp, cho phép bạn **khai báo hạ tầng dưới dạng code** (Infrastructure as Code - IaC). Thay vì click chuột trên AWS Console, bạn viết file `.tf` — và Terraform sẽ tự động tạo, cập nhật, hoặc xóa tài nguyên.
Lợi ích rõ rệt:
- Tái tạo được: Môi trường dev, staging, prod giống hệt nhau.
- Kiểm soát phiên bản: Dùng Git để track thay đổi hạ tầng — ai sửa gì, lúc nào?
- Phòng tránh lỗi thủ công: Không còn “anh A tạo tay, anh B không biết”.
- Tự động hóa CI/CD: Deploy ứng dụng kèm luôn hạ tầng mới.
Bước 1: Cài đặt và cấu hình ban đầu
Trước tiên, cài Terraform:
# Trên macOS (dùng Homebrew)
brew tap hashicorp/tap
brew install hashicorp/tap/terraform
# Trên Ubuntu/Debian
wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform
Kiểm tra phiên bản:
terraform -version
Với AWS (ví dụ phổ biến nhất), bạn cần cấu hình credentials:
aws configure
Nhập AWS_ACCESS_KEY_ID
và AWS_SECRET_ACCESS_KEY
(tạo từ IAM user có quyền cần thiết).
Bước 2: Các lệnh Terraform “sống còn”
Dưới đây là 5 lệnh bạn sẽ dùng 95% thời gian:
1. terraform init
Khởi tạo thư mục làm việc — tải provider (ví dụ: AWS, Azure) và module.
Chạy 1 lần duy nhất khi bắt đầu dự án hoặc thêm provider mới.
2. terraform fmt
Định dạng code Terraform cho đẹp và chuẩn — nên dùng trước khi commit.
3. terraform validate
Kiểm tra cú pháp file `.tf` — không cần kết nối cloud.
4. terraform plan
Quan trọng nhất! Xem Terraform “dự định” làm gì — tạo, thay đổi, hay xóa resource?
Luôn chạy plan
trước khi apply
— như “xem trước hóa đơn”.
5. terraform apply
Thực thi thay đổi. Terraform sẽ hỏi bạn yes/no
— đừng vội gõ yes
nếu chưa đọc kỹ plan!
Mẹo: Dùng terraform apply -auto-approve
trong CI/CD (không hỏi), nhưng chỉ khi bạn tin tưởng 100% vào pipeline.
Bước 3: Thực hành — Tạo một S3 bucket trên AWS
Hãy bắt đầu với thứ “an toàn”: S3 bucket (không tốn tiền nếu không lưu dữ liệu).
Tạo thư mục mới:
mkdir terraform-s3-demo && cd terraform-s3-demo
Tạo file main.tf
:
provider "aws" {
region = "ap-southeast-1" # Ví dụ: Singapore
}
resource "aws_s3_bucket" "my_bucket" {
bucket = "my-unique-bucket-name-20251022" # ⚠️ Phải là tên toàn cầu duy nhất!
}
resource "aws_s3_bucket_versioning" "my_bucket_versioning" {
bucket = aws_s3_bucket.my_bucket.id
versioning_configuration {
status = "Enabled"
}
}
Bây giờ chạy lần lượt:
terraform init
terraform fmt
terraform validate
terraform plan
terraform apply
Nếu thành công, bạn sẽ thấy bucket xuất hiện trong AWS Console!
Khi không cần nữa, gõ:
terraform destroy
→ Terraform sẽ xóa sạch mọi thứ đã tạo — “dọn dẹp sau bữa tiệc”.

Bước 4: Best practices — học từ người đi trước
Để không “mất tiền oan” hay “hỏng production”, hãy ghi nhớ:
- Luôn dùng
terraform plan
trước apply — không ngoại lệ. - Đừng hardcode secret — dùng
variables
+ truyền qua environment hoặc secret manager. - Tổ chức code theo module — chia nhỏ: network, compute, database…
- Lưu state ở remote (S3 + DynamoDB cho AWS) — tránh mất file
terraform.tfstate
. - Review code như code ứng dụng — pull request, comment, approve.
Kết luận: Terraform không khó — chỉ cần kiên nhẫn và cẩn thận
Terraform không yêu cầu bạn phải biết hết mọi resource ngay từ đầu. Hãy bắt đầu từ một bucket S3, rồi đến một EC2, rồi VPC… Mỗi bước nhỏ đều là tiến bộ.
Và nhớ: “Infrastructure as Code” không chỉ là công cụ — mà là tư duy. Khi bạn viết hạ tầng như viết phần mềm, bạn đã là một DevOps Engineer thực thụ.
Chúc bạn gõ apply
thật tự tin — và ngủ ngon sau mỗi lần deploy!