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 Node | Ansibleを動かす司令塔サーバー | 厨房の料理長 |
| 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と同種のツールを比較してみましょう。
| 比較項目 | Ansible | Chef | Puppet | Terraform |
|---|---|---|---|---|
| エージェント | 不要(SSH) | 必要 | 必要 | 不要 |
| 記述言語 | YAML | Ruby DSL | Puppet DSL | HCL |
| 学習コスト | 低い | 高い | 中程度 | 中程度 |
| 主な用途 | 構成管理・手順自動化 | 構成管理 | 構成管理 | インフラ構築 |
| 冪等性 | ◎ | ◎ | ◎ | ◎ |
| ネットワーク機器対応 | ◎ | △ | △ | △ |
AnsibleとTerraformの使い分けイメージ
[インフラを「作る」] [インフラを「設定する」]
Terraform Ansible
────────── ──────────
・VPCの作成 ・OSの設定
・サーバーの起動 ・ソフトのインストール
・ロードバランサーの構築 ・ファイルの配置
・クラウドリソースの管理 ・サービスの起動/停止
実務では「TerraformでAWSにサーバーを作り、AnsibleでそのサーバーにNginxを入れる」という組み合わせが非常によく使われます。
Ansibleがサーバーと通信する仕組み(SVG図解)
関連する規格・RFC
※ AnsibleはRFCや国際標準規格による定義はありませんが、内部通信でSSHを使用しており、関連するRFCは以下のとおりです。
| 規格・RFC番号 | 内容 |
|---|---|
| RFC 4251 | SSH(Secure Shell)プロトコルのアーキテクチャ定義 |
| RFC 4252 | SSH認証プロトコルの仕様 |
| RFC 4253 | SSHトランスポート層プロトコルの仕様 |
関連用語
- Infrastructure as Code — インフラ構成をコードで管理・自動化する考え方。Ansibleが実現する核心概念
- Terraform — HashiCorp製のインフラ構築自動化ツール。Ansibleと組み合わせて使われることが多い
- SSH — Ansibleがサーバーと通信するために使う暗号化リモート接続プロトコル
- YAML — AnsibleのPlaybookを記述するデータ形式。人間が読みやすい構造を持つ
- 冪等性 — 何度実行しても結果が同じになる性質。Ansibleの安全設計の根拠
- Kubernetes — コンテナ管理の自動化ツール。Ansibleと役割分担しながら使われることが多い
- CI/CD — 継続的インテグレーション・デリバリー。AnsibleはCIパイプラインの中に組み込まれて使われる
- Chef — AnsibleのライバルとなるRuby製の構成管理ツール