IaC

Terraform てらふぉーむ

Infrastructure as CodeHashiCorpHCLプロビジョニングクラウド自動化状態管理
Terraformについて教えて

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

クラウド上のサーバーやネットワークを「設計図(コード)」で管理できるツールだよ!「サーバー3台・DBはこのスペックで」って書いておくだけで、自動でまとめてドカッと作ってくれるんだ。手作業ゼロで環境構築できちゃうってこと!


Terraformとは

Terraform(テラフォーム) は、HashiCorp社が開発したオープンソースの Infrastructure as Code(IaC ツールです。クラウドやオンプレミス環境のインフラ構成を、HCL(HashiCorp Configuration Language) というコード形式で定義し、自動的に構築・変更・削除できます。

AWSのEC2インスタンスを何台立てるか、どのVPCに入れるか、DBの設定はどうするか——そういった「インフラの設計図」をすべてテキストファイルで管理できるため、Gitなどのバージョン管理システムと組み合わせることで変更履歴を追跡したり、チームでレビューしたりすることが可能です。手動でコンソールをポチポチ操作する必要がなくなります。

特徴的なのは マルチクラウド対応 で、AWS・Azure・Google Cloudをはじめ、1000以上のサービス(プロバイダー)に対応しています。1つのツールを覚えるだけで複数のクラウドを同じ方法で操作できるため、ベンダー依存を避けたい企業に特に支持されています。


Terraformの仕組みと構造

Terraformは大きく3つのステップで動きます。

ステップコマンド内容
① 初期化terraform initプロバイダー(AWS等)のプラグインをダウンロード
② 計画terraform plan現状と設計図を比較し、何が変わるか確認
③ 適用terraform apply実際にインフラを構築・変更する
(破棄)terraform destroy作ったインフラをまとめて削除する

HCLコードの例

# AWSにEC2インスタンスを1台作る例
resource "aws_instance" "web" {
  ami           = "ami-0abcdef1234567890"
  instance_type = "t3.micro"

  tags = {
    Name = "MyWebServer"
  }
}

これだけ書いて terraform apply を実行すれば、AWSにサーバーが1台できあがります。

状態ファイル(tfstate)とは

Terraformは「今の現実のインフラ」を tfstate(ステートファイル) と呼ばれるJSONファイルに記録しています。次回 plan するとき、このファイルと設計図を比べて「差分だけ」変更するため、無駄な再作成が起きません。チームで使う場合は S3やTerraform Cloudなどにステートを共有することが必須です。

覚え方:「計画してから動く」

plan → apply の2ステップを守るのがTerraformの鉄則!
「設計図を見せてから、OKをもらって実行する」という順序を忘れずに。


歴史と背景

  • 2014年 — HashiCorpがTerraformをオープンソースとして公開。当時はAWSなど一部クラウドのみ対応
  • 2017年頃 — AWSやGCPの普及とともにIaCへの関心が急上昇。Terraformが事実上の標準ツールとして広まる
  • 2019年Terraform Cloudリリース。チーム向けのステート管理・ワークフロー機能を提供
  • 2020年 — プロバイダー数が1000超に。オンプレ・SaaS・DNSなど多様なサービスを管理可能に
  • 2023年 — HashiCorpがライセンスをMPL 2.0から BSL(Business Source License) へ変更。商用利用に条件が付いたことでコミュニティが反発し、フォーク版 OpenTofu が誕生
  • 2024年 — OpenTofuがLinux Foundationのプロジェクトとして正式リリース。Terraformと並立する存在に

類似ツールとの比較

Terraformと同じIaCカテゴリのツールはいくつかあります。

ツール開発元言語特徴
TerraformHashiCorpHCLマルチクラウド対応・宣言型
AWS CloudFormationAWSYAML/JSONAWSのみ・無料・ネイティブ連携
PulumiPulumi CorpPython/TS/Go等汎用プログラミング言語で書ける
AnsibleRed HatYAML構成管理寄り・手続き型
CDKAWSTypeScript/Python等CloudFormationを生成するラッパー
Terraformの動作フロー 設計ファイル *.tf(HCL) terraform init プラグイン取得 terraform plan 差分確認 terraform apply インフラ構築 tfstateファイル 現在の状態を記録 差分比較 AWS クラウドリソース Azure / GCP クラウドリソース その他プロバイダー 1000+対応 Providerプラグイン経由

「宣言型」vs「手続き型」

Terraformは 宣言型(Declarative) アプローチをとります。「どうやって作るか」ではなく「どんな状態にしたいか」を書くスタイルです。

手続き型(Ansible的): 「サーバーを起動して → パッケージを入れて → 設定ファイルを書いて...」
宣言型(Terraform的): 「サーバーが起動していてパッケージが入っている状態にして」

「最終的にこうなっていればいい」と書くだけで、Terraformが現状との差分を計算して必要な操作をしてくれます。


関連する規格・RFC

※ Terraformは特定のIETF RFC・ISOに直接対応する標準規格ではなく、HashiCorpが仕様を公開するプロプライエタリな言語(HCL)とツールです。関連する公開仕様は以下を参照してください。

仕様・ドキュメント内容
HashiCorp HCL仕様HCLの文法・パーサー仕様(GitHub公開)
Terraform Provider Protocolプロバイダー開発のプロトコル仕様
OpenTofu仕様Terraformフォーク版の公開仕様

関連用語

  • Infrastructure as Code — インフラ構成をコードで管理する考え方・手法全般
  • AWS CloudFormation — AWSネイティブのIaCサービス。Terraformの競合ポジション
  • Ansible — 構成管理寄りのIaCツール。手続き型アプローチが特徴
  • Docker — コンテナ仮想化ツール。Terraformと組み合わせてインフラ+アプリを管理することが多い
  • CI/CDパイプライン — Terraformの実行をGitHub Actionsなどで自動化する仕組み
  • クラウドコンピューティング — TerraformがターゲットとするAWS・Azure・GCPなどの基盤
  • Git — tfファイルのバージョン管理に不可欠なツール
  • DevOps — Terraformが普及した文化的背景。開発と運用の連携を目指す考え方