『Ansible実践ガイド[基礎編]』を読んで

Table of Contents

1. はじめに

Ansible、使っていますか?

Ansibleは、サーバーの設定管理や自動化を行うためのツールであり、YAML形式のPlaybookを書くことで複数のサーバーに対して一括で任意のタスクを実行できる便利なツールです。

私は今まで業務と趣味の両方でAnsibleを使う機会は多かったのですが、体系的に基礎から学んだことがありませんでした。 今回は会社から本を買ってもらえる機会があったため、この機にAnsible実践ガイド[基礎編]を読んでみることにしました。

Ansible実践ガイド[基礎編] 表紙

本を実際に読んでみて思ったこと・感じたことを、率直にまとめてみます。

2. 本の全体的な印象

実際に読んでみると、思っていた以上に初心者向けの内容でした。 Playbookやインベントリの概念や基本的な書き方など、本当に「Ansibleって何?」という人が読んでも理解できそうなレベル感で、学び初めの最初の一冊としては非常にわかりやすくまとまっていると感じました。

逆に、ある程度Ansibleを使った経験がある自分にとっては復習の意味合いが強かったかな、という印象です。 しかし、改めて基礎を整理できたのは良かったですし、知らなかった小技もいくつか発見できて読む価値はありました。

3. 特に役立ったポイント

本を読んで幾つか「これは使える!」と思ったものがあったので簡単に紹介します。

3.1 パフォーマンスチューニング

まずは 5-3 パフォーマンスチューニング のセクションに書いてあった以下の内容です。

  • ファクトキャッシュ の活用
  • ストラテジプラグイン によるタスク並列処理

ファクトキャッシュ は、Ansibleが管理対象ホストから収集する情報(ファクト)をキャッシュしておく仕組みです。 これを使うことで、一度ファクトを収集したホスト上ではその情報を使い回すことができ、2回目以降の実行でPlaybookの実行速度が向上することが期待されます。

ストラテジプラグイン は、Ansibleのタスク実行の順序や並列度を制御するための仕組みです。 本著では linear, host_pinned, free の3種類のストラテジプラグインが紹介されていました。

  • linear: デフォルトのストラテジで、タスクごとに全ホストで待ち合わせて次のタスクに進む。タスクで他ホストのタスク結果に依存するような処理がある場合にも安全。
  • host_pinned: ホストごとにタスクを進め、待ち合わせはしない。ホスト数がPlayの並列実行数を超える場合は、先にキューに積まれたホストがPlay全体を終了したら残りのホストのPlayが開始される。ホストごとにタスクの順序は保たれるが、他ホストのタスク結果に依存する処理がある場合には注意が必要。
  • free: ホストごと、タスクごとにキューに積まれるイメージ。全てのホストのタスクが並行実行されるが、同時に実行されるタスクは設定された並列実行数を超えない。host_pinned と同様に、ホストごとにタスクの順序は保たれるが、他ホストのタスク結果に依存する処理がある場合には注意が必要。

他ホストのタスク結果に依存する処理” というのがパッと思いつかないかもしれませんが、例えばKubernetesクラスターを構築するPlaybookにおいて、ある1つのControl Plane Nodeで kubeadm init & kubeadm token create をして、残りのNodeでは kubeadm join を実行するようなタスクが該当します。kubeadm join のタスクでは kubeadm token create の標準出力を使う必要があるためホスト間でタスク順序の依存が発生し、例えば kubeadm token create が完了する前に kubeadm join のタスクが実行されてしまうと失敗してしまいます。

このような危険性をしっかりと理解しつつ、これらのストラテジプラグインを適切に使い分けることで、Playbookの実行時間を大幅に短縮できる可能性がありそうです。

3.2 Playbookのデバッグ

次に 5-4 Playbook のデバッグ の内容です。

  • ansible-console
  • Playbook Debugger

ansible-console は、対話型のAnsibleシェルで、Ansibleのコマンドを対話的に実行できるツールです。 通常はコマンドラインから ansibleansible-playbook コマンドを実行すると思いますが、ansible-console を使うと対話的にコマンドを入力してAnsibleを実行することができます。 これによってAnsibleのモジュールをshell上でコマンドのように実行することができ、Playbook構築中の動作確認に便利そうです。

Playbook Debugger は、Ansible Playbookの実行をステップ実行できるデバッガーです。 使い方は各種プログラミング言語のデバッガーと同じ感じで、タスクがこけたところで実行が止まり、変数やモジュール引数の確認、またそれらの値を変更して失敗したタスクを再実行ということまでできます。 今まではいつも debug モジュールを仕込んで変数の中身を確認したりしていたので、これはぜひ使ってみたいと思いました。

4. まとめ

『Ansible実践ガイド[基礎編]』は、Ansibleの基礎をしっかりと学べる良書だと思います。 特に、これからAnsibleを始める人にとっては最適な一冊でしょう。

逆にある程度Ansibleを触ったことがある人には物足りない内容かもしれませんが、個人的には Playbook Debugger という新しい武器を手に入れられただけでも読んだ価値がありました。 早速試してみようと思います!

最後まで読んでいただき、ありがとうございました。