Terraform
HashiCorp の IaC ツールで、マルチクラウドのインフラをコードで宣言的に管理する
Terraform とは
Terraform は、HashiCorp が開発した IaC (Infrastructure as Code) ツールで、AWS、Azure、GCP などマルチクラウドのインフラを HCL (HashiCorp Configuration Language) で宣言的に管理する。
SAM / CloudFormation との比較
両者の差は、状態を誰が持つかという 1 点に集約される。Terraform は自分で状態ファイルを抱え、CloudFormation はサービス側がスタックとして保持する。ここから、権限設計 / 失敗時の巻き戻しの手当て / 対応できるクラウドの範囲が分かれていく。
| 観点 | Terraform | SAM / CloudFormation |
|---|---|---|
| 対象 | マルチクラウド | AWS のみ |
| 言語 | HCL | YAML / JSON |
| 状態管理 | tfstate ファイル | CloudFormation が管理 |
| サーバーレス | 汎用 | Lambda に特化 |
| ドリフト検出 | terraform plan | CloudFormation ドリフト検出 |
基本的な使い方
記述の単位は、接続先を決める provider と、作りたいものを 1 つずつ宣言する resource の 2 つだ。resource に付けるラベル (下の例の data や users) は設定ファイル内での参照名で、実際に作られるリソースの名前とは別物である。
# main.tf
provider "aws" {
region = "ap-northeast-1"
}
resource "aws_s3_bucket" "data" {
bucket = "my-data-bucket"
}
resource "aws_dynamodb_table" "users" {
name = "users"
billing_mode = "PAY_PER_REQUEST"
hash_key = "id"
attribute {
name = "id"
type = "S"
}
}
コマンド
役割分担は明確で、init で必要なプロバイダーを取り込み、plan で宣言と実体の差分を確認し、apply でその差分だけを適用する。plan を読まずに apply する運用は、意図しない再作成を見落とす最短経路になる。
terraform init # プロバイダーのダウンロード
terraform plan # 変更内容のプレビュー
terraform apply # インフラの作成・更新
terraform destroy # インフラの削除
State (状態管理)
Terraform は terraform.tfstate ファイルに前回の実行結果を記録し、これと設定ファイルの宣言を突き合わせて差分を出す。実体を毎回すべて調べ直すわけではないため、この記録が壊れると差分の計算そのものが狂う。チーム開発では共有ストレージに置き、同時実行を防ぐロックと組み合わせて使う。
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "prod/terraform.tfstate"
region = "ap-northeast-1"
use_lockfile = true # S3 上のロックファイルで排他を取る
encrypt = true
}
}
排他の取り方は S3 側の機能に寄せる形へ移っており、2026 年 8 月時点の公式ドキュメントは DynamoDB による方式を非推奨とし、将来のマイナーバージョンでの削除を予告している。移行期は両方を同時に設定できる。ロックと差分計算の詳しい仕組みは terraform-state の項で扱う。
モジュール
共通の構成はモジュールとして切り出して再利用する。外部モジュールを使うときは version を固定するのが要点で、省略すると取得した時点の最新が入り、同じ設定ファイルから別の結果が生まれる。
module "vpc" {
source = "terraform-aws-modules/vpc/aws"
version = "5.0.0"
name = "my-vpc"
cidr = "10.0.0.0/16"
azs = ["ap-northeast-1a", "ap-northeast-1c"]
}
AWS での使い分け
判断軸は、対象が AWS に収まるか、状態ファイルの管理を自分で引き受けるか、既存の資産がどちらに寄っているかの 3 点になる。
| ケース | 推奨 |
|---|---|
| Lambda + API Gateway | SAM (サーバーレスに特化) |
| VPC + RDS + ECS | Terraform (汎用) |
| マルチクラウド | Terraform |
| AWS のみ、シンプル | CloudFormation / SAM |
ライセンスと派生
Terraform 本体のライセンスは 2023 年 8 月に変更され、1.6.0 以降は Business Source License 1.1 (BUSL 1.1) が適用される。自社のインフラを管理する通常の利用は制限の対象外で、制限されるのは有償版と競合する形でホスティング / 組み込み提供することだ。公開から 4 年が経った版は Mozilla Public License 2.0 へ切り替わる条項が付いており、ライセンス文に権利者 (Licensor) として記載されているのは 2026 年 8 月時点で IBM である。
この変更を契機に、同じ 2023 年 8 月に派生 (fork) が公開され、OpenTofu として Linux Foundation の管理下で開発が続いている。ライセンスは MPL 2.0 のままで、既存の設定をほぼそのまま使える代替という位置づけだ。2026 年 8 月時点では Terraform が 1.15 系、OpenTofu が 1.12 系にあり、どちらを選ぶかはライセンス条項の可否と、使っているモジュール / プロバイダーの対応状況で判断する。
この記事は役に立ちましたか?