BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【Ansible】AnsibleTowerでできること

 こんにちは!
 BFT名古屋支店の、佐野です。

 今回はAnsibleの機能拡張ソフトウェアである“AnsibleTower”に関する記事です。

 以前に書いた記事にて、Ansibleの機能拡張ソフトウェアであるAnsible TowerとAWX projectの違いについてを取り扱いました。
 ですが、そもそもの話「Ansible Tower(とAWX project)って何ができるの? 何をするためのもの?」という事に関しては触れておりませんでした。
 ですのでこの記事では、Ansible Towerによってできることについて扱っていきます。


はじめに:Ansible TowerとAWX project

 概要的な所では上述した以前の記事にも書き記しておりますが、Ansible TowerとAWX projectはそれぞれAnsibleの機能を拡張し、Playbookの実行のコントロール、組織や役職ベースのジョブ作成および実行権限の管理、Ansibleの情報をGUIおよびダッシュボードによって可視化することなどが可能となるソフトフェアです。
 Ansible TowerとAWX projectの違いは大きく言えば有償か無償かの違いであり、以前の記事にて詳しく紹介しておりますので、ここでは割愛致します。
 また今回はAnsible Towerを運用している状態をベースとした内容となります。


Playbookを取りまとめて管理できる

 AnsibleではPlaybookを用いて管理対象へ処理を飛ばすことで、それらの構成管理を自動で行うことができます。
 しかし、実際に運用する際、複数のシステムに対してそれぞれ必要なPlaybookをAnsibleサーバーに置いていたりすると、Playbookの管理が大変です。
 またいくつものPlaybookがAnsibleサーバー内でごちゃごちゃになっている状態の場合、例えば「システムAに対してのみ使うべきPlaybookを、誤ってシステムBに流してしまった」といったミスの発生も有り得てきます。
 「このPlaybook(群)は誰が何のために作ったのか分からない」という認識の共有にも難が生じてくる状況も考えられるでしょう。

 AnsibleTowerでは、その散らばってしまいがちなPlaybookを取りまとめ、“プロジェクト”という単位で管理を行なうことができます。
 例えば「システムAに使用するPlaybookはプロジェクトAとして取りまとめる」ことで、どのPlaybook(群)を如何なる場合で使用するのかといったことを視覚的に分かりやすくすることが可能です。

f:id:bftnagoya:20210203155504p:plain

 またプロジェクトは後述する組織に紐づけることが可能であり、ある部署内でのみ使用するべきPlaybookがあるプロジェクトを、AnsibleTower上ではその部署以外の部署に属するユーザーから見えなくし、利用できないようにするといった管理もできるようになります。


Playbook(プロジェクト)を用いたジョブの作成、実行の権限を管理できる

 通常のAnsibleにおいてはユーザーとしてログインすれば、配置されている全てのPlaybookおよびインベントリファイルを使用した構成管理ができてしまいます。
 もし本来Playbookの実行権限を持つべきではないユーザーがログインしてしまった場合は、不適切な管理対象に実行すべきでないPlaybookを実行してしまうなどの事故発生も考えられます。
 また部署別に使用するPlaybook、使用しないPlaybookがある場合でも、ログイン時にはどちらも見え、かつ実効ができてしまうため、ややこしいと思うことも増えていくでしょう。
 この問題はひとつのAnsibleサーバーに関わる部署が増える程顕著になっていきます。

f:id:bftnagoya:20210203155442p:plain

 AnsibleTowerの場合は、ブラウザGUIにてログインする場合のユーザーと、そのユーザーを管理する組織を作成することができます。
 その組織にプロジェクトや、Playbookの実行単位となるジョブを組織に属させることによって、その組織に入っているユーザーのみがそのプロジェクトおよびジョブの閲覧・実行を行なえるようになります。

f:id:bftnagoya:20210203155445p:plain

 また組織内におけるジョブの作成、実行を行なう権限に関しても、以下図例のようにユーザーに対して細かく設定することができます。

f:id:bftnagoya:20210203155449p:plain


定期的かつ自動的にジョブを実行できる(スケジューリング機能)

 構成管理対象に対して定期的に実行したいPlaybookがある場合、Ansible単体では手動で逐一Playbookの実行を行なうことになります。
 しかしAnsibleTowerにおいては、ジョブの実行をスケジューリングすることが可能であり、指定した日時にジョブを自動実行するよう設定できます。
 また繰り返し実行も可能でありますので、日次や週次で実行させたい処理がある場合は特に有効に活用できる機能です。

f:id:bftnagoya:20210203155452p:plain


複数のジョブをワークフローに組み込んで一連に実行できる

 以前の記事でAnsibleにおけるRoleの仕様を利用したPlaybookの順次実行の方法を紹介いたしましたが、AnsibleTowerの場合はワークフローを用いることでRole利用時よりも簡便かつ詳細にPlaybookの順次実行や、Playbookの並行実行を行なうことができます。
 ワークフローは以下の図のように、ひとつのジョブの実行終了および実行結果に応じ、他のジョブを続けて実行できるようにするものであり、視覚的にジョブの実行順序の定義が可能です。
 またジョブの成功・失敗による分岐処理も組み込むことができます。

f:id:bftnagoya:20210203155455p:plain

f:id:bftnagoya:20210203155458p:plain

 また、このワークフローを用いた一連のジョブについてもスケジューリングによる自動実行を行なうことができます。


実行結果の通知をメールなどで受け取ることができる

 AnsibleTowerでは、ジョブの実行結果をメールやSlack、Webhookに通知として送信する機能があります。
 ジョブを手動で実行する場合はAnsibleTowerのGUIで直接実行結果を見ることで済みますが、スケジューリングによって自動実行されるジョブの実行結果は、AnsibleTowerの実行ログから掘り出すか、この通知機能によって受け取るかのどちらかになります。
 AnsibleTowerのログの閲覧性はAnsibleよりも優れているとはいえ、自動実行ジョブの実行結果をいちいち見つけ出すというのでは時間がかかるため、この通知機能を使用することが一般的です。

 またジョブの成功、失敗といった実行結果の他、ジョブの設定(ジョブテンプレート)の変更・更新があった場合にも通知を出すことができます。

f:id:bftnagoya:20210203155501p:plain


さいごに:Playbook自体の管理について

 以上がAnsibleTowerにおける「できること」の概要となります。
 小規模または少人数で管理可能な環境においてはAnsible単体で運用することも十分可能ですが、複数の部署をまたいでAnsibleを用いた運用を行なう場合には、AnsibleTowerの導入を検討してよいと考えます。

 ちなみにPlaybookの作成や編集といった、Playbook自体の管理はAnsibleTowerで行なうことはできません。
 正確にはAnsibleTowerにはPlaybookの編集系機能がないため、通常のAnsibleと同じくPlaybookの作成・編集・追加等はCLI上でのみ行なうことになります。
 なので真の意味でのPlaybookの管理は、AnsibleTowerのみでは難しいというところです。

 しかしながらAnsibleTowerのプロジェクトは、AnsibleTowerのローカルにあるPlaybookだけではなく、Git、SubversionMercurialといったソースコード管理システムからPlaybookを引っ張ってくることが可能です。
 AnsibleTowerとソースコード管理システムの連携については、また別の記事でお送りしたいと思います。