ネットワーク設計と自動化

Ansible あんしぶる

構成管理Infrastructure as CodePlaybook冪等性エージェントレス自動化
Ansibleについて教えて

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

Ansibleは「サーバーの設定作業を自動でやってくれる司令塔」だよ!たとえば100台のサーバーに同じソフトをインストールしたいとき、手作業でやったら大変だけど、Ansibleに「こうしてね」って指示書(Playbook)を渡すだけで全部やってくれるんだ。しかも特別なソフトをサーバー側に入れなくていいのが最大の特徴ってこと!


Ansibleとは

Ansibleは、Red Hat(レッドハット)が開発・提供するオープンソースのIT自動化ツールです。サーバーの設定、ソフトウェアのインストール、ネットワーク機器の設定変更など、本来エンジニアが手作業でやっていた作業を自動化できます。Infrastructure as Code(IaC、つまり「インフラの構成をコードで管理する」という考え方を実現するための代表的なツールのひとつです。

最大の特徴はエージェントレス(agentless)であること。多くの自動化ツールは管理対象のサーバーに専用のソフト(エージェント)を事前にインストールする必要がありますが、AnsibleはSSH(セキュアシェル)という標準的な通信方式だけで動くため、対象サーバーに何も追加インストールせずに使えます。これにより導入のハードルが非常に低く、世界中のエンジニアに普及しています。

また、冪等性(べきとうせい)という重要な性質を持っています。同じ操作を何度実行しても結果が変わらない、つまり「すでに設定済みならスキップする」という安全な動作をするため、誤って同じ手順を2回実行してしまってもシステムが壊れにくいという大きな安心感があります。


Ansibleの主要コンポーネント

Ansibleを構成する主な部品を整理しておきましょう。

コンポーネント役割具体的なイメージ
Playbook(プレイブック)「何をするか」を書いた指示書料理のレシピ
Inventory(インベントリ)管理対象サーバーの一覧作業先の住所録
Task(タスク)個々の作業ステップレシピの1つ1つの手順
Module(モジュール)タスクを実行する機能部品調理道具(包丁・鍋など)
Role(ロール)複数タスクをまとめた再利用パーツ下ごしらえセット
Control NodeAnsibleを動かす司令塔サーバー厨房の料理長
Managed Node管理される対象サーバーテーブルの担当

Playbookの基本構造(YAMLで書く)

Ansibleの指示書はYAML(ヤムル)という読みやすい形式で書きます。

---
- name: Webサーバーのセットアップ
  hosts: web_servers        # 対象サーバーグループ
  become: true              # 管理者権限で実行

  tasks:
    - name: Nginxをインストールする
      ansible.builtin.package:
        name: nginx
        state: present      # 「インストールされている状態」を保証

    - name: Nginxを起動・自動起動設定する
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: true

「冪等性」を覚えるコツ

「何度やっても同じ結果」=やり直しOK!

冪等(べきとう)は数学用語で「f(f(x)) = f(x)」のこと。Ansibleでは「すでにNginxが入っていたら何もしない」という動作がこれにあたる。怖がらずに何度でも実行できる安心設計!


歴史と背景

  • 2012年 — Michael DeHaan(マイケル・デハーン)がAnsibleを開発・公開。「もっとシンプルな自動化ツールが必要だ」という動機から誕生
  • 2013年 — AnsibleWorks社(後のAnsible, Inc.)設立。商用サポートの提供開始
  • 2015年Red Hatが約1.5億ドルでAnsible, Inc.を買収。エンタープライズ市場への普及が加速
  • 2016年以降 — Ansible Towerという管理GUIの提供開始(現在はAnsible Automation Platformとして進化)
  • 2019年 — Red Hat自体がIBMに買収され、AnsibleはIBM/Red Hatのエコシステムへ
  • 現在 — GitHubのスター数は6万超。構成管理ツールの中でも特にネットワーク自動化・クラウド設定管理の分野で急速に採用が拡大

主要な構成管理ツールとの比較

Ansibleと同種のツールを比較してみましょう。

比較項目AnsibleChefPuppetTerraform
エージェント不要(SSH)必要必要不要
記述言語YAMLRuby DSLPuppet DSLHCL
学習コスト低い高い中程度中程度
主な用途構成管理・手順自動化構成管理構成管理インフラ構築
冪等性
ネットワーク機器対応

AnsibleとTerraformの使い分けイメージ

[インフラを「作る」]              [インフラを「設定する」]
  Terraform                          Ansible
  ──────────                         ──────────
  ・VPCの作成                        ・OSの設定
  ・サーバーの起動                   ・ソフトのインストール
  ・ロードバランサーの構築           ・ファイルの配置
  ・クラウドリソースの管理           ・サービスの起動/停止

実務では「TerraformでAWSにサーバーを作り、AnsibleでそのサーバーにNginxを入れる」という組み合わせが非常によく使われます。

Ansibleがサーバーと通信する仕組み(SVG図解)

Control Node (Ansibleが動く) 司令塔サーバー Playbook / Inventory SSH SSH Managed Node 1 Webサーバー エージェント不要 Managed Node 2 DBサーバー エージェント不要 結果レポート OK / Changed / Failed

関連する規格・RFC

※ AnsibleはRFCや国際標準規格による定義はありませんが、内部通信でSSHを使用しており、関連するRFCは以下のとおりです。

規格・RFC番号内容
RFC 4251SSH(Secure Shell)プロトコルのアーキテクチャ定義
RFC 4252SSH認証プロトコルの仕様
RFC 4253SSHトランスポート層プロトコルの仕様

関連用語

  • Infrastructure as Code — インフラ構成をコードで管理・自動化する考え方。Ansibleが実現する核心概念
  • Terraform — HashiCorp製のインフラ構築自動化ツール。Ansibleと組み合わせて使われることが多い
  • SSH — Ansibleがサーバーと通信するために使う暗号化リモート接続プロトコル
  • YAML — AnsibleのPlaybookを記述するデータ形式。人間が読みやすい構造を持つ
  • 冪等性 — 何度実行しても結果が同じになる性質。Ansibleの安全設計の根拠
  • Kubernetes — コンテナ管理の自動化ツール。Ansibleと役割分担しながら使われることが多い
  • CI/CD — 継続的インテグレーション・デリバリー。AnsibleはCIパイプラインの中に組み込まれて使われる
  • Chef — AnsibleのライバルとなるRuby製の構成管理ツール