多環境管理

Vibe Prompt

「幫我建立 Terraform 多環境架構:dev/staging/prod 三個環境使用同一份模組但不同變數。」

# environments/dev/main.tf
module "vpc" {
  source = "../../modules/vpc"
  vpc_cidr       = "10.0.0.0/16"
  environment    = "dev"
  public_subnets  = ["10.0.1.0/24"]
  private_subnets = ["10.0.10.0/24"]
}

# environments/prod/main.tf
module "vpc" {
  source = "../../modules/vpc"
  vpc_cidr       = "10.0.0.0/16"
  environment    = "prod"
  public_subnets  = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"]
  private_subnets = ["10.0.10.0/24", "10.0.20.0/24", "10.0.30.0/24"]
}

部署指令

terraform -chdir=environments/dev init
terraform -chdir=environments/dev plan -var-file="dev.tfvars"
terraform -chdir=environments/dev apply -var-file="dev.tfvars" -auto-approve

最佳實踐

  • dev: 最小資源,節省成本
  • staging: 與 prod 相同規格但不同域名
  • prod: 完整 HA 架構

關鍵要點

  • ✅ Terraform = Infrastructure as Code (IaC) 的業界標準
  • ✅ HCL (HashiCorp Configuration Language) 宣告式定義基礎設施
  • terraform plan 顯示將要做的變更,apply 執行變更
  • ✅ State File (terraform.tfstate) 是真實世界的來源比對
  • ✅ Module 讓基礎設施程式碼可以重用

常用命令

| 命令 | 用途 | |------|------| | terraform init | 初始化工作目錄,下載 Provider | | terraform fmt | 格式化程式碼 | | terraform validate | 驗證語法正確性 | | terraform plan | 顯示執行計畫 | | terraform apply | 執行變更 | | terraform destroy | 刪除所有資源 | | terraform state list | 列出 State 中的所有資源 |


目錄結構最佳實踐

terraform/
├── modules/
│   ├── networking/    # VPC, subnets, firewall
│   ├── compute/       # EC2, ASG, ECS
│   └── database/      # RDS, ElastiCache
├── environments/
│   ├── dev/
│   │   ├── main.tf
│   │   ├── variables.tf
│   │   ├── terraform.tfvars  # dev-specific values
│   │   └── backend.tf
│   ├── staging/
│   └── production/
└── global/
    ├── iam.tf
    └── route53.tf

Workspace vs 目錄

| 方法 | 適合規模 | 程式碼重複 | 管理複雜度 | |:----:|:--------:|:---------:|:----------:| | Workspace | 小型專案 | 低(共用程式碼) | 低 | | 目錄結構 | 中大型專案 | 中(部分重複) | 中 | | Terragrunt | 大型專案 | 極低(DRY) | 高 |

環境差異建議

# dev/main.tf
module "app" {
  source = "../../modules/compute"
  env    = "dev"
  instance_type = "t3.micro"
  min_size      = 1
  max_size      = 2
}

# production/main.tf
module "app" {
  source = "../../modules/compute"
  env    = "prod"
  instance_type = "t3.large"
  min_size      = 3
  max_size      = 10
}


多環境管理:開發、測試、正式

為什麼需要多環境?

直接改正式環境是災難。多環境管理讓你在開發環境測試變更,確認沒問題後再部署到正式環境。

多環境策略

# environments/dev/network.tf
module "network" {
  source = "../modules/network"
  env    = "dev"
  vpc_cidr = "10.0.0.0/16"
}

# environments/prod/network.tf
module "network" {
  source = "../modules/network"
  env    = "prod"
  vpc_cidr = "10.1.0.0/16"
  instance_type = "t3.large"
}

環境目錄結構

terraform/
├── modules/          # 共用模組
│   ├── network/      # 網路模組
│   ├── compute/      # 運算模組
│   └── database/     # 資料庫模組
├── environments/
│   ├── dev/          # 開發環境
│   │   └── terragrunt.hcl
│   ├── staging/      # 測試環境
│   │   └── terragrunt.hcl
│   └── prod/         # 正式環境
│       └── terragrunt.hcl

下一章預告

這堂 Terraform 課從基礎、State、Module 到多環境 ——你現在可以用程式碼管理雲端基礎設施。

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!