開発プロセス

Terraform てらふぉーむ

IaCクラウドインフラHCLHashiCorpマルチクラウドプロビジョニング
Terraformって何?

簡単に言うとこんな感じ!

AWSやGCPなどのクラウドに「サーバーをこう作って、ネットワークをこう設定して」というインフラ構成を、テキストファイルに書いて自動で作ってくれるツールだよ。クラウドの「設計図を書けば全部やってくれる建設業者」みたいなイメージ!AWSもGCPもAzureも1つのツールで管理できるのが強みなんだ。


Terraformとは

Terraformとは、HashiCorpが2014年に公開したクラウドインフラをコードで宣言的に管理するIaCツールです。AWS・GCP・Azure・Alibaba Cloudなど700以上のプロバイダーに対応し、1つのツールでマルチクラウド・マルチサービスのリソース管理が可能です。設定ファイルはHCL(HashiCorp Configuration Language)という独自のDSL(ドメイン固有言語)で記述します。

Terraformの核心は状態管理(State)です。terraform.tfstateというJSONファイルに現在のインフラ状態を記録し、次の実行時にコードと差分を比較します。terraform planコマンドで「何が変わるか」を事前に確認でき、terraform applyで実際に変更を適用します。状態ファイルはS3やTerraform Cloudなどのリモートバックエンドで管理するのが本番運用の標準です。

2023年にHashiCorpがTerraformのライセンスをBSLに変更したため、OSSフォークのOpenTOFUがLinux Foundation傘下のCNCFに誕生しました。エンタープライズ向けには有料のTerraform Cloud / HCP Terraformが提供されています。


Terraformの主要コマンドと概念

コマンド / 概念説明
terraform initプロバイダープラグインのダウンロード・初期化
terraform plan現状との差分を表示(何が作られ・変更され・削除されるか)
terraform applyplanの変更を実際に適用する
terraform destroy管理するインフラを全て削除する
State(状態)現在のインフラ状態を記録したJSONファイル
ProviderAWS・GCPなど各クラウドのAPIを叩くプラグイン
Module再利用可能なリソース定義のまとまり
Workspace同一コードで複数環境(dev/stg/prod)を管理する機能

歴史と背景

  • 2014年:HashiCorpがTerraform 0.1をOSS公開。Puppetなどのコンフィグ管理ツールとは異なるインフラプロビジョニングに特化
  • 2017年:Terraform 0.10でプロバイダーを分離。600以上のプロバイダーが登場するエコシステムが形成
  • 2021年:Terraform 1.0リリース。後方互換性保証・本番利用が加速
  • 2023年8月:HashiCorpがライセンスをMPL(Mozilla Public License)からBSL(Business Source License)に変更。商用利用への懸念が広まる
  • 2023年9月:OpenTOFUがTerraformのMPLフォークとしてLinux Foundation傘下で発足
  • 2024年:HashiCorpがIBMに買収。TerraformはHCP Terraformとして継続

Terraformの実行フロー

Terraformの実行フロー .tf ファイル HCLで記述した インフラ定義 terraform plan 差分を表示(変更なし) terraform apply 実際に変更を適用 State 更新 tfstate更新 クラウド リソース 作成・更新 現在のState (tfstate)と比較 planで差分確認 → applyで適用 → stateが更新される

関連する規格・RFC

規格・RFC番号内容
OpenTOFUTerraform MPL 1.5フォークのOSS実装(Linux Foundation / CNCF Sandbox)
Terraform RegistryHashiCorpが運営するProviderとModuleの公開レジストリ

関連用語

  • IaC(Infrastructure as Code) — Terraformが代表するインフラをコードで管理するアプローチ
  • Ansible — サーバー設定管理に強いIaCツール。Terraformとの役割分担で使われることも
  • GitOps — TerraformのコードをGitで管理し、パイプラインで自動適用する運用手法
  • CI/CDパイプライン — terraform plan/applyをパイプラインで自動実行する
  • Kubernetes — TerraformのKubernetesプロバイダーでクラスター自体を管理できる
  • Docker — Terraformがプロビジョニングしたインフラ上でDockerコンテナが動く
  • SRE — インフラの再現性・変更管理にTerraformを活用するSREの実践