Ansibleと構成管理

Ansibleとは

Ansible(アンシブル)は、サーバーの設定作業を自動化する構成管理ツールです。「パッケージを入れる」「設定ファイルを配る」「サービスを起動する」といった手順を YAML ファイルに書いておけば、何十台のサーバーにも同じ設定を一括で適用できます。

インフラをコードで管理する [[IaC]] の代表的ツールの1つで、特に既存サーバーの中身の設定(構成管理)を得意とします。

エージェントレスという特徴

構成管理ツールには対象サーバーに常駐プログラム(エージェント)を入れる方式もありますが、Ansible はエージェントレス(対象サーバーに専用ソフトを入れない方式)です。管理側のマシンから [[SSH]] で接続して設定を流し込むため、「SSH がつながる [[Linux]] サーバーならすぐ使い始められる」手軽さが人気の理由です。

Playbookの基本

手順書にあたるファイルを Playbook と呼び、[[YAML]] で書きます。

- hosts: webservers
  become: true
  tasks:
    - name: Nginx をインストールする
      apt:
        name: nginx
        state: present

    - name: Nginx を起動して自動起動を有効にする
      service:
        name: nginx
        state: started
        enabled: true

ポイントは、コマンドの羅列ではなく「あるべき状態を宣言する」書き方であることです。state: present は「インストールされている状態にせよ」という意味で、すでに入っていれば何もしません。この性質を [[冪等性]](何度実行しても同じ結果になること)と呼び、「2回流したら壊れた」を防ぐ構成管理の重要な考え方です。

手作業と比べたメリット

手作業Ansible
台数が増えたとき台数ぶんの作業時間1回の実行で全台に適用
作業ミス手順の抜け・打ち間違いが起きる毎回同じ手順が保証される
記録手順書が実態とずれがちPlaybook 自体が正確な手順書
再現同じ環境を作り直すのが大変同じ Playbook で何度でも再現

Playbook を Git で管理し、[[CI/CD]] から自動実行する運用にすれば、インフラの変更もアプリのコードと同じ流れでレビュー・適用できます。

初学者向けポイント

  • Terraform が「サーバーを用意する」役割なのに対し、Ansible は「用意したサーバーの中身を設定する」役割 — 併用されることが多い
  • まず1台の検証サーバーに対して「Nginx を入れる Playbook」を書いて流すのが定番の入門
  • --check オプションで「実行したら何が変わるか」を事前確認できる(ドライラン)

関連技術とのつながり

  • [[IaC]] — Ansible はインフラのコード化を担う代表的ツール
  • [[SSH]] — Ansible の通信手段。エージェントレスを支える基盤
  • [[Linux]] — 主な管理対象。パッケージやサービスの操作を自動化する
  • [[CI/CD]] — Playbook をパイプラインから自動実行する運用が定番
Q: Ansible のエージェントレスの説明として正しいのはどれ?
- [x] 対象サーバーに専用ソフトを入れず、SSH で接続して設定する
- [ ] 対象サーバー全台に常駐プログラムを必ずインストールする
- [ ] ネットワーク接続なしで設定を反映できる
解説: Ansible は対象サーバーに常駐エージェントを入れず、SSH 経由で設定を流し込むエージェントレス方式です。

Q: 冪等性の説明として正しいのはどれ?
- [ ] 実行するたびに違う結果になること
- [x] 何度実行しても同じ結果になること
- [ ] 1回しか実行できないこと
解説: 冪等性は何度実行しても同じ状態に落ち着く性質で、「2回流したら壊れた」を防ぐ構成管理の重要な考え方です。

Q: Playbook の書き方の特徴として正しいのはどれ?
- [ ] 対象サーバーで実行するコマンドの履歴をそのまま録画する
- [ ] バイナリ形式で記述し人間には読めない
- [x] YAML で「あるべき状態」を宣言するように書く
解説: Playbook は state: present のように、あるべき状態を YAML で宣言する書き方をします。