Cấu trúc thư mục

Tổng quan cây thư mục terraform-resource và vai trò của từng thành phần

Tổng quan

Dự án được tổ chức theo cấu trúc sau:

terraform-resource/
terraform-resource/
├── GUIDE.md                         ← User guide (English)
├── HUONG-DAN-DEPLOY.md              ← User guide (Vietnamese)
├── milu2-stage-infrastructure-*.md  ← Architecture reference docs
│
├── plan/                            ← Design documents for each module
│   ├── README.md                    ← Architecture overview + module order
│   ├── 01-vpc/plan.md               ← VPC module details
│   ├── 02-subnets/plan.md           ← Subnets module details
│   ├── ...                          ← Each module has its own plan.md
│   ├── 17-ec2-instances/
│   │   ├── plan.md                  ← EC2 instances module details
│   │   └── iptables-role-map.md     ← Per-role iptables rules
│   ├── shared/                      ← Plans for shared modules
│   │   ├── s3/plan.md
│   │   ├── iam/plan.md
│   │   └── cloudfront/plan.md
│   └── test-deploy-singapore.md     ← Sample deploy plan
│
└── terraform/
    ├── deploy.ps1                   ← Automated deploy script (main entry)
    ├── preflight-check.ps1          ← Pre-deploy validation script
    ├── main.tf                      ← Calls all stage modules
    ├── variables.tf                 ← Stage variables
    ├── outputs.tf                   ← Stage outputs
    ├── providers.tf                 ← AWS provider + peer alias
    ├── terraform.tfvars             ← Variable values for deployment
    │
    ├── modules/                     ← Stage modules (per-region)
    │   ├── 01-vpc/
    │   ├── 02-subnets/
    │   ├── 03-internet-gateway/
    │   ├── 04-route-tables-peering/
    │   ├── 05-security-groups/
    │   ├── 06-alb/
    │   ├── 07-nlb/
    │   ├── 08-target-groups-listeners/
    │   ├── 09-autoscaling/          ← API ASG + Launch Template
    │   ├── 11-ecr/
    │   ├── 12-acm/
    │   ├── 13-route53/
    │   ├── 15-iam/                  ← Data source only
    │   ├── 16-cloudwatch/
    │   └── 17-ec2-instances/        ← Fixed EC2 (web/mysql/mongo/redis/node_*)
    │
    └── shared/                      ← Shared resources (global/account-level)
        ├── main.tf
        ├── terraform.tfvars
        └── modules/
            ├── s3/                  ← 4 S3 buckets
            ├── iam/                 ← IAM role + instance profile
            └── cloudfront/          ← 2 CloudFront + ACM us-east-1

Các file chính

Giải thích vai trò của các file quan trọng:

FileVai trò
deploy.ps1Script deploy tự động (7 bước): login → confirm → preflight → shared → stage → verify
preflight-check.ps1Kiểm tra 10 hạng mục trước deploy: credentials, S3, IAM, CloudFront, ECR, AMI, ACM, VPC Peering, CIDR scan, region
main.tfFile chính gọi tất cả stage modules
variables.tfĐịnh nghĩa các biến input cho stage
terraform.tfvarsGiá trị biến cho deployment hiện tại
providers.tfAWS provider + alias cho cross-region peering
outputs.tfOutputs sau khi apply (DNS, ARN, ID)

Quy ước đặt tên Module

Thông tin

Module đánh số thứ tự (01-vpc, 02-subnets, …) để dễ đọc. Thực tế Terraform tự giải dependency, không cần chạy theo thứ tự.
LớpModulesChức năng
Network01-vpc, 02-subnets, 03-internet-gateway, 04-route-tables-peeringVPC /16, 2 subnet public, IGW, route table, VPC Peering
Security05-security-groups7 SG theo vai trò (app, db, node-game/world/chat/commu)
Load Balancer06-alb, 07-nlb, 08-target-groups-listenersALB internal + public (HTTPS), NLB (MySQL/Mongo/Redis TCP)
Compute09-autoscaling, 17-ec2-instancesASG cho API (auto-scale), EC2 cố định cho Web/DB/Node
Registry & Cert11-ecr, 12-acm7 ECR repo + wildcard cert *.milu.jp
DNS & IAM13-route53, 15-iamPrivate hosted zones → ALB/NLB; IAM role (data source)
Observability16-cloudwatchAlarm ASG + ALB

Thư mục plan/

Chứa tài liệu thiết kế chi tiết cho từng module. Mỗi module có file plan.md riêng mô tả:

  • Mục đích và tổng quan của module
  • Resources sẽ được tạo
  • Input variables và giá trị mặc định
  • Outputs
  • Dependencies với các module khác
  • Lưu ý đặc biệt và edge cases

Mẹo

Tham khảo plan/README.md để xem sơ đồ kiến trúc tổng quan và thứ tự module.