インフラ・構成管理の現場で頻出する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。両者を組み合わせれば、インフラ全体をコードで一気通貫に管理できます。