內容目錄
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 專案時,你通常會依序執行:
-
tofu fmt(整理程式碼) -
tofu init(下載插件) -
tofu validate(確認沒寫錯字) -
tofu plan(看看會發生什麼事) -
tofu apply(確認無誤,執行!)