【実務・中級編】【コピペでOK】Ansibleのよく使う頻出モジュール20選と実践的な使い方 – インフラ構成管理(IaC)活用バイブル

現場の生産性を極限まで高める:Ansible必須モジュール20選と「枯れた」プロの実践術

「Ansibleは冪等性を担保するだけのツール」だと思っているなら、まだその真価の半分も引き出せていない。

インフラ構成管理の本質は、「誰がいつ実行しても同じ状態になる」ことではなく、「構成変更の履歴をコードとして文化に定着させ、障害復旧時間を限りなくゼロに近づける」ことにある。

本稿では、日常業務で呼吸をするように使うモジュール群と、チーム開発の地獄を回避するための「戦術的ベストプラクティス」を伝授する。

—

1. 現場の主戦力:毎日使う「厳選」モジュール20選

これらを使いこなせば、Ansibleで書けない構成は存在しない。

| 分類 | モジュール | ユースケース |
| :— | :— | :— |
| パッケージ | `apt`, `yum`/`dnf` | OSパッケージの最新化とバージョン固定 |
| サービス | `service`, `systemd` | プロセスの起動・停止・自動起動設定 |
| ファイル操作 | `file`, `copy`, `template`, `lineinfile`, `blockinfile` | 設定ファイルの配布と動的生成 |
| ユーザー管理 | `user`, `group` | 最小権限の原則に基づくアカウント管理 |
| 実行制御 | `shell`, `command`, `script` | モジュール化できないレガシーな処理の実行 |
| その他重要 | `debug`, `assert`, `wait_for`, `set_fact` | デバッグ、状態検証、処理待ち |

実戦で差が出る「template」の極意

単なるファイルコピーでは、環境ごとの差異(DBホスト名やログパス)を埋め込めない。`template`モジュールを使い、Jinja2のロジックで環境変数を注入する。

  • name: Nginx config deployment

template:
src: nginx.conf.j2 # Jinja2テンプレート
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: ‘0644’
validate: nginx -t -c %s # 構文チェックを挟むのがプロの作法
notify: reload nginx # 変更があった時のみハンドラを起動

—

2. 開発スピードを劇的に高める「プロの小技」

VS Code用「神」プラグイン

  • Ansible (Red Hat公式): 言語サーバー機能により、モジュールの引数補完が最強になる。これなしでの開発は時間の無駄。
  • YAML (Red Hat公式): インデントの可視化とスキーマ検証。Ansibleのミスはほぼインデントに起因する。

暗黙のキーボードショートカット

  • `Ctrl + Shift + P` -> `Ansible: Run Ansible Playbook`
  • ターミナルでの開発時:`ansible-playbook -i inventory.ini site.yml –syntax-check` を常に指が覚えるまで叩く。

—

3. チーム開発を崩壊させない「設定共有化ルール」

複数人でAnsibleを触ると、必ず「冪等性の崩壊」が起きる。これを防ぐための鉄則だ。

1. 絶対に変数を直書きしない: `vars/`配下に環境別(`dev.yml`, `prod.yml`)に切り出す。
2. `ansible.cfg`の共有: チーム全員で同じ設定(SSH接続設定、パイプラインのタイムアウト値など)を使う。

# ansible.cfg
[defaults]
remote_tmp = /tmp/.ansible-${USER}/tmp
pipelining = True # SSH接続を高速化する魔法のフラグ
callbacks_enabled = timer, profile_tasks # どこで時間がかかっているか可視化する

3. `assert`で前提条件を殺す: Playbookの冒頭で環境が正しいかチェックする。

  • name: Ensure running on production

assert:
that:

  • ansible_os_family == “Debian”

fail_msg: “本番環境での実行はDebianのみに制限されています”

—

4. ベストプラクティス:ディレクトリ構成例

「とりあえず全部 `main.yml` に書く」のは、半年後の自分を殺す行為だ。Roleベースの構成を徹底せよ。

.
├── inventory/
│ ├── production.ini
│ └── staging.ini
├── group_vars/
│ ├── all.yml # 全環境共通設定
│ └── prod.yml # 本番用秘匿情報など
├── roles/
│ └── common/
│ ├── tasks/main.yml
│ ├── templates/
│ └── handlers/main.yml
└── site.yml # 実行の起点(Roleを呼び出すだけにする)

—

最後に:なぜ「冪等性」に固執するのか

Ansibleのモジュールは、ただコマンドを叩くものではない。「あるべき状態(Desired State)」を宣言する言語である。

もしあなたが「シェルスクリプトをAnsibleで実行するだけ」の状態なら、それはAnsibleの皮を被った単なるリモート実行ツールだ。`lineinfile`や`shell`を多用しているなら、一度立ち止まって「専用のモジュールは存在しないか?」を調査してほしい。

「何度実行しても同じ結果になる」という安心感こそが、インフラエンジニアの精神的な自由を支える唯一の基盤だ。

さあ、コードを書いて、泥臭い手作業を自動化の彼方へ葬り去ろう。何かあれば、いつでもコードレビューを請け負う。

タイトルとURLをコピーしました