Usual Software Engineer

よくあるソフトウェアエンジニアのブログ

Ansible TowerのOSS、AWXでAnsibleの実行管理をする

AWX をご存知でしょうか。 Ansible Tower の OSS 版として公開された、 Web インターフェイスと REST-API を持った Ansible の実行管理ができるプロダクトです。 今まで Ansible を使う時、実行者がそれぞれのマシンで実行したり、それを避けて Jenkins などを用意してそこで実行したりなど、 きっちり実行環境を管理するには面倒な部分がありました。 AWX を使うと、ジョブとして playbook の実行を管理できたり、ジョブをスケジュール実行できたりと、中央集権で実行管理をすることができるので色々とハッピーになります。

公式ドキュメントはこちら。

docs.ansible.com

実際 Ansible Tower は使ったことがないのですが、ドキュメントも同じなので同一のものと思って良さそうです。 今回はこちらの Git リポジトリを使い、 Vagrant 上に AWX のホストを立ててお試ししてみます。

github.com

vagrant up だけで AWX が立ち上がります。 VM の構成は以下のようになっています。 server-01 はただの playbook 実行先として用意したサーバです。 *1

  +--------+          +-----------+
  | awx-01 |-- ssh -->| server-01 |
  +--------+          +-----------+
     :80                   :80
      ^                     ^
      |                     |
   :10080                :11080
             localhost

ブラウザで localhost:10080 にアクセスしてみましょう。デフォルトの system administrator の ID は admin 、 パスワードは password でログインできます。

f:id:innossh:20171112144511p:plain

LDAP 連携を設定してユーザ管理をすることもできますが、今回はユーザやチーム、組織の設定は割愛します。 ではさっそく playbook 実行の準備をしていきましょう。

まずは AWX から playbook 実行対象のサーバへの credential を登録します。 今回の例では Vagrant で作成したホストの vagrant ユーザに ~/.vagrant.d/insecure_private_key を使用しているので、これを流用して Machine タイプの credential を登録しましょう。

f:id:innossh:20171112144440p:plain

credential が用意できたらメインとなる project を登録します。 playbook を含む Git リポジトリを設定するのが一般的でしょうか。例では https://github.com/innossh/awx-example.git を設定してください。もしプライベートリポジトリを使用する場合は、 SCM 用の credential を登録しそれを設定してあげる必要があります。

f:id:innossh:20171112144836p:plain

登録後は自動的に Git リポジトリの clone が始まるので、失敗している場合は設定を見直してください。

続いて playbook 実行対象のサーバの inventory を登録します。 host や group は手動で入力して登録することもできますが、先ほど Git リポジトリをプロジェクトに登録したのでそれを使うこともできます。

f:id:innossh:20171112145821p:plain

一度保存した後、 ADD SOURCE を選択してリポジトリ内のファイルから対象の inventory を選んであげてください。例では files/inventory にある inventory を選びます。

f:id:innossh:20171112145838p:plain

sync をすると、 hosts にサーバが現れます。

f:id:innossh:20171112150248p:plain

ここまで準備できたら job template を作成します。今回は Nginx をインストールするジョブを登録してみましょう。

f:id:innossh:20171112150704p:plain

登録した credential や project を選んで job template に設定します。 例では files/nginx.yml があるのでそれを使います。 PROMPT ON LAUNCH にチェックを入れると、ジョブ実行時にプロンプトでパラメータを選択することができるようになります。

f:id:innossh:20171112151036p:plain

最後にジョブを実行しましょう!ボタンをポチるだけです。 Vagrant で立てたもう一つのVMserver-01 が inventory 指定されているので、 AWX から そのホストに playbook が実行されます。

f:id:innossh:20171112151244p:plain

実行後は playbook の出力をほぼリアルタイムで確認することができます。便利ですね!

f:id:innossh:20171112151720p:plain

ちゃんと server-01 に Nginx がインストールされたかどうか、ブラウザで localhost:11080 にアクセスしてみましょう。 Nginx のデフォルトページが表示されたら完了です。

はじめは AWX での用語や構造が慣れずに設定することが多いようにも感じますが、 REST-APICLI も提供されているので、ジョブテンプレートの作成など Web ブラウザを使わずに CLI で行う方が簡単かもしれません。 ただ tower-cli はまだ発展途中ということもあり完璧なものではないので GitHub の issue を確認するなど気をつけましょう。

AWX によってチームで Ansible を使う場合に環境が共通化できてとても良いですね。 Slack への通知機能なども揃っています。リリースの自動化やバッチの定期実行など使い方は様々、これで Ansible ライフが更に快適になりそうです。

*1:追記:以降の手順のインベントリやジョブテンプレート作成も VM 起動時の playbook の中で自動で作成されるようにしました