前言
Terraform 是由 HashiCorp 開發的開源基礎設施即程式碼(Infrastructure as Code, IaC)工具。它允許開發者和維運團隊使用宣告式的設定語言(HCL - HashiCorp Configuration Language)來定義、預覽和部署雲端基礎設施。
- 多雲端支援:支援 AWS、Azure、GCP、阿里雲等主流雲端平台,以及 Kubernetes、Docker 等容器平台
- 宣告式語法:只需描述期望的最終狀態,Terraform 會自動計算達成目標所需的步驟
- 狀態管理:透過狀態檔案追蹤基礎設施的實際狀態,確保配置與實際環境同步
- 模組化設計:可將常用配置封裝成模組,提高程式碼重用性
- 執行計畫:在實際變更前預覽將要執行的操作,降低風險
- 版本控制友善:配置檔案為純文字格式,易於使用 Git 等版本控制系統管理
安裝方式
以下介紹三種在 Ubuntu 22.04 上安裝 Terraform 的方式。
方式一:透過 HashiCorp 官方 APT 倉庫安裝(推薦)
這是官方推薦的安裝方式,可以方便地透過 apt 進行版本升級。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| # 安裝必要的套件
sudo apt-get update
sudo apt-get install -y gnupg software-properties-common curl
# 新增 HashiCorp GPG 金鑰
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
# 驗證金鑰指紋
gpg --no-default-keyring \
--keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg \
--fingerprint
# 新增官方 APT 倉庫
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/hashicorp.list
# 更新並安裝 Terraform
sudo apt-get update
sudo apt-get install -y terraform
|
方式二:手動下載二進位檔案
適合需要特定版本或離線環境的情況。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # 設定要安裝的版本
TERRAFORM_VERSION="1.7.0"
# 下載 Terraform
wget https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_amd64.zip
# 解壓縮
unzip terraform_${TERRAFORM_VERSION}_linux_amd64.zip
# 移動到系統路徑
sudo mv terraform /usr/local/bin/
# 清理下載的檔案
rm terraform_${TERRAFORM_VERSION}_linux_amd64.zip
# 驗證安裝
terraform version
|
方式三:使用 tfenv 版本管理工具(推薦進階使用者)
tfenv 是一個類似 nvm、pyenv 的 Terraform 版本管理工具,適合需要在多個專案間切換不同 Terraform 版本的使用者。
1
2
3
4
5
6
7
8
9
10
| # 安裝 tfenv
git clone https://github.com/tfutils/tfenv.git ~/.tfenv
# 將 tfenv 加入 PATH(bash 使用者)
echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
# 或 zsh 使用者
echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
|
版本驗證與升級
驗證安裝
1
2
3
4
5
6
| # 查看版本資訊
terraform version
# 輸出範例:
# Terraform v1.7.0
# on linux_amd64
|
透過 APT 倉庫升級
1
2
| sudo apt-get update
sudo apt-get upgrade terraform
|
手動升級
重複「方式二」的步驟,下載新版本並覆蓋舊的二進位檔案。
tfenv 版本管理工具詳解
tfenv 是管理多個 Terraform 版本的最佳工具,以下是常用操作:
列出可用版本
1
2
3
4
5
| # 列出遠端所有可用版本
tfenv list-remote
# 列出本地已安裝的版本
tfenv list
|
安裝與切換版本
1
2
3
4
5
6
7
8
9
10
11
12
| # 安裝最新版本
tfenv install latest
# 安裝特定版本
tfenv install 1.7.0
tfenv install 1.6.6
# 設定全域使用的版本
tfenv use 1.7.0
# 驗證當前版本
terraform version
|
專案級版本控制
在專案根目錄建立 .terraform-version 檔案,tfenv 會自動切換到指定版本:
1
2
3
4
5
6
| # 建立版本檔案
echo "1.7.0" > .terraform-version
# 進入該目錄時,tfenv 會自動使用指定版本
cd your-project/
terraform version
|
基本設定
啟用命令列自動補全
Terraform 提供 Tab 自動補全功能,可大幅提升操作效率。
Bash 使用者
1
2
3
4
| terraform -install-autocomplete
# 或手動新增
echo 'complete -C /usr/bin/terraform terraform' >> ~/.bashrc
source ~/.bashrc
|
Zsh 使用者
1
2
3
4
5
| terraform -install-autocomplete
# 或手動新增
echo 'autoload -U +X bashcompinit && bashcompinit' >> ~/.zshrc
echo 'complete -C /usr/bin/terraform terraform' >> ~/.zshrc
source ~/.zshrc
|
設定插件快取
Terraform 會為每個專案下載 Provider 插件,設定快取可以節省下載時間和磁碟空間。
1
2
3
4
5
6
7
8
| # 建立插件快取目錄
mkdir -p ~/.terraform.d/plugin-cache
# 建立 Terraform CLI 設定檔
cat > ~/.terraformrc << 'EOF'
plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"
disable_checkpoint = true
EOF
|
常用環境變數
1
2
3
4
5
6
7
8
9
10
11
12
13
| # 將以下內容加入 ~/.bashrc 或 ~/.zshrc
# 啟用詳細日誌(除錯用)
# export TF_LOG=DEBUG
# 設定日誌輸出檔案
# export TF_LOG_PATH="./terraform.log"
# 自動核准(謹慎使用)
# export TF_CLI_ARGS_apply="-auto-approve"
# 設定輸入變數
# export TF_VAR_region="ap-northeast-1"
|
讓我們建立一個簡單的專案來驗證 Terraform 是否正確安裝。
建立專案目錄
1
2
| mkdir ~/terraform-demo
cd ~/terraform-demo
|
建立主設定檔
建立 main.tf 檔案:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| # 設定 Terraform 版本需求
terraform {
required_version = ">= 1.0.0"
required_providers {
local = {
source = "hashicorp/local"
version = "~> 2.0"
}
}
}
# 使用 local provider 建立一個本地檔案
resource "local_file" "hello" {
content = "Hello, Terraform!\n建立時間:${timestamp()}"
filename = "${path.module}/hello.txt"
}
# 輸出檔案路徑
output "file_path" {
value = local_file.hello.filename
description = "建立的檔案路徑"
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 初始化專案(下載 Provider)
terraform init
# 預覽變更
terraform plan
# 套用變更
terraform apply
# 輸入 yes 確認後,查看結果
cat hello.txt
# 清理資源
terraform destroy
|
執行結果說明
terraform init:初始化工作目錄,下載所需的 Provider 插件terraform plan:顯示將要執行的變更,不會實際修改任何資源terraform apply:實際建立或修改資源terraform destroy:移除所有由 Terraform 管理的資源
常見問題排除
問題一:GPG 金鑰錯誤
錯誤訊息:
1
| E: The repository 'https://apt.releases.hashicorp.com jammy InRelease' is not signed.
|
解決方案:
1
2
3
| # 重新下載並安裝 GPG 金鑰
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg --yes
sudo apt-get update
|
問題二:權限不足
錯誤訊息:
1
| Error: Failed to install provider
|
解決方案:
1
2
3
| # 確保插件目錄有正確權限
mkdir -p ~/.terraform.d/plugins
chmod -R 755 ~/.terraform.d/
|
問題三:版本不相容
錯誤訊息:
1
| Error: Unsupported Terraform Core version
|
解決方案:
1
2
3
| # 使用 tfenv 安裝專案要求的版本
tfenv install <required_version>
tfenv use <required_version>
|
問題四:Provider 下載緩慢
解決方案:
1
2
3
4
5
6
| # 設定插件快取
mkdir -p ~/.terraform.d/plugin-cache
echo 'plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"' > ~/.terraformrc
# 或使用國內鏡像(如有需要)
export TF_CLI_CONFIG_FILE=~/.terraformrc
|
問題五:狀態檔案鎖定
錯誤訊息:
1
| Error: Error acquiring the state lock
|
解決方案:
1
2
| # 強制解鎖(確認沒有其他人在操作時使用)
terraform force-unlock <LOCK_ID>
|
下一步學習
成功安裝 Terraform 後,建議繼續學習:
- Terraform 語法基礎:HCL 語言、變數、輸出、資料來源
- 狀態管理:Remote State、State Locking
- 模組開發:建立可重用的模組
- 工作流程:搭配 CI/CD 實現 GitOps
參考資源