AnsibleとTerraformの違い|構成管理ツール比較

インフラ・クラウド

インフラ・構成管理の現場で頻出するAnsibleとTerraform。両者は似ているようで役割が異なり、混同するとうまく使いこなせません。本記事では、AnsibleとTerraformの違いと、使い分けの基本を解説します。

2つのツールの目的

  • Terraform:インフラを作る・変える・壊す(プロビジョニング)
  • Ansible:作ったサーバーに対する設定・ソフトウェア導入(構成管理)

「Terraformで土地を整備して建物を建てる」「Ansibleでその建物の内装を整える」というイメージです。

項目別比較

  • 記述スタイル:Terraform=宣言的(HCL)、Ansible=手続き的(YAML+モジュール)
  • 得意領域:Terraform=クラウドリソース、Ansible=OS内設定・パッケージ・サービス
  • 状態管理:Terraform=State、Ansible=毎回確認(冪等性)
  • エージェント:Terraform不要、Ansible=SSH接続のみ
  • 適用方式:Terraform=API直接、Ansible=対象ホストにSSHで命令

サンプル比較

Terraform(EC2を作る)

resource "aws_instance" "web" {
  ami           = "ami-xxxxxxxx"
  instance_type = "t3.small"
  tags = { Name = "web-server" }
}

Ansible(Nginxを入れる)

- hosts: web
  become: yes
  tasks:
    - name: Install nginx
      apt:
        name: nginx
        state: present
    - name: Start nginx
      service:
        name: nginx
        state: started
        enabled: yes

組み合わせ運用

実務では「TerraformでEC2やVPCを作成し、Ansibleでミドルウェアを構成する」という併用パターンが定番です。terraformからローカル/リモート実行でansibleを呼び出す例も多く見られます。

近年のトレンド

  • Immutable Infrastructure:サーバー設定もコンテナ化/AMIに焼く方向
  • PackerでAMIをビルド → TerraformでEC2起動、という構成
  • Ansibleは、レガシー資産・物理サーバー・ネットワーク機器管理で根強く活躍

選び方の指針

  • クラウドリソースを一元管理したい → Terraform
  • 既存のサーバー設定を自動化したい → Ansible
  • 新規ならコンテナ+Kubernetes+Terraformが主流
  • レガシー環境ならAnsibleが現実的

まとめ

TerraformとAnsibleは競合ではなく役割分担するツールです。「リソースを作る・壊す」のはTerraform、「サーバーの中身を整える」のはAnsible。両者を組み合わせれば、インフラ全体をコードで一気通貫に管理できます。