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 で宣言する書き方をします。