核心概念:宣告式 (Declarative)
Terraform 採用的是 Declarative(宣告式) 設計。
可以把它想像成去餐廳點餐。
你只需要告訴服務生:
我要一個起司漢堡
你不需要管:
- 廚房怎麼開火
- 肉要煎幾分鐘
- 麵包怎麼烤
Terraform 也是一樣。
你只需要描述:
「我需要一台 EC2」
Terraform 就會負責確保這台伺服器存在。
如果資源已經存在,它也不會再多建立一份。
為什麼要學 Terraform?
- 更快速
不需要再手動點擊 AWS Console。
一行 terraform apply 就能完成整個架構部署。
- 可重複性 (Reproducibility)
同一份 Terraform code 可以快速建立:
- Dev 環境
- Staging 環境
- Production 環境
確保每個環境的設定完全一致。
- 版本控制 (Version Control)
Terraform code 可以放在 GitHub。 你可以清楚看到:
- 誰改了 infrastructure
- 改了什麼設定
- 什麼時候改的
這對團隊協作非常重要。
快速上手:三個基礎指令
在 Terraform 專案中,你只需要記住三個最重要的指令:
- terraform init
初始化專案。
Terraform 會下載所需的 Provider(雲端插件)。
1terraform init
- terraform plan
預覽 Terraform 即將做的變更。
例如:
1terraform plan
1+ create 1 resource
2~ update 0 resource
3- destroy 0 resource
這可以避免誤刪重要資源。
- terraform apply
真正執行 Infrastructure 建立。
1terraform apply
輸入 yes 後,Terraform 就會開始建立資源。
實踐範例:建立第一台 EC2
建立一個 main.tf 檔案:
- 定義雲端供應商
1provider "aws" {
2 region = "ap-northeast-1"
3}
4
5# 2. 定義資源
6resource "aws_instance" "my_web_server" {
7 ami = "ami-0d52744d605140123"
8 instance_type = "t2.micro"
9
10 tags = {
11 Name = "MyFirstTerraformServer"
12 }
13}
接著執行:
1terraform init
2terraform plan
3terraform apply
Terraform 就會幫你建立一台 EC2。
進階技巧
使用變數 (Variables)
如果不想每次都修改 main.tf,可以使用變數:
1variable "server_size" {
2 default = "t2.micro"
3}
4
5resource "aws_instance" "my_web_server" {
6 instance_type = var.server_size
7}
這樣就可以透過變數控制伺服器規格。
狀態管理 (State File)
Terraform 在執行後會產生一個檔案:terraform.tfstate
這個檔案非常重要,因為它記錄了:
- Terraform 管理的雲端資源
- 目前資源的實際狀態
- Terraform 與雲端資源之間的對應關係
Terraform 會透過這個 state file 來判斷:
- 哪些資源需要建立
- 哪些資源需要更新
- 哪些資源需要刪除
在團隊開發時,通常不會把 terraform.tfstate 放在本地端,而是會使用 Remote State,例如:
- S3:存放 State File
- DynamoDB:提供 State Lock(避免多人同時修改)
這樣可以確保多人操作 Terraform 時,不會發生衝突或覆蓋彼此的變更。
結語:如何「毀滅」所有資源?
當測試結束後,如果不再需要這些資源,可以使用:
1terraform destroy
Terraform 會把剛剛建立的所有資源 完整刪除。
這可以避免:
- 忘記關 EC2
- 忘記刪 Load Balancer
月底收到高額帳單
恭喜你!
現在你已經理解 Terraform 的核心概念。

評論