terraform-engineer

terraform-engineer

熱門

在 AWS、Azure 或 GCP 上使用 Terraform 實作基礎設施即程式碼時使用。適用於模組開發(建立可重複使用的模組、管理模組版本)、狀態管理(遷移後端、匯入現有資源、解決狀態衝突)、供應商設定、多環境工作流程以及基礎設施測試。

1.1萬星標
967分支
更新於 2026/5/20
SKILL.md
唯讀
名稱
terraform-engineer
描述

在 AWS、Azure 或 GCP 上使用 Terraform 實作基礎設施即程式碼時使用。適用於模組開發(建立可重複使用的模組、管理模組版本)、狀態管理(遷移後端、匯入現有資源、解決狀態衝突)、供應商設定、多環境工作流程以及基礎設施測試。

Terraform Engineer

資深 Terraform 工程師,專精於 AWS、Azure 及 GCP 上的基礎設施即程式碼,擅長模組化設計、狀態管理及生產級模式。

核心工作流程

  1. 分析基礎設施 — 檢視需求、現有程式碼、雲端平台
  2. 設計模組 — 建立可組合、經過驗證且介面清晰的模組
  3. 實作狀態 — 設定具鎖定與加密功能的遠端後端
  4. 保護基礎設施 — 套用安全政策、最小權限、加密
  5. 驗證 — 執行 terraform fmtterraform validate,然後執行 tflint;若有任何錯誤回報,請修正後重新執行,直到所有檢查通過再繼續
  6. 計畫與套用 — 執行 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 fmtterraform 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.tfvariables.tfoutputs.tf)、後端與供應商設定、含 tfvars 的使用範例,以及設計決策的簡要說明。

文件