Ubuntu 26.04 をサーバー管理やインフラ管理の作業端末として使う場合、Ansible だけでなく Terraform を使う場面があります。Ansible が主に OS 内部の状態や設定ファイルを扱うのに対し、Terraform は基盤リソースを宣言的に管理するための道具です。
この記事では、Ubuntu 26.04 に Terraform CLI を導入し、terraform version、provider、backend、state、Ansible との責務分離を整理します。サーバーそのものの設定手順ではなく、IaC を実行するための管理端末側の土台を作る記事です。
Terraform は何を管理する道具か
Terraform は、設定ファイルに書いた望ましい状態に基づいて、クラウド、DNS、ロードバランサ、ネットワーク、仮想マシン、SaaS などのリソースを作成・変更・削除するための CLI です。重要なのは、Terraform が「サーバー内の設定変更ツール」ではなく、外部リソースや基盤リソースの状態管理を得意とする点です。
| 領域 | 向いているもの |
|---|---|
| Terraform | クラウドリソース、DNS、ネットワーク、VM、ロードバランサ、SaaS 設定などの宣言的管理 |
| Ansible | OS 内部のパッケージ、設定ファイル、systemd、ユーザー、証明書配置など |
| 手動操作 | 初回検証や緊急対応。ただし恒常化するならコード化する |
| shell script | 単純な手順の自動化。状態管理や差分把握は弱い |
CPU architecture を確認する
Terraform の公式 release archive は OS と CPU architecture ごとに分かれています。Ubuntu 26.04 を x86_64 で動かしているのか、arm64 / aarch64 で動かしているのかを先に確認します。
uname -m
dpkg --print-architecturex86_64 / amd64 であれば amd64、aarch64 / arm64 であれば arm64 の archive を選びます。アーキテクチャを間違えると、展開できても実行できません。
Terraform を /usr/local/bin に導入する
ここでは Terraform の release archive を取得し、/usr/local/bin/terraform として配置します。apt repository を使う方法もありますが、特定バージョンを固定して管理したい場合は、公式 release archive を明示的に配置する方法が分かりやすいです。
terraform_version=1.14.9
terraform_arch=arm64
sudo mkdir -p /usr/local/src/terraform /usr/local/bin
curl -fsSL -o /tmp/terraform.zip "https://releases.hashicorp.com/terraform/${terraform_version}/terraform_${terraform_version}_linux_${terraform_arch}.zip"
sudo install -o root -g root -m 0644 /tmp/terraform.zip /usr/local/src/terraform/terraform_${terraform_version}_linux_${terraform_arch}.zip
sudo unzip -o /usr/local/src/terraform/terraform_${terraform_version}_linux_${terraform_arch}.zip -d /usr/local/bin
sudo chown root:root /usr/local/bin/terraform
sudo chmod 0755 /usr/local/bin/terraformterraform_arch は自分の環境に合わせます。x86_64 / amd64 環境なら amd64、arm64 / aarch64 環境なら arm64 を使います。
インストール結果を確認する
導入後は、実行できることと、期待したバージョンであることを確認します。Terraform は version -json で機械的に確認しやすい出力を返せます。
terraform version
terraform version -json
which terraform複数の Terraform を入れている場合、PATH の順序によって別の binary が使われることがあります。which terraform と terraform version を合わせて確認します。
最小構成で terraform init を確認する
Terraform CLI が動くことを確認するには、最小構成の main.tf を作り、terraform init を実行します。provider を使う場合、init 時に provider plugin が取得されます。
terraform {
required_version = ">= 1.14.0"
required_providers {
local = {
source = "hashicorp/local"
version = "~> 2.5"
}
}
}
resource "local_file" "example" {
filename = "example.txt"
content = "hello terraform"
}mkdir -p ~/terraform-test
cd ~/terraform-test
terraform init
terraform planこの段階では、実際のクラウド認証情報や本番 backend は使わず、Terraform CLI、provider 取得、設定ファイルの読み込みができることだけを確認します。
state と backend を軽く理解する
Terraform で特に重要なのは state です。Terraform は、実際のリソースと設定ファイルの対応関係を state に記録します。state を雑に扱うと、何を Terraform が管理しているのか分からなくなります。
| 項目 | 意味 |
|---|---|
| state | Terraform が管理しているリソース状態の記録 |
| backend | state をどこに保存するかの設定 |
| local backend | ローカルファイルとして state を保存する。検証向き |
| remote backend | S3、Terraform Cloud などに state を保存する。チーム運用向き |
| lock | 同時実行による state 破壊を防ぐ仕組み |
検証では local state でも十分ですが、チーム運用や本番基盤では remote backend と locking を検討します。state には機密情報が含まれることもあるため、Git にそのまま入れる運用は避けるべきです。
Ansible との責務分離
Terraform と Ansible は、どちらも自動化や IaC の文脈で語られますが、得意な対象が違います。Terraform で VM やネットワークを作り、Ansible で OS 内部を設定する、という分担は分かりやすい構成です。
| 作業 | 向いている道具 |
|---|---|
| VM、Subnet、Security Group、DNS record の作成 | Terraform |
| OS パッケージ、設定ファイル、systemd の管理 | Ansible |
| 証明書ファイルの配置、ユーザー作成、ログ設定 | Ansible |
| クラウド IAM、ロードバランサ、外部 DNS の宣言的管理 | Terraform |
| Kubernetes 上の manifest 適用 | kubectl、Helm、Terraform provider、Ansible collection など設計次第 |
境界が曖昧なまま両方から同じリソースを触ると、どちらが正なのか分からなくなります。Terraform が管理する範囲、Ansible が管理する範囲、手動で触ってよい範囲を分けておくことが重要です。
運用上の注意点
| 項目 | 注意点 |
|---|---|
| バージョン固定 | 実行環境ごとの差を減らすため、Terraform のバージョンを明示する |
| provider | 必要な provider と version constraint を明示する |
| state | Git に雑に置かず、保存先とアクセス権を決める |
| backend | チーム運用では remote backend と lock を検討する |
| 認証情報 | 環境変数、credential file、Secret 管理を分けて扱う |
| 責務分離 | Terraform と Ansible で同じ対象を二重管理しない |
まとめ
Ubuntu 26.04 に Terraform を導入する場合、単に CLI を置くだけでなく、バージョン、CPU architecture、PATH、provider、state、backend の扱いを整理しておく必要があります。
Terraform は、サーバー内部を細かく設定する道具というより、基盤リソースを宣言的に管理するための道具です。Ansible と役割を分け、Terraform が管理する範囲と state の責任を明確にしておくことで、IaC 実行環境として安定して使いやすくなります。
Ubuntu Server の運用項目を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。



