1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ansible×Terraform超入門 この2つの違いを3分で理解する

1
Posted at

はじめに

「IaCツールって色々あるけど、何が違うの?」
「TerraformとAnsible、どっちを使えばいいの?」

こんな悩み、ありませんか?

こんにちは、ハンズオンラボ運営メンバーのわたるです。インフラエンジニア10年目で、監視オペレーターから始まり、運用・保守、そして現在は設計・構築まで幅広く経験してきました。

正直に言うと、私も最初は「IaCツールが多すぎて何を選べばいいか分からない...」と悩んでいた一人でした。Terraform、Ansible、Chef、Puppet...調べれば調べるほど混乱していく状態だったんです。

でも、実はこの2つ、役割が全く違うんです。

この記事では、IT業界3年未満のエンジニアの方に向けて、TerraformとAnsibleの違いを「何が作れるのか」という視点から、3分で理解できるようにお伝えします。

TerraformとAnsibleの役割の違い

結論:「家を建てる」vs「家具を配置する」

まず結論から言うと、この2つの違いを一言で表すなら:

  • Terraform = 家を建てる(インフラ構築)
  • Ansible = 家具を配置する(設定管理)

もう少し技術的に言うと:

  • Terraform = クラウドリソース(サーバー、ネットワーク、ストレージ)を作る
  • Ansible = そのサーバーの中身(OS設定、ミドルウェア、アプリ)を設定する

なぜ混同しやすいのか

両方とも「Infrastructure as Code(IaC)」というカテゴリーに分類されるため、初心者の方は「同じようなもの」と思ってしまいがちです。

実際、私も最初は「どっちもインフラを自動化するツールでしょ?」と考えていました。でも、実務で両方を使ってみて分かったのは、レイヤー(層)が違うということです。

比較項目 Terraform Ansible
得意領域 インフラ層(クラウドリソース) OS・ミドルウェア層
管理方式 宣言型(State管理) 手続き型(手順実行)
主な対象 AWS/Azure/GCP等のクラウドリソース サーバー内の設定・パッケージ
ファイル形式 .tf (HCL言語) .yml (YAML形式)
実行イメージ 「この状態にしてください」 「この手順で実行してください」

具体的なエピソード

私がこの違いを本当に理解したのは、あるプロジェクトでの出来事がきっかけでした。

先輩から「AWSにWebサーバーを構築して」と言われた時、私は最初Ansibleだけで全部やろうとしたんです。でも、EC2インスタンスを作るところで詰まりました。

Ansibleでもクラウドリソースを作ることは技術的には可能なのですが、依存関係の管理や状態の把握が非常に難しかったんです。「あれ、このネットワーク設定、前に作ったっけ?」「セキュリティグループの設定、どこに書いたっけ?」と混乱の連続...。

一方、Terraformを使うと、現在のインフラの状態がState(状態ファイル)で管理されているため、「今どういう構成になっているか」が一目瞭然でした。

逆に、サーバー内にApacheをインストールしたり、設定ファイルを配置したりする作業は、Ansibleの豊富なモジュールを使うことで簡単に自動化できました。

Terraformの基本:インフラを「宣言」する

Terraformとは?

Terraformは、HashiCorp社が開発したオープンソースのインフラ構築ツールです。

特徴:

  • 宣言型: 「最終的にこうなっていてほしい」という状態を記述
  • マルチクラウド対応: AWS、Azure、GCP、さらにはDatadogなども管理可能
  • State管理: 現在の状態と差分を自動検出

よく使う基本コマンド

# 初期化(最初に1回実行)
terraform init

# 実行計画の確認(ドライラン)
terraform plan

# 実際に適用
terraform apply

# リソースの削除
terraform destroy

# 状態の確認
terraform show

# リソースのインポート
terraform import <リソースタイプ>.<名前> <ID>

主要コマンドのオプション一覧

terraform init オプション

オプション 効果
-upgrade プロバイダーを最新バージョンに更新
-backend-config=PATH バックエンド設定を指定
-reconfigure バックエンドを再設定(既存の設定を無視)
-migrate-state 既存のStateを新しいバックエンドに移行

terraform plan オプション

オプション 効果
-out=FILE 実行計画をファイルに保存
-var 'key=value' 変数を指定
-var-file=FILE 変数ファイルを指定
-target=RESOURCE 特定のリソースのみ計画
-refresh=false State更新をスキップ

terraform apply オプション

オプション 効果
-auto-approve 確認プロンプトをスキップ(自動承認)
-var 'key=value' 変数を指定
-target=RESOURCE 特定のリソースのみ適用
-parallelism=n 並列実行数を指定(デフォルト10)
FILE 保存済みの実行計画を適用

terraform destroy オプション

オプション 効果
-auto-approve 確認プロンプトをスキップ
-target=RESOURCE 特定のリソースのみ削除
-var 'key=value' 変数を指定

実行イメージ

# EC2インスタンスを定義
resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  
  tags = {
    Name = "WebServer"
  }
}

このコードを書いて terraform apply すると、Terraformが:

  1. 現在の状態を確認
  2. 差分を検出
  3. 必要なリソースを作成

という流れで自動的にインフラを構築してくれます。

Terraformが得意なこと

クラウドリソースの作成・管理

  • EC2、RDS、S3などのAWSリソース
  • VPC、サブネット、ルートテーブルなどのネットワーク構成
  • IAMロール、セキュリティグループなどのセキュリティ設定

状態管理

  • 現在のインフラ構成をStateファイルで管理
  • 変更差分を自動検出
  • チームでの共同作業に適している

マルチクラウド対応

  • 1つのツールでAWS/Azure/GCPを管理
  • クラウドを超えた統一的な記述が可能

Ansibleの基本:設定を「実行」する

Ansibleとは?

Ansibleは、Red Hat社が開発したオープンソースの構成管理ツールです。

特徴:

  • 手続き型: 「この手順で実行してください」という処理を記述
  • エージェントレス: 対象サーバーにソフトウェアのインストール不要(SSH接続のみ)
  • 豊富なモジュール: パッケージ管理、ファイル操作、サービス管理など

よく使う基本コマンド

# アドホックコマンド(単発実行)
ansible all -m ping

# Playbookの実行
ansible-playbook site.yml

# 構文チェック
ansible-playbook site.yml --syntax-check

# ドライラン(変更を実際には適用しない)
ansible-playbook site.yml --check

# タスク一覧の表示
ansible-playbook site.yml --list-tasks

主要コマンドのオプション一覧

ansible アドホックコマンドオプション

オプション 効果
-i INVENTORY インベントリファイルを指定
-m MODULE 実行するモジュールを指定
-a ARGUMENTS モジュールに渡す引数
-u USER 接続ユーザー名を指定
-b または --become 特権昇格(sudoなど)を有効化
--become-user=USER 昇格先のユーザーを指定
-k または --ask-pass SSH パスワードを入力
-K または --ask-become-pass sudo パスワードを入力
-f NUM 並列実行数を指定(デフォルト5)
--list-hosts 対象ホストを表示

ansible-playbook コマンドオプション

オプション 効果
-i INVENTORY インベントリファイルを指定
--syntax-check 構文チェックのみ実行
--check ドライラン(実際には変更しない)
--diff 変更内容の差分を表示
-v, -vv, -vvv 詳細度を上げる(デバッグ用)
--list-tasks タスク一覧を表示
--list-tags タグ一覧を表示
--tags=TAGS 特定のタグのみ実行
--skip-tags=TAGS 特定のタグをスキップ
--start-at-task="タスク名" 指定したタスクから開始
-l SUBSET または --limit=SUBSET 対象ホストを限定
-e KEY=VALUE または --extra-vars 変数を上書き
-b または --become 特権昇格を有効化
-k または --ask-pass SSH パスワードを入力
-K または --ask-become-pass sudo パスワードを入力
--step 各タスクで実行確認を求める
--forks=NUM 並列実行数を指定

ansible-vault コマンドオプション

オプション 効果
create 新しい暗号化ファイルを作成
encrypt 既存ファイルを暗号化
decrypt ファイルを復号化
edit 暗号化ファイルを編集
view 暗号化ファイルを表示
rekey 暗号化パスワードを変更

実行イメージ

# Apacheをインストールして起動
- name: Install and start Apache
  hosts: webservers
  become: yes
  
  tasks:
    - name: Install Apache
      yum:
        name: httpd
        state: present
    
    - name: Start Apache
      service:
        name: httpd
        state: started
        enabled: yes

このPlaybookを実行すると、Ansibleが:

  1. 対象サーバーにSSH接続
  2. タスクを順番に実行
  3. 結果をレポート

という流れで自動的に設定を適用してくれます。

Ansibleが得意なこと

OS・ミドルウェアの設定

  • パッケージのインストール(yum、apt、pip等)
  • 設定ファイルの配置・編集
  • サービスの起動・停止・再起動

既存環境への適用

  • エージェント不要(SSH接続のみ)
  • 既存サーバーの設定変更が容易
  • 手順書のコード化に最適

可読性の高い記述

  • YAML形式で直感的
  • モジュールが豊富で学習コストが低い
  • 初心者でも理解しやすい

実践的な使い分け:組み合わせて使うのが正解

実際のプロジェクトでの使い方

実務では、TerraformとAnsibleを組み合わせて使うのが一般的です。

よくあるワークフロー:

1. Terraformでインフラを構築
   ↓ (EC2、VPC、RDS等を作成)
2. Ansibleでサーバーを設定
   ↓ (Apache、MySQL等をインストール・設定)
3. アプリケーションをデプロイ

具体的な使い分け例

パターン1: Webシステムの構築

Terraformで作る:

  • VPC、サブネット、インターネットゲートウェイ
  • EC2インスタンス(Webサーバー用、APサーバー用)
  • RDS(データベース)
  • ロードバランサー(ALB)
  • セキュリティグループ

Ansibleで設定:

  • EC2インスタンスにNginx/Apacheをインストール
  • アプリケーションサーバー(Tomcat、Node.js等)のセットアップ
  • ミドルウェアの設定ファイルを配置
  • ログローテーションの設定
  • 監視エージェントのインストール

パターン2: 既存環境のコード化

既にサーバーが存在する場合:

  1. Terraformで terraform import を使って既存リソースを取り込む
  2. Ansibleで現在の設定を再現するPlaybookを作成
  3. 以降の変更はコードで管理

私が失敗から学んだこと

最初は「Terraformだけで全部やろう」と思っていた時期がありました。でも、サーバー内の細かい設定(例えば、Apacheのconf編集や証明書の配置)をTerraformで書くと、すごく読みにくくなってしまったんです。

逆に「Ansibleだけで」と思ったときは、VPCやサブネットの依存関係を手動で管理する羽目になり、「あれ、このサブネット、どのVPCに属してたっけ?」と混乱...。

結局、それぞれの得意分野に任せるのが最適解だと分かりました。

シーン 使うツール 理由
EC2を10台作る Terraform リソース管理が得意
全サーバーに監視エージェントを入れる Ansible 既存サーバーへの適用が楽
ネットワーク構成を変更 Terraform State管理で差分が明確
設定ファイルを一括更新 Ansible 手順の自動化が得意
環境を丸ごと削除 Terraform destroy一発で全削除

どちらから学び始めるべき?

初心者にはAnsibleがおすすめ

もしあなたが「どちらから学ぼうかな?」と迷っているなら、Ansibleから始めることをおすすめします。

理由:

  1. YAML形式が読みやすい - 英語の文章のように書ける
  2. すぐに効果が見える - 手元のサーバーですぐ試せる
  3. 既存の手順書をコード化できる - 今の業務にすぐ活かせる
  4. エージェント不要 - 環境構築がシンプル

Ansibleで「自動化」の感覚を掴んでから、Terraformでインフラ層を学ぶとスムーズです。

学習ロードマップの例

【ステップ1】Ansible基礎(1-2週間)
- 基本コマンドを覚える
- 簡単なPlaybookを書いてみる
- 既存の手順書を1つコード化してみる

【ステップ2】Terraform基礎(2-3週間)
- 基本コマンドを覚える
- 簡単なEC2を1台作ってみる
- VPCやセキュリティグループを理解する

【ステップ3】組み合わせて使う(1-2週間)
- Terraformでインフラ→Ansibleで設定の流れを体験
- 小規模なWebシステムを構築してみる

【ステップ4】実践レベル(継続的に)
- チーム開発での運用を学ぶ
- CI/CDパイプラインとの連携
- ベストプラクティスを学ぶ

まとめ

3行でまとめると

  1. Terraform = インフラ構築(家を建てる)、Ansible = 設定管理(家具を配置する)
  2. 実務では両方を組み合わせて使うのが一般的
  3. 初心者はAnsibleから学ぶとスムーズに理解できる

最後に

「IaCツールが多すぎて何を選べばいいか分からない」という悩み、本当によく分かります。

でも、この記事を読んで「TerraformとAnsibleは役割が違うんだ」「組み合わせて使うんだ」ということが理解できたら、もう大丈夫です。

あとは実際に手を動かしてみるだけ。最初は失敗して当然です。私も何度も「あれ、これどうやるんだっけ?」と詰まりました。

大事なのは、一人で悩まず、一緒に学べる環境を作ることです。

一緒に学びませんか?

私たちハンズオンラボでは、「IaCツールを実際に触ってみたい」「Terraform/Ansibleの使い分けを体験したい」という方のために、実践型ハンズオンを定期開催しています。

完全ハンズオン形式で実機を触れる - 座学だけじゃなく、実際に動かせる
現役エンジニアが伴走 - 詰まったらすぐに質問できる
初心者大歓迎・質問し放題 - 「こんなこと聞いていいのかな?」もOK
少人数制でしっかりサポート - 一人ひとりに目が届く環境

「一人で勉強していると挫折しそう...」
「実際の業務でどう使うのか知りたい...」
「同じレベルの仲間と一緒に学びたい...」

そんな方は、ぜひ一度遊びに来てください!

📍 connpassページ: https://zeki-chan-lab.connpass.com/

あなたの「できた!」を一緒に実現しましょう🚀

関連リンク

公式ドキュメント

ハンズオンラボ

参考記事

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?