Terraform 基礎

Vibe Prompt

「幫我寫 Terraform 設定檔:在 AWS 建立一個 t3.micro EC2,安裝 Nginx,開啟 80 埠。」

provider "aws" {
  region = "ap-northeast-1"
}

resource "aws_security_group" "web_sg" {
  name        = "web-server-sg"
  description = "Allow HTTP"
  
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
  
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

resource "aws_instance" "web" {
  ami                    = "ami-0d527b8c"
  instance_type          = "t3.micro"
  vpc_security_group_ids = [aws_security_group.web_sg.id]
  
  user_data = <<-EOF
    #!/bin/bash
    apt update && apt install -y nginx
    systemctl start nginx
  EOF
  
  tags = { Name = "Vibe Tutor Web" }
}

output "public_ip" {
  value = aws_instance.web.public_ip
}

常用指令

terraform init      # 初始化
terraform plan      # 預覽變更
terraform apply     # 套用變更
terraform destroy   # 銷毀資源
terraform fmt       # 格式化程式碼

關鍵要點

  • ✅ 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 中的所有資源 |



為什麼 Infrastructure as Code 改變了一切?

在 Terraform 出現之前,部署基礎設施是這樣的:

  1. 工程師登入 AWS 主控台
  2. 手動點擊建立 VPC
  3. 手動點擊建立 EC2
  4. 手動設定 Security Group
  5. ...(誰記得他點了什麼?)

六個月後,某台 EC2 掛了。沒有人知道它是怎麼建立的。

這就是 Snowflake Server(雪球伺服器)問題——每一台伺服器都是獨一無二的雪花,沒有人能複製它。

Terraform 解決的問題

| 問題 | 傳統方式 | Terraform | |:----:|:--------:|:---------:| | 可重複性 | 每次手動點擊,結果可能不同 | 同一份程式碼永遠產生同樣的結果 | | 可版本控制 | 沒有人記錄建立過程 | .tf 檔案放在 Git 中,完整歷史紀錄 | | 可審計 | 誰在什麼時候改了什麼?不知道 | Git log 一目了然 | | 可摧毀 | 一個一個手動刪除 | terraform destroy 一鍵刪除所有資源 | | 可共享 | 寄送截圖和說明文件 | 直接分享 .tf 檔案 |

下一章預告:從基礎到 State

Terraform 的核心概念你已經掌握了——宣告式配置、Provider、資源定義。但 Terraform 真正強大的地方在於它的 State 管理——Terraform 怎麼知道哪些資源是真實存在的?多人協作時怎麼避免衝突?

下一章 Terraform State 將深入探討這些問題。

會員專屬免費教學

本章節為註冊會員專屬的免費開放內容!請先登入或註冊會員,即可立即解鎖閱讀。

立即登入 / 註冊