devopsiacInfrastructure as Codeterraformterragrunt

Quản lý Multi-Environment và Multi-Account với Terragrunt

Tìm hiểu cách Terragrunt giúp quản lý nhiều môi trường và nhiều AWS Account một cách nhất quán, giảm lặp cấu hình và mở rộng repository theo quy mô doanh nghiệp.

26 thg 7, 20265 min readCập nhật 26 thg 7, 2026
Quản lý Multi-Environment và Multi-Account với Terragrunt

Quản lý Multi-Environment và Multi-Account với Terragrunt

Trong bài trước, chúng ta đã tìm hiểu cách Terragrunt xây dựng dependency graph để tự động triển khai infrastructure theo đúng thứ tự.

Tuy nhiên, khi infrastructure ngày càng lớn, một vấn đề khác nhanh chóng xuất hiện.

Làm sao quản lý nhiều môi trường và nhiều Cloud Account mà không phải copy toàn bộ repository?

Đây là một trong những lý do quan trọng nhất khiến Terragrunt được sử dụng rộng rãi trong các hệ thống production.


Một môi trường không bao giờ là đủ

Hầu hết mọi hệ thống đều có nhiều môi trường.

Ví dụ:

Development

↓

Testing

↓

Staging

↓

Production

Mỗi môi trường đều triển khai gần như cùng một infrastructure.

Ví dụ:

VPC

EKS

RDS

Redis

Monitoring

Applications

Khác biệt chủ yếu chỉ nằm ở cấu hình.


Điều gì thay đổi giữa các môi trường?

Development thường có:

  • Instance nhỏ
  • Database nhỏ
  • Một Availability Zone
  • Ít node Kubernetes
  • Chi phí thấp

Trong khi Production có thể cần:

  • Multi-AZ
  • Auto Scaling
  • Nhiều Node Group
  • Database lớn
  • Backup
  • Monitoring đầy đủ
  • High Availability

Infrastructure gần như giống nhau.

Chỉ khác giá trị cấu hình.


Giải pháp phổ biến khi chỉ dùng Terraform

Rất nhiều team ban đầu sẽ làm như sau:

terraform/

dev/

staging/

production/

Mỗi thư mục chứa:

provider.tf

backend.tf

versions.tf

variables.tf

main.tf

Sau đó copy toàn bộ từ Development sang Production.

Repository nhanh chóng trở thành:

dev/

staging/

production/

sandbox/

demo/

performance/

Mỗi lần cập nhật provider hoặc backend, bạn phải sửa ở tất cả các thư mục.

Đây chính là duplication mà chúng ta đã nhắc đến ở các bài trước.


Terragrunt tiếp cận vấn đề khác đi

Terragrunt coi mỗi Environment chỉ là:

Một tập hợp các giá trị cấu hình.

Chứ không phải một Terraform project hoàn toàn mới.

Ví dụ:

live/

development/

staging/

production/

Ba thư mục này đều sử dụng cùng một Terraform Module.

Điểm khác biệt chỉ là:

  • Region
  • Account
  • CIDR
  • Instance Size
  • Replica Count
  • Environment Name

Toàn bộ phần còn lại được chia sẻ.


Chia sẻ Module, thay đổi Configuration

Giả sử bạn có một module:

modules/

eks/

Development sử dụng:

cluster_size = 2

Production sử dụng:

cluster_size = 10

Terraform Module hoàn toàn giống nhau.

Không cần copy thêm một dòng code nào.

Điều thay đổi chỉ là phần input.

Đây là tư duy rất quan trọng khi thiết kế Infrastructure as Code.


Không chỉ nhiều Environment

Trong thực tế, nhiều công ty còn có nhiều AWS Account.

Ví dụ:

AWS Organization

├── Shared
├── Security
├── Networking
├── Development
├── Staging
├── Production
└── Sandbox

Hoặc:

Customer A

Customer B

Customer C

Hoặc:

US Region

EU Region

APAC Region

Mỗi Account đều có thể sử dụng cùng một module.

Điều khác biệt chỉ là cấu hình.


Repository có thể mở rộng như thế nào?

Một ví dụ phổ biến:

live/

aws/

development/

staging/

production/

Sau đó:

development/

network/

eks/

database/

monitoring/

Production cũng có cấu trúc tương tự.

Điều này mang lại một lợi ích lớn.

Developer chỉ cần nhìn vào cấu trúc thư mục là hiểu ngay infrastructure được tổ chức như thế nào.


Layer Configuration

Terragrunt khuyến khích chia cấu hình thành nhiều tầng.

Ví dụ:

Root

Chứa:

  • Terraform Version
  • Provider Version
  • Backend
  • Common Tags

AWS Account

Chứa:

  • Account ID
  • IAM Role
  • Default Region

Environment

Chứa:

  • Environment Name
  • CIDR
  • Common Variables

Service

Chứa:

  • CPU
  • Memory
  • Replica
  • Instance Size

Nhờ vậy, thay đổi ở một tầng sẽ tự động được áp dụng cho toàn bộ tầng bên dưới.


Thêm một Environment mới

Giả sử hôm nay công ty cần thêm:

Performance Testing

Nếu dùng Terraform thuần, bạn có thể sẽ:

  • Copy Development
  • Đổi tên thư mục
  • Chỉnh lại Backend
  • Chỉnh Provider
  • Chỉnh Variables

Nếu dùng Terragrunt:

Bạn chỉ cần thêm:

performance/

Sau đó khai báo:

  • Account
  • Region
  • Environment Name

Mọi cấu hình còn lại đều được kế thừa.

Đây chính là sức mạnh của việc chia sẻ configuration.


Multi-Account không có nghĩa là nhiều Repository

Một số tổ chức tạo:

terraform-prod

terraform-dev

terraform-stage

Ba repository khác nhau.

Điều này khiến việc đồng bộ thay đổi trở nên rất khó khăn.

Terragrunt cho phép quản lý nhiều Account trong cùng một repository.

Mỗi Account chỉ là một tầng cấu hình khác nhau.

Repository vẫn giữ được sự thống nhất.


Repository có thể phát triển trong nhiều năm

Ban đầu:

2 Environment

Sau đó:

5 Environment

Rồi:

12 AWS Accounts

Cuối cùng:

300 Terraform Projects

Nếu repository được thiết kế đúng ngay từ đầu, bạn gần như không cần thay đổi kiến trúc.

Bạn chỉ tiếp tục bổ sung:

  • Environment mới
  • Account mới
  • Service mới

Toàn bộ quy tắc cũ vẫn hoạt động.

Đây là một trong những đặc điểm quan trọng của một production repository.


Multi-Environment không chỉ dành cho AWS

Mặc dù ví dụ trong series chủ yếu sử dụng AWS, ý tưởng này hoàn toàn áp dụng cho:

  • Azure
  • Google Cloud
  • Kubernetes
  • On-premise Infrastructure

Miễn là infrastructure có nhiều môi trường hoặc nhiều cụm triển khai, Terragrunt đều có thể giúp tổ chức repository theo cùng một tư duy.


Tổng kết

Terragrunt không tạo thêm môi trường hay Cloud Account.

Nó giúp chúng ta quản lý chúng một cách nhất quán.

Thay vì tạo nhiều Terraform project gần giống nhau, Terragrunt khuyến khích:

  • Tái sử dụng Module
  • Chia sẻ Configuration
  • Phân tầng Environment
  • Phân tầng Account
  • Kế thừa cấu hình giữa các cấp

Nhờ đó, repository có thể mở rộng từ vài project lên hàng trăm project mà vẫn dễ đọc, dễ bảo trì và dễ onboarding.


Bài tiếp theo

Ở bài tiếp theo, chúng ta sẽ tìm hiểu cách quản lý Secrets và tích hợp CI/CD với Terragrunt, từ việc bảo vệ thông tin nhạy cảm đến tự động hóa quá trình triển khai infrastructure trong môi trường production.

Bình luận

0/2000

Đang tải bình luận…

Trung Nguyen

Trung Nguyen

Software engineer xây dựng các hệ thống đơn giản, đáng tin cậy. Mình viết về kiến trúc, Java và những gì mình học được trên chặng đường.

Xem thêm về mình