前三天了解了 Terraform 的運作及架構理論後,終於要進入動手實作練習!不過今天我還沒有打算要直接上雲操作,我們先在本機練習就好!
今天的目標就是建構好環境並且使用 Terraform 在本機執行一個專案,熟悉 CLI 的操作✨ Let’s GOGO!
🐈🐈🐈
首先,我們需要安裝 Terraform。不同作業系統有不同的安裝方式,大家可以參考官網提供的安裝指南,這裡我會以 macOS 為例來分享安裝流程。
我選擇使用 Homebrew 來進行安裝。首先,我們需要安裝 HashiCorp tap:
brew tap hashicorp/tap
這個的好處是,讓你之後在下載相關工具時,可以直接連線到 HashiCorp 的官方倉庫,不僅能取得最新版本,同時也能確保安裝時的相容性最佳化。
再來就是安裝 Terraform 本人了!
brew install hashicorp/tap/terraform
安裝成功後,我們來驗證一下是否可以正常的運作,在終端機中輸入 terraform version
:
這樣就代表 Terraform 已經在 mac 系統上安裝成功啦!
如果你平常使用 Bash 或 Zsh 作為終端機的 Shell,官方建議可以順便開啟 Terraform 命令的自動完成功能,這樣打指令會更方便!
首先確保你的 Shell 設定檔存在(以 Zsh 為例):
touch ~/.zshrc
然後安裝自動完成套件:
terraform -install-autocomplete
安裝完成後,記得重新啟動你的終端機或執行 source ~/.zshrc
,這樣自動完成功能就生效囉!
如果未來你需要維護多個專案,推薦可以使用 tfenv
來做 Terraform 的版本控管。這邊提供 tfenv 的 GitHub。稍微提一下安裝方式(一樣以 mac 為例,直接使用 Homebrew 較方便)以及常用的指令:
brew install tfenv
常用的指令如下:
# 查看可用版本
tfenv list-remote
# 安裝指定版本
tfenv install 1.6.0
# 切換版本
tfenv use 1.6.0
# 查看目前使用版本
tfenv list
環境都準備好之後,接著我們來試著創建一個專案,這邊我在本地先建立了一個名為 hello-terraform 的資料夾,並且在其中建立了 main.tf
檔案,而這隻檔案就是 Terraform 的主要檔案,這邊來看一下我嘗試配置了哪些內容:
這邊我配置了 Terraform 的版本要在 1.0 或以上的版本,並指定 Provider 的來源為 HashiCorp 官方維護的 local provider
這邊就是昨天我提到的 Resource 元件,而它的配置格式為 resource "資源類型" "資源名稱”
,以我的配置作為舉例:
包含在大括號內的是資源屬性:
terraform apply
的目錄這裡使用到了第二個元件 Output,是用來定義執行完成後要顯示的資訊,description 是輸出值的說明文字,而 value 是要輸出的實際值。而這邊有試著用到幾個 Terraform 內建函數:timestamp()
, abspath()
, length()
。而關於 Terraform 元件格式以及內建函數可以參考官方文檔。
💡 另外要特別提醒,通常我們會搭配 Git 來進行版本控制,儲存 Terraform 配置文件。這時候一定要記得配置好 .gitignore
來避免意外提交敏感檔案和狀態文件喔!
現在我們就來試著操作 CLI 體驗一下 Terraform 的運作流程吧!(可以參考 **Day 02 - Terraform 如何運作!)**
terraform init
你會看到的輸出:
init 做了什麼?
.terraform/
資料夾.terraform.lock.hcl
鎖定檔案檢查產生的檔案:
ls -la
# 你會看到:
# .terraform/
# .terraform.lock.hcl*
.terraform/
和 .terraform.lock.hcl
是 terraform init
的標準產生,是為了確保 Provider 管理和版本一致性。
terraform plan
你會看到的輸出:
如何讀懂 plan 輸出?
+
表示要新增的資源-
表示要刪除的資源(這次沒有)~
表示要修改的資源(這次沒有)(known after apply)
表示執行後才會知道的值Plan: 1 to add, 0 to change, 0 to destroy
是總結terraform apply
系統會顯示執行計畫並詢問確認:
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value:
輸入 yes
並按 Enter:
執行完成後的輸出:
檢查是否成功建立檔案:
*# 查看建立的檔案*
cat hello-terraform.txt
*# 檢查專案資料夾*
ls -la
你會看到:
hello-terraform.txt
檔案已建立:terraform.tfstate
並產生了這隻檔案(這個明天會再詳細分享🤓)terraform show
這會顯示目前管理的所有資源詳細資訊:
# local_file.hello_world:
resource "local_file" "hello_world" {
content = <<-EOT
🚀 hello Terraform!!
這是我第一個 IaC 專案
建立時間:2025-09-04T09:43:05Z
今天動手嘗試了:
1. 安裝 Terraform
2. 建立第一個配置檔案
3. 使用 Terraform CLI
EOT
content_base64sha256 = "VbInht5xzHgK/oTSIar9Y2yEmscpfmiBMsTjEESzHUQ="
content_base64sha512 = "XBOkuWbKILr7YoZ2HK28XXmYSBWtO9br5WFyHidaRs/71wBNEtESxo6hLiydeLtIPzoUu/qVZ4JIMOk9geBCkg=="
content_md5 = "ddf2ca42395169ade8f81ed347451b34"
content_sha1 = "dd2f7b5d555b9c22eb1307b471781d9848630a83"
content_sha256 = "55b22786de71cc780afe84d221aafd636c849ac7297e688132c4e31044b31d44"
content_sha512 = "5c13a4b966ca20bafb6286761cadbc5d79984815ad3bd6ebe561721e275a46cffbd7004d12d112c68ea12e2c9d78bb483f3a14bbfa9567824830e93d81e04292"
directory_permission = "0777"
file_permission = "0777"
filename = "hello-terraform.txt"
id = "dd2f7b5d555b9c22eb1307b471781d9848630a83"
}
Outputs:
content_length = 120
hello_file_path = "/Users/chiehhhaa/mine/hello-terraform/hello-terraform.txt"
當你想要清理所有資源時:
terraform destroy
系統會詢問確認:
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value:
輸入 yes
確認:
檢查檔案是否已刪除:
ls -la
*# hello-terraform.txt 已經不存在了*
好啦!我們完成了 Terraform 的第一次實戰練習!從環境安裝到成功執行完整的 CLI 操作流程,相信大家對 Terraform CLI 的操作有更具體的認識~🤩
這邊幫大家統整幾個關鍵的觀念:
terraform apply
後會自動產生 terraform.tfstate
檔案。.terraform.lock.hcl
這隻檔案是用來確保團隊協作時的一致性。雖然今天我們只是在本機操作簡單的檔案建立,但這個流程和未來管理雲端資源的方式是完全相同的!
🐈🐈🐈
明天我們要深入探討一個重要的主題:terraform.tfstate 狀態檔案的作用
前面的文章也有提到狀態管理是 Terraform 的核心概念,掌握好狀態檔案的原理,才能真正理解 Terraform 的運作邏輯!~🤓