在Ubuntu 22.04上安裝Terraform

Ubuntu 22.04 Terraform Install

前言

Terraform 是由 HashiCorp 開發的開源基礎設施即程式碼(Infrastructure as Code, IaC)工具。它允許開發者和維運團隊使用宣告式的設定語言(HCL - HashiCorp Configuration Language)來定義、預覽和部署雲端基礎設施。

Terraform 的核心優勢

  • 多雲端支援:支援 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

升級 Terraform

透過 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 專案

讓我們建立一個簡單的專案來驗證 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 = "建立的檔案路徑"
}

執行 Terraform

 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

執行結果說明

  1. terraform init:初始化工作目錄,下載所需的 Provider 插件
  2. terraform plan:顯示將要執行的變更,不會實際修改任何資源
  3. terraform apply:實際建立或修改資源
  4. 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 後,建議繼續學習:

  1. Terraform 語法基礎:HCL 語言、變數、輸出、資料來源
  2. 狀態管理:Remote State、State Locking
  3. 模組開發:建立可重用的模組
  4. 工作流程:搭配 CI/CD 實現 GitOps

參考資源

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy