【入門編】【Terraform vs Ansible】インフラ自動化ツールはどっちを使うべき?特徴と使い分けを徹底比較 – インフラ構成管理(IaC)活用バイブル

ようこそ、自動化の深淵へ。私は長年、数千台規模のサーバー群と格闘し、それらを「コード」という名の旋律で操ってきたSREエンジニアです。

これからインフラの世界に足を踏み入れるあなたに、まず伝えておきたいことがあります。それは、「手作業は嘘をつくが、コードは嘘をつかない」ということです。AWSやGoogle Cloudのコンソールをポチポチとクリックする日々は今日で終わりにしましょう。

今回は、IaC(Infrastructure as Code)の二大巨頭であるTerraformとAnsibleについて、その本質的な違いと、現場で震えるほど役立つ「最強の使い分け」を伝授します。

この記事を読み終える頃には、あなたは「どのツールをどこで使うべきか」という迷いから解放され、プロフェッショナルへの第一歩を確実に踏み出しているはずです。

—

1. そもそも、なぜ2つのツールがあるのか?

初心者の方が最初にぶつかる壁が「どっちもインフラを自動化するツールでしょ? 何が違うの?」という疑問です。結論から言いましょう。

  • Terraformは「不動産屋と大工さん」:土地(クラウド基盤)を確保し、建物の外枠(VPC、ネットワーク、サーバー本体)を作るのが得意。
  • Ansibleは「内装業者さん」:建てられた建物の中に入り、家具(ミドルウェア)を配置し、壁紙(設定ファイル)を貼るのが得意。

Terraform:宣言的なプロビジョニング

Terraformは「あるべき姿」を記述するツールです。「サーバーが2台欲しい」と書けば、今0台なら2台作り、既に1台あるなら足りない1台だけを作ります。この「現在の状態を管理し、差分だけを埋める」能力(状態管理)がTerraformの魂です。

Ansible:構成管理とタスク実行

Ansibleは、既に起動しているサーバーに対して「このコマンドを実行せよ」という命令を飛ばすのが得意です。エージェントレス(サーバー側に特別なソフトを入れなくて良い)なので、SSHさえ繋がればどんな古いサーバーでも魔法のように操作できます。

—

2. Terraformのセットアップと「Hello World」

まずはTerraformを触ってみましょう。クラウドのアカウントがなくても試せる「ローカルファイル生成」を例にします。

インストール (Macの場合)

brew install terraform

※Windowsの方は、公式サイトからバイナリをダウンロードしてパスを通すか、`choco install terraform`を使用してください。

はじめてのコード (`main.tf`)

適当なディレクトリを作成し、以下の内容で `main.tf` を作成してください。

Terraformの動作を定義するブロック
terraform {
required_version = “>= 1.0.0”
}

ローカルファイルを操作する「Provider」を宣言
resource “local_file” “hello_world” {
filename = “${path.module}/hello.txt”
content = “Terraformによって生成された、冪等性のあるファイルです。\n”
}

実行の3ステップ

Terraformには、現場で必ず守るべき「聖なる3手順」があります。

1. `terraform init`: プラグインをダウンロードし、初期化します。
2. `terraform plan`: 最重要ステップ。 実行前に「何が起こるか」をプレビューします。
3. `terraform apply`: 実際にリソースを作成します。

$ terraform init
$ terraform plan # ここで「1 to add」と表示されるのを確認!
$ terraform apply # 最後に ‘yes’ と入力

これで `hello.txt` が生成されました。もう一度 `apply` してみてください。「No changes」と表示されるはずです。「あるべき姿と現状が一致しているから、何もしない」。これこそが、プロが求める冪等性(べきとうせい)です。

—

3. Ansibleのセットアップと「Hello World」

次にAnsibleです。Ansibleは「対象のリスト(Inventory)」と「指示書(Playbook)」の2つで動きます。

インストール

pip install ansible

はじめてのコード

自分自身のPC(localhost)を対象に、メッセージを表示させてみましょう。

1. 在庫棚(`hosts.ini`)

[local]
localhost ansible_connection=local

2. 指示書(`playbook.yml`)

—

  • name: 初めてのAnsibleプレイブック

hosts: local
tasks:

  • name: メッセージを表示する

debug:
msg: “Ansibleは、現在時刻 {{ ansible_date_time.iso8601 }} を知っています。”

  • name: ファイルを作成する

copy:
dest: “./ansible_hello.txt”
content: “Ansibleがこのファイルを書きました。\n”

実行

ansible-playbook -i hosts.ini playbook.yml

Ansibleの凄いところは、このPlaybookを書き換えずに、`hosts.ini` に100台のサーバーIPを並べるだけで、全サーバーに同じ設定を叩き込める圧倒的な「並列実行力」にあります。

—

4. 現場での「黄金の使い分け」

では、実際のプロジェクトではどう組み合わせるのが正解でしょうか? 私が設計する際の「鉄板構成」はこれです。

1. Terraformで「土台」を作る

  • VPC、サブネット、セキュリティグループの構築。
  • EC2インスタンスやRDS(データベース)の起動。
  • ポイント: Terraformの `outputs` 機能を使って、作成したサーバーのIPアドレスを書き出す。

2. Ansibleで「魂」を吹き込む

  • Terraformが作ったサーバーに対し、NginxやDockerをインストール。
  • アプリケーションの設定ファイルを配置。
  • ユーザー作成やセキュリティパッチの適用。

なぜ混ぜるのか?

TerraformでOS内部の設定(ユーザー追加など)をしようとすると、コードが非常に複雑になり、エラー時のリカバリが困難になります。逆にAnsibleでVPCを作ろうとすると、リソースの依存関係の管理に苦労します。「外側はTerraform、内側はAnsible」。これが現代のSREにおける最適解の一つです。

—

5. 最後に:あなたが目指すべきエンジニア像

ツールを覚えることは手段に過ぎません。真に価値があるのは、「インフラをコードとして管理することで、チームに安心とスピードをもたらす」という設計思想を理解することです。

  • Terraformを触る時は、「このリソースが消えたらどうなるか?」というライフサイクルを意識してください。
  • Ansibleを触る時は、「誰が実行しても同じ結果になるか?」という再現性を意識してください。

この2つの翼を手に入れたあなたは、もう手作業の恐怖に怯える必要はありません。複雑なシステムを、まるでピアノを弾くように軽やかに、そして正確に構築できるようになります。

まずは今日、自分のPCで `terraform apply` を成功させたその実感を大切にしてください。その一歩が、未来の巨大なシステムの安定を支える礎(いしずえ)になるのですから。

「さあ、自動化の旅を始めましょう。何か困ったことがあれば、いつでもコードが答えを教えてくれますよ」

タイトルとURLをコピーしました