【入門編】Ansible Playbookの書き方入門!YAMLの構文ルールと基本構造の完全ガイド – インフラ構成管理(IaC)活用バイブル

こんにちは!インフラエンジニアの先輩です。

日々のサーバー構築や設定変更、手作業でポチポチとコマンドを叩いていませんか?「あっちのサーバーは設定したのに、こっちのサーバーには設定し忘れた……」なんてヒヤッとした経験、誰しも一度や二度はあるはずです。

そんなインフラ管理の絶望から私たちを救い出してくれるのが、構成管理ツール「Ansible(アンシブル)」です。

今回は、Ansibleの心臓部である「Playbook(プレイブック)」の書き方について、YAMLの基本から実戦で使えるサンプルコードまで、徹底的に解説していきます。これをマスターすれば、あなたのインフラ管理は劇的に楽になり、手作業のミスとは永久におさらばできますよ。

—

1. AnsibleとPlaybookってそもそも何をするもの?

Ansibleは、一言で言うと「エージェントレスの自動化ツール」です。
管理対象のサーバーに特別な常駐プログラム(エージェント)を入れる必要がなく、手元のPCからSSH経由でサクッとサーバーの望ましい状態(Desired State)を作り上げてくれます。

そのAnsibleに「どのサーバーに、どんな手順で、何をするか」を指示するための台本(シナリオ)がPlaybookです。YAMLという人間にも読みやすい形式で記述するのが特徴です。

なぜ「シェルスクリプト」じゃダメなの?

「シェルスクリプトでも自動化できるじゃん」と思うかもしれません。しかし、シェルスクリプトで「Nginxがインストールされていなければインストールし、起動していなければ起動する」という処理を書こうとすると、if文だらけの複雑なコードになりがちです(そして何度も実行すると壊れる)。

一方、AnsibleのPlaybookは「冪等性(べきとうせい)」が担保されています。これは、「何度同じPlaybookを実行しても、サーバーの状態は同じ(正しい)結果になり、すでに設定済みの部分は安全にスキップされる」という、インフラ管理において神のようにありがたい性質です。

—

2. 開発環境のセットアップ(最短ルート)

まずは手元でAnsibleを動かせる環境を作りましょう。MacやLinuxであれば、Pythonのパッケージ管理システムであるpipを使うのが一番確実です。

Ansibleのインストール
pip install ansible

インストール確認
ansible –version

これだけで準備は完了です。コンテナや複雑なミドルウェアのインストールは不要。Pythonさえあれば、今すぐ世界を自動化できます。

—

3. 陥りやすい罠!YAMLのインデント(インデントエラー)の鉄則

初心者エンジニアがAnsible(Playbook)で最初に直面する最大の壁、それが「YAMLの構文エラー(IndentationError)」です。

YAMLは見た目がシンプルゆえに、ちょっとしたスペースのズレで容赦なくエラーを吐きます。以下の鉄則を体に叩き込んでください。

1. タブ(Tab)は絶対に使わない!(必ず半角スペースを使用する)
2. インデントは基本「2文字」または「4文字」で統一する(途中で混ぜない。迷ったら2文字がおすすめ)
3. コロン(`:`)の後には必ず半角スペースを入れる(例: `name: サーバーのセットアップ`)

これだけ守れば、YAMLのパースエラーの9割は防げます。

—

4. 【実践】Hello Worldとしての基本Playbook

それでは、実際に動くPlaybookを書いてみましょう。
今回は、ローカルの自分自身(localhost)に対して、Apache(httpd)をインストールし、カスタムの「Hello World」ページを配置するという実用的なタスクを実行します。

以下の内容を `site.yml` という名前で保存してください。

Playbookの全体像(`site.yml`)

—
=====================================================================
Playbook名: Webサーバーの基本構築サンプル
概要: localhostに対してHTTPDをインストールし、静的ページを配置する
=====================================================================

  • name: 開発環境のWebサーバー自動構築

hosts: localhost # 対象となるホスト(今回は自分自身)
connection: local # SSHではなくローカル実行を指定
become: yes # root権限(sudo)に昇格して実行する

# 1. サーバーで事前に定義しておきたい変数
vars:
web_message: “こんにちは!Ansibleの世界へようこそ!”

# 2. 実際に実行するタスクのリスト
tasks:

  • name: 1. Apache (httpd) パッケージがインストールされていること

ansible.builtin.yum:
name: httpd
state: present

  • name: 2. Apacheサービスが起動しており、自動起動が有効であること

ansible.builtin.service:
name: httpd
state: started
enabled: yes

  • name: 3. カスタムのindex.htmlを配置する

ansible.builtin.copy:
content: |


Ansible Test

{{ web_message }}

このページはAnsibleによって自動生成されました。


dest: /var/www/html/index.html
owner: root
group: root
mode: ‘0644’

—

5. 構成要素の解説:これがPlaybookの骨組みだ!

先ほどのコードを細かく分解して、プロの視点で解説します。

  • `hosts`: どこに対してこの処理を行うかを指定します。今回は `localhost` ですが、実務では `web_servers` のようなグループ名を指定します。
  • `become: yes`: システムの奥深くに触れる設定(パッケージのインストールやサービスの有効化)には管理者権限が必要です。これを宣言するだけで、内部でスマートに `sudo` を実行してくれます。
  • `tasks`: 実行する処理を上から順番に並べたものです。
  • モジュール(`ansible.builtin.yum`, `ansible.builtin.service` など): Ansibleの最大の武器です。「どうやってインストールするか(コマンド)」ではなく、「どういう状態にしたいか(状態の宣言)」を記述します。
  • `state: present` → 「存在していなければインストールする(あれば何もしない)」
  • `state: started` → 「起動していなければ起動する(起動中なら何もしない)」

まさに、これが冪等性の正体です。

—

6. 実行と動作確認

書いたPlaybookを実際に動かしてみましょう。以下のコマンドを実行します。

ansible-playbook site.yml

実行すると、ターミナルにカラフルなログが流れます。

PLAY [開発環境のWebサーバー自動構築]

TASK [Gathring Facts]
ok: [localhost]

TASK [1. Apache (httpd) パッケージがインストールされていること]
changed: [localhost]

TASK [2. Apacheサービスが起動しており、自動起動が有効であること]
changed: [localhost]

TASK [3. カスタムのindex.htmlを配置する]
changed: [localhost]

PLAY RECAP
localhost : ok=4 changed=3 unreachable=0 failed=0 skipped=0

  • `changed`: 実際にサーバーの状態を変更したタスク
  • `ok`: すでに望ましい状態だったため、何もしなかった(安全にスキップされた)タスク

ここで、もう一度同じコマンド(`ansible-playbook site.yml`)を実行してみてください。

今度は、すべてのタスクが `ok` に変わり、`changed` が 0 になるはずです。これが「何度実行しても安全(冪等)」という感動の瞬間です。

—

7. おわりに:明日から使える自動化の第一歩

今回は、Ansible Playbookの基本構造とYAMLの作法、そして実際に動くサンプルコードを通じて、インフラ自動化の基礎を解説しました。

「サーバーの構築手順をドキュメントに書いて、手作業でコピペする」という泥臭い時代はもう終わりです。Playbookという「コード化された台本」があれば、ボタン一つでいつでも何度でも、寸分狂わぬクオリティでインフラを再現できます。

これをマスターすれば、あなたの毎日の作業は劇的に楽になり、残業時間も減り、何より夜間に「あのサーバーの設定、大丈夫だっけ……」と冷や汗をかくことがなくなります。

さあ、次は複数のサーバーグループに対するグループ変数の適用や、ロール(Roles)を使った高度なモジュール分割に挑戦してみましょう。インフラエンジニアの新しい扉が、今、開きます!

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