やあ。クラウドの深淵を覗き込み、IaC(Infrastructure as Code)の荒波を乗り越えてきた君へ。
「サーバーの設定なんて、手作業でやればいいじゃないか」――かつて新人の頃の私もそう思っていた。だが、その考えがどれほど危険か、大規模環境で深夜3時の障害対応に追われた瞬間に思い知ることになる。
Ansibleは、単なる自動化ツールではない。それは、君が構築したインフラの「あるべき姿(State)」を定義し、何度実行しても同じ結果をもたらす「冪等性(Idempotency)」を担保するための最強の武器だ。
今日は、現場で血肉となっている「絶対に外せない頻出モジュール20選」を授けよう。これをマスターすれば、君の作業時間は劇的に短縮され、ヒューマンエラーは過去のものになる。
—
1. Ansibleを最短で最強の環境にする(セットアップ)
まずは環境を作ろう。Macなら一瞬だ。
Pythonの仮想環境を用意してAnsibleをインストール
python3 -m venv .venv
source .venv/bin/activate
pip install ansible
インストール確認
ansible –version
2. 最初のHello World: 「ping」で疎通を確認する
Ansibleにおいて最も重要なのは、対象サーバーと会話ができることだ。
自身のローカルを対象にpingを打つ
ansible all -i localhost, -c local -m ping
成功すれば `{“changed”: false, “ping”: “pong”}` が返ってくる。これが君の自動化の第一歩だ。
—
3. 現場で毎日使う!頻出モジュール20選
モジュールは「何をするか」を決める最小単位だ。これらを組み合わせれば、どんなサーバーも数分で組み上がる。
【パッケージ管理】
1. `apt` / `yum` / `dnf`: OSごとのパッケージマネージャ。`state: present` でインストール、`latest` で更新。
2. `package`: OSを意識せず共通化したい場合に使う。「とりあえず何か入れておけ」という時に便利。
【サービス制御】
3. `service`: プロセスの起動・停止・再起動。`enabled: yes` を忘れるな。再起動時に死ぬ事故を防げる。
4. `systemd`: より詳細なsystemd管理(リロードなど)が必要な場合に。
【ファイル操作(最重要)】
5. `template`: Jinja2テンプレートを用いて設定ファイルを動的生成する。実務の8割はこれだ。
6. `copy`: ローカルファイルをリモートへ送る。静的な設定に。
7. `file`: シンボリックリンク作成、パーミッション変更、ディレクトリ作成。
8. `lineinfile`: ファイル内の一部行だけ書き換える。多用注意(複雑化しやすいため)。
【システム・ユーザー管理】
9. `user`: ユーザー追加、削除、グループ付与。
10. `group`: グループ管理。
11. `hostname`: ホスト名の設定。
12. `authorized_key`: SSH公開鍵の配布。アクセス権限管理の要。
【コマンド実行】
13. `shell`: シェルスクリプト実行。ただし、「冪等性が担保できない」ため、極力モジュールを使うこと。
14. `command`: `shell`より安全だが、リダイレクトやパイプが使えない。
【その他便利機能】
15. `debug`: 変数の中身を表示する。デバッグの命綱。
16. `set_fact`: 実行中に変数を定義する。
17. `assert`: 前提条件のチェック。「OSがUbuntuじゃなければ止める」といった制御が可能。
18. `stat`: ファイルの存在確認。
19. `unarchive`: 圧縮ファイルの解凍。
20. `wait_for`: 指定したポートが開くまで待つ。デプロイ待ちに必須。
—
4. 実戦的なコード例:Webサーバー構築
これらを組み合わせた「現場のPlaybook」の雛形だ。これを読めば、Ansibleの作法が手に取るようにわかるはずだ。
—
- name: Webサーバーの自動構築
hosts: webservers
become: yes # root権限で実行
tasks:
- name: Nginxをインストール
apt:
name: nginx
state: latest
update_cache: yes
- name: 設定ファイルをテンプレートから生成
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
mode: ‘0644’
notify: restart nginx # 変更があった時だけ再起動する(効率化!)
- name: サービスを起動して自動起動を有効化
service:
name: nginx
state: started
enabled: yes
handlers: # 変更があった時だけ発火する「ご褒美」のような機能
- name: restart nginx
service:
name: nginx
state: restarted
—
先輩からのアドバイス:冪等性を守れ
Ansibleで最も大切なのは、「何度実行しても同じ結果になること(冪等性)」だ。
例えば、`shell: echo “127.0.0.1 site.com” >> /etc/hosts` を実行し続けると、実行するたびに同じ行が追記され、ファイルが巨大化して破綻する。
常に「そのモジュールは、既に設定済みなら何もしないか?」を意識してほしい。それができれば、君のインフラは強固で、管理コストが限りなくゼロに近い「美しいシステム」になる。
さあ、まずは小さな設定一つから自動化してみよう。分からないことがあれば、またいつでも聞きに来てくれ。エンジニアの旅は、まだ始まったばかりだ。