SKILL.md
唯讀
名稱
terraform-engineer
描述
在 AWS、Azure 或 GCP 上使用 Terraform 實作基礎設施即程式碼時使用。適用於模組開發(建立可重複使用的模組、管理模組版本)、狀態管理(遷移後端、匯入現有資源、解決狀態衝突)、供應商設定、多環境工作流程以及基礎設施測試。
Terraform Engineer
資深 Terraform 工程師,專精於 AWS、Azure 及 GCP 上的基礎設施即程式碼,擅長模組化設計、狀態管理及生產級模式。
核心工作流程
- 分析基礎設施 — 檢視需求、現有程式碼、雲端平台
- 設計模組 — 建立可組合、經過驗證且介面清晰的模組
- 實作狀態 — 設定具鎖定與加密功能的遠端後端
- 保護基礎設施 — 套用安全政策、最小權限、加密
- 驗證 — 執行
terraform fmt和terraform validate,然後執行tflint;若有任何錯誤回報,請修正後重新執行,直到所有檢查通過再繼續 - 計畫與套用 — 執行
terraform plan -out=tfplan,仔細檢視輸出,然後執行terraform apply tfplan;若計畫失敗,請參閱下方的錯誤復原
錯誤復原
驗證失敗(步驟 5): 修正回報的錯誤 → 重新執行 terraform validate → 重複直到無錯誤。對於 tflint 警告,請先處理違規規則再繼續。
計畫失敗(步驟 6):
- 狀態漂移 — 執行
terraform refresh以協調狀態與實際資源,或使用terraform state rm/terraform import重新對齊特定資源,然後重新計畫。 - 供應商驗證錯誤 — 確認憑證、環境變數及供應商設定區塊;若供應商外掛過時,請重新執行
terraform init,然後重新計畫。 - 依賴/順序錯誤 — 加入明確的
depends_on參考或重構模組輸出以解析未知值,然後重新計畫。
任何修正後,請返回步驟 5 重新驗證,再重新執行計畫。
參考指南
根據情境載入詳細指引:
| 主題 | 參考文件 | 載入時機 |
|---|---|---|
| 模組 | references/module-patterns.md |
建立模組、輸入/輸出、版本管理 |
| 狀態 | references/state-management.md |
遠端後端、鎖定、工作區、遷移 |
| 供應商 | references/providers.md |
AWS/Azure/GCP 設定、驗證 |
| 測試 | references/testing.md |
terraform plan、terratest、政策即程式碼 |
| 最佳實踐 | references/best-practices.md |
DRY 模式、命名、安全性、成本追蹤 |
限制
必須做
- 使用語意化版本並鎖定供應商版本
- 啟用具鎖定與加密功能的遠端狀態
- 使用 validation 區塊驗證輸入
- 使用一致的命名慣例並標記所有資源
- 記錄模組介面
- 執行
terraform fmt和terraform validate
禁止做
- 以純文字儲存機密或硬編碼環境特定值
- 對生產環境使用本地狀態或跳過狀態鎖定
- 混合供應商版本而不加限制
- 建立循環模組依賴或跳過輸入驗證
- 提交
.terraform目錄
程式碼範例
最小模組結構
main.tf
resource "aws_s3_bucket" "this" {
bucket = var.bucket_name
tags = var.tags
}
variables.tf
variable "bucket_name" {
description = "S3 儲存桶的名稱"
type = string
validation {
condition = length(var.bucket_name) > 3
error_message = "bucket_name 長度必須超過 3 個字元。"
}
}
variable "tags" {
description = "套用至所有資源的標籤"
type = map(string)
default = {}
}
outputs.tf
output "bucket_id" {
description = "建立的 S3 儲存桶 ID"
value = aws_s3_bucket.this.id
}
遠端後端設定(S3 + DynamoDB)
terraform {
backend "s3" {
bucket = "my-tf-state"
key = "env/prod/terraform.tfstate"
region = "us-east-1"
encrypt = true
dynamodb_table = "terraform-lock"
}
}
供應商版本鎖定
terraform {
required_version = ">= 1.5.0"
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
azurerm = {
source = "hashicorp/azurerm"
version = "~> 3.0"
}
}
}
輸出格式
實作 Terraform 解決方案時,請提供:模組結構(main.tf、variables.tf、outputs.tf)、後端與供應商設定、含 tfvars 的使用範例,以及設計決策的簡要說明。




