Blog
Thoughts on engineering, design, and building great products.
Nền Tảng: IAM Service Role và S3 Artifact Bucket
Trước khi dựng pipeline, cần hai thứ nền: các IAM service role để dịch vụ AWS được phép làm việc thay bạn, và một bucket S3 chứa artifact. Bài này mổ cơ chế service role và trust policy — vì sao một dịch vụ assume role để có quyền tạm thời thay vì lưu khóa — rồi tạo role cho CodeBuild và bucket artifact (bật versioning) bằng AWS CLI.
CI/CD Là Gì và Bộ Developer Tools Của AWS
Bài mở đầu series: vì sao deploy bằng tay sớm muộn cũng vỡ, CI và CD khác nhau ra sao, và AWS có những dịch vụ nào để dựng pipeline — CodeCommit, CodeBuild, CodeDeploy, CodePipeline, CodeArtifact. Cách các mảnh ghép lại thành một dây chuyền đưa code từ commit tới khi chạy trên EC2, tất cả điều khiển bằng AWS CLI.
Capstone: Hạ Tầng Web Đa Tầng Hoàn Chỉnh
Bài cuối ráp mọi thứ của series thành một hạ tầng web hoàn chỉnh: VPC, ALB, Auto Scaling Group chạy nginx, RDS PostgreSQL và S3 — tổ chức thành ba module nối với nhau. Apply thật, truy cập ứng dụng qua ALB, kiểm mật khẩu DB không lọt state, rồi teardown sạch. Khép lại bằng lộ trình học tiếp.
Kiểm Thử: terraform test, mock_provider, và Terratest
Kiểm thử code Terraform trước khi nó dựng hạ tầng thật. terraform test (GA từ 1.6) với file .tftest.hcl chạy run/assert để kiểm logic, mock_provider (1.7) cho phép test không cần AWS thật. Demo thật ba test pass và một test fail, rồi giới thiệu Terratest cho kiểm thử tích hợp sâu.
CI/CD Cho Terraform: GitHub Actions, OIDC, và Quét Chất Lượng
Đưa Terraform vào pipeline: plan tự động trên pull request, apply khi merge, xác thực AWS bằng OIDC không cần lưu access key. Gắn bộ quét chất lượng fmt, validate, tflint, Trivy và Checkov vào pipeline — với output thật cho thấy chúng bắt ra những lỗ hổng gì.
Lifecycle và Provider Nâng Cao
Các tính năng điều khiển vòng đời resource và provider: create_before_destroy, prevent_destroy, ignore_changes, replace_triggered_by; provider alias để chạy đa vùng trong một cấu hình; terraform_data thay null_resource; provisioner như giải pháp cuối; và check block kiểm tra chỉ cảnh báo. Mỗi tính năng kèm demo thật.
Đọc State Khác và Refactor: remote_state, moved, removed
Khi tách hạ tầng ra nhiều state, terraform_remote_state cho phép một config đọc output của config khác. Và khi tổ chức lại code, moved block đổi tên resource không xóa-tạo lại, removed block gỡ resource khỏi state mà không destroy — cả hai khai báo ngay trong cấu hình thay cho lệnh state mv/rm tay ở bài 7.