1. 什麼是 OpenTofu?

OpenTofu 是一個開源的基礎設施即代碼(Infrastructure as Code, IaC)工具。它是 Terraform 的一個社群分支(Fork),允許你使用宣告式的設定檔(.tf 檔案)來定義和管理雲端資源(如 AWS, Azure, GCP 等)。


2. 安裝方式 (Installation)

這裡提供兩種方式:推薦的「套件管理器方式」和原有的「手動腳本方式」。

方式一:使用套件管理器(推薦)

使用套件管理器是管理 OpenTofu 版本最簡單、最安全的方法,因為它可以自動處理更新和路徑設定。

macOS (使用 Homebrew)

如果你有安裝 Homebrew,只需要一行指令:

Bash

 
brew install opentofu

Linux (Debian/Ubuntu)

OpenTofu 提供了官方的 APT 儲存庫。請依序執行以下指令:

Bash

 
# 1. 安裝必要的依賴
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg

# 2. 下載 OpenTofu 的 GPG 金鑰
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://get.opentofu.org/opentofu.gpg | sudo tee /etc/apt/keyrings/opentofu.gpg >/dev/null
sudo chmod a+r /etc/apt/keyrings/opentofu.gpg

# 3. 新增 OpenTofu 儲存庫
echo \
  "deb [signed-by=/etc/apt/keyrings/opentofu.gpg] https://packages.opentofu.org/opentofu/tofu/any/ any main" | \
  sudo tee /etc/apt/sources.list.d/opentofu.list > /dev/null

# 4. 更新並安裝
sudo apt-get update
sudo apt-get install -y tofu

(其他 Linux 發行版如 RHEL/CentOS/Fedora 的安裝方式請參考 OpenTofu 官方文件)


方式二:手動腳本安裝(更新版)

你原本提供的腳本使用的是非常舊的 alpha 版本。以下是更新後的腳本,改用較新的穩定版本,並使用在 macOS 上更常見的 curl 來替代 wget

注意: 手動下載二進制檔案存在一定風險。在生產環境中,建議下載後驗證 SHA256 校驗和(此腳本為求簡化省略了驗證步驟)。

新增 tofu_install.sh 腳本檔:

Bash

 
#!/bin/sh
set -e

# --- 設定 ---
# 請注意:這裡改用穩定版本,而非 alpha 版。
# 你可以在 https://github.com/opentofu/opentofu/releases 查看最新版本
TOFU_VERSION="1.6.2"
# 自動偵測 OS 和架構
OS="$(uname | tr '[:upper:]' '[:lower:]')"
ARCH="$(uname -m | sed -e 's/aarch64/arm64/' -e 's/x86_64/amd64/')"
# 定義下載 URL
DOWNLOAD_URL="https://github.com/opentofu/opentofu/releases/download/v${TOFU_VERSION}/tofu_${TOFU_VERSION}_${OS}_${ARCH}.zip"
TEMPDIR="$(mktemp -d)"
echo "準備安裝 OpenTofu v${TOFU_VERSION} for ${OS}/${ARCH}..."
# --- 檢查必要工具 ---
if ! command -v curl >/dev/null 2>&1; then
    echo "錯誤: 找不到 'curl'。請先安裝 curl。"
    exit 1
fi
if ! command -v unzip >/dev/null 2>&1; then
    echo "錯誤: 找不到 'unzip'。請先安裝 unzip。"
    exit 1
fi
# --- 執行安裝 ---
pushd "${TEMPDIR}" >/dev/null

echo "正在下載: ${DOWNLOAD_URL}"
# 使用 curl 下載 (-L 跟隨重定向, -O 輸出到檔案)
curl -L -O "${DOWNLOAD_URL}"
echo "正在解壓縮..."
unzip -o "tofu_${TOFU_VERSION}_${OS}_${ARCH}.zip"
echo "正在移動二進制檔案到 /usr/local/bin (需要 sudo 權限)..."
# 確保 /usr/local/bin 存在
if [ ! -d "/usr/local/bin" ]; then
    sudo mkdir -p /usr/local/bin
fi
sudo mv tofu /usr/local/bin/tofu
sudo chmod +x /usr/local/bin/tofu

popd >/dev/null
rm -rf "${TEMPDIR}"
echo ""
echo "=== 安裝成功 ==="
echo "OpenTofu 已安裝於 /usr/local/bin/tofu。"
# 驗證安裝
tofu version

執行腳本:

Bash

 
chmod +x tofu_install.sh
./tofu_install.sh

驗證安裝

無論使用哪種方式安裝,安裝完成後,請在終端機輸入以下指令確認:

Bash

 
tofu version

你應該會看到類似 OpenTofu v1.6.2 的版本資訊。


3. OpenTofu 標準工作流程與指令詳解

OpenTofu 的使用通常遵循一個標準的週期。假設你已經編寫了一個 main.tf 檔案。

階段一:準備與檢查程式碼

在執行任何操作之前,先確保你的代碼是整潔且語法正確的。

1. 格式化程式碼 (Format)

自動將你的 .tf 檔案格式化為標準樣式(修正縮排、空格等)。這在團隊協作中非常重要。

Bash

 
tofu fmt
  • 提示:加上 -recursive 參數可以格式化當前目錄及所有子目錄下的檔案。

2. 驗證語法 (Validate)

檢查你的設定檔是否存在語法錯誤或內部一致性問題。它不會連接到雲端提供商,只進行靜態分析。

Bash

 
tofu validate
  • 如果成功,會顯示 Success! The configuration is valid.

階段二:初始化

3. 初始化工作目錄 (Init)

這是使用 OpenTofu 的第一步。它會讀取你的設定檔,並下載所需的「提供者插件 (Provider Plugins)」(例如 AWS、Azure 的驅動程式)以及任何引用的模組。

Bash

 
tofu init
  • 必須在含有 .tf 檔案的目錄中執行此指令。

  • 如果後續修改了提供者版本或新增了模組,需要重新執行此指令。

階段三:預覽與執行

4. 執行前預覽計畫 (Plan)

這是最重要的指令之一。它會比較你寫的程式碼與實際雲端環境目前的狀態,然後列出 OpenTofu 打算做什麼變更(新增、修改或刪除資源)。

強烈建議在執行 apply 之前一定要先看過 plan 的結果。

Bash

 
tofu plan
  • 輸出結果會用 + 表示新增,~ 表示修改,- 表示刪除。

  • 你可以將計畫儲存到檔案: tofu plan -out=tfplan

5. 執行部署 (Apply) (補充你漏掉的部分)

實際執行在 plan 階段預覽的變更,開始在雲端建立或修改資源。

Bash

 
tofu apply
  • 執行後,它會再次顯示計畫,並要求你輸入 yes 確認才真正開始執行。

  • 自動確認(請謹慎使用): 如果你已經在 CI/CD 流程中確認過計畫,可以使用 -auto-approve 跳過確認提示:

    Bash

     
    tofu apply -auto-approve
    
  • 如果之前有儲存計畫檔案: tofu apply tfplan

階段四:清理與查詢

6. 查看輸出變數 (Output)

如果在你的 .tf 檔案中有定義 output 區塊(例如:印出新建 EC2 的 IP 位址),可以使用此指令查看。

Bash

 
tofu output

7. 銷毀資源 (Destroy)

危險指令! 此指令會刪除你目前設定檔中定義的所有資源。通常用於測試環境的清理。

Bash

 
tofu destroy
  • 它也會先顯示預覽計畫,並要求輸入 yes 確認。


總結:一個典型的操作順序

當你寫好一個新的 OpenTofu 專案時,你通常會依序執行:

  1. tofu fmt (整理程式碼)

  2. tofu init (下載插件)

  3. tofu validate (確認沒寫錯字)

  4. tofu plan (看看會發生什麼事)

  5. tofu apply (確認無誤,執行!)

 

By tony

自由軟體愛好者~喜歡不斷的思考各種問題,有新的事物都會想去學習嘗試 做實驗並熱衷研究 沒有所謂頂天的技術 只有謙虛及不斷的學習 精進專業,本站主要以分享系統及網路相關知識、資源而建立。 Github http://stnet253.github.io

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料