iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0

前三天了解了 Terraform 的運作及架構理論後,終於要進入動手實作練習!不過今天我還沒有打算要直接上雲操作,我們先在本機練習就好!

今天的目標就是建構好環境並且使用 Terraform 在本機執行一個專案,熟悉 CLI 的操作✨ Let’s GOGO!

🐈🐈🐈

環境準備

首先,我們需要安裝 Terraform。不同作業系統有不同的安裝方式,大家可以參考官網提供的安裝指南,這裡我會以 macOS 為例來分享安裝流程。

我選擇使用 Homebrew 來進行安裝。首先,我們需要安裝 HashiCorp tap:

brew tap hashicorp/tap

這個的好處是,讓你之後在下載相關工具時,可以直接連線到 HashiCorp 的官方倉庫,不僅能取得最新版本,同時也能確保安裝時的相容性最佳化。

再來就是安裝 Terraform 本人了!

brew install hashicorp/tap/terraform

驗證安裝

安裝成功後,我們來驗證一下是否可以正常的運作,在終端機中輸入 terraform version

https://ithelp.ithome.com.tw/upload/images/20250904/20166287LkdPsaT9Wr.png

這樣就代表 Terraform 已經在 mac 系統上安裝成功啦!

額外推薦

Terraform autocomplete

如果你平常使用 Bash 或 Zsh 作為終端機的 Shell,官方建議可以順便開啟 Terraform 命令的自動完成功能,這樣打指令會更方便!

首先確保你的 Shell 設定檔存在(以 Zsh 為例):

touch ~/.zshrc

然後安裝自動完成套件:

terraform -install-autocomplete

安裝完成後,記得重新啟動你的終端機或執行 source ~/.zshrc,這樣自動完成功能就生效囉!

版控工具 - tfenv

如果未來你需要維護多個專案,推薦可以使用 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 World 專案

環境都準備好之後,接著我們來試著創建一個專案,這邊我在本地先建立了一個名為 hello-terraform 的資料夾,並且在其中建立了 main.tf 檔案,而這隻檔案就是 Terraform 的主要檔案,這邊來看一下我嘗試配置了哪些內容:

第一部分 —— 定義 Terraform 的版本以及需要的 Provider:

https://ithelp.ithome.com.tw/upload/images/20250904/20166287KggdGcLUGF.png

這邊我配置了 Terraform 的版本要在 1.0 或以上的版本,並指定 Provider 的來源為 HashiCorp 官方維護的 local provider

第二部分 —— 資源定義,我定義了要在本機配置的資源,用來模擬雲端資源的配置:

https://ithelp.ithome.com.tw/upload/images/20250904/201662875Sae9IqyOc.png

這邊就是昨天我提到的 Resource 元件,而它的配置格式為 resource "資源類型" "資源名稱” ,以我的配置作為舉例:

  • local_file:資源類型,來自 local provider
  • hello_world:自定義的資源名稱(在 Terraform 內部引用用)

包含在大括號內的是資源屬性:

  • filename:指定要建立的檔案名稱
    • 相對路徑,會建立在執行 terraform apply 的目錄
  • content:檔案的內容。

第三部分 —— 配置輸出執行後的結果:

https://ithelp.ithome.com.tw/upload/images/20250904/20166287j2srV5rqNI.png

這裡使用到了第二個元件 Output,是用來定義執行完成後要顯示的資訊,description 是輸出值的說明文字,而 value 是要輸出的實際值。而這邊有試著用到幾個 Terraform 內建函數:timestamp(), abspath(), length() 。而關於 Terraform 元件格式以及內建函數可以參考官方文檔

💡 另外要特別提醒,通常我們會搭配 Git 來進行版本控制,儲存 Terraform 配置文件。這時候一定要記得配置好 .gitignore 來避免意外提交敏感檔案和狀態文件喔!


Terraform CLI 核心操作

現在我們就來試著操作 CLI 體驗一下 Terraform 的運作流程吧!(可以參考 **Day 02 - Terraform 如何運作!)**

第一步:terraform init(初始化)

terraform init

你會看到的輸出:

https://ithelp.ithome.com.tw/upload/images/20250904/201662875wdhKaNyu3.png

init 做了什麼?

  1. 建立 .terraform/ 資料夾
  2. 下載需要的 providers(這裡是 local provider)
  3. 建立 .terraform.lock.hcl 鎖定檔案
  4. 初始化 backend(本機狀態儲存)

檢查產生的檔案:

ls -la

# 你會看到:
# .terraform/
# .terraform.lock.hcl*

.terraform/.terraform.lock.hclterraform init 的標準產生,是為了確保 Provider 管理和版本一致性。

第二步:terraform plan(規劃)

terraform plan

你會看到的輸出:

https://ithelp.ithome.com.tw/upload/images/20250904/20166287lyNF3K6efp.png

如何讀懂 plan 輸出?

  • + 表示要新增的資源
  • - 表示要刪除的資源(這次沒有)
  • ~ 表示要修改的資源(這次沒有)
  • (known after apply) 表示執行後才會知道的值
  • Plan: 1 to add, 0 to change, 0 to destroy 是總結

第三步:terraform apply(執行)

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:

執行完成後的輸出:

https://ithelp.ithome.com.tw/upload/images/20250904/20166287DADueQ2S9E.png

驗證結果

檢查是否成功建立檔案:

*# 查看建立的檔案*
cat hello-terraform.txt

*# 檢查專案資料夾*
ls -la

你會看到:

  • hello-terraform.txt 檔案已建立:

https://ithelp.ithome.com.tw/upload/images/20250904/20166287y8EPBDPH2Q.png

  • terraform.tfstate 並產生了這隻檔案(這個明天會再詳細分享🤓)

第四步:terraform show(查看狀態)

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(清理)

當你想要清理所有資源時:

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 會自動處理「如何達成」。
  • 狀態管理:執行 terraform apply 後會自動產生 terraform.tfstate 檔案。
  • 版本鎖定.terraform.lock.hcl 這隻檔案是用來確保團隊協作時的一致性。
  • 安全考量:敏感檔案絕對不能提交到版本控制中喔!

雖然今天我們只是在本機操作簡單的檔案建立,但這個流程和未來管理雲端資源的方式是完全相同的!

🐈🐈🐈

明天我們要深入探討一個重要的主題:terraform.tfstate 狀態檔案的作用

前面的文章也有提到狀態管理是 Terraform 的核心概念,掌握好狀態檔案的原理,才能真正理解 Terraform 的運作邏輯!~🤓


上一篇
Day 03 - Terraform 核心元件!
系列文
30 天 Terraform 學習筆記:從零開始的 IaC 實戰4
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言