第4回 AWXを使って構築してみよう(1/1)

技術特集

はじめに

ここまで3回においてAnsibleの環境構築とPlaybookの書き方、Ansibleを用いた環境構築に関して紹介しました。しかしながら、CUIでの操作となっていたため苦手意識を持たれた方もいらっしゃったかと思います。
第4回の本稿では、以前紹介しました4種類のAnsibleのラインナップのうち、GUIツールの実行環境の構築及び実行方法を簡単に紹介します。

OSS版(AWX)と商用版(Ansible Tower)はほぼ同じため、本稿においてはOSS版(AWX)を用います。また、RedHat系のフリーOSであるCentOS7上に導入する手順を紹介します。

AWX環境の構築

AWX環境を構築するには、GitHub(ソースコード共有サービス)上で提供されているPlaybookを使用して、Docker環境上にコンテナの形式で構築する事になります。このため、事前にAnsible及びDockerをインストールする必要があります。快適な動作のためには、インストール先の環境にCPUのCoreが4つ以上ある事が望ましいですが、満たしていなくても動作します。

本稿では以下の流れでAWX環境の構築からAWXを使用したApacheのインストールまでの最低限の流れを紹介します。実際の利用にあたってはユーザの設定等実施することが望ましいですが、実施しなくても動かすことは可能であるため今回は省略しています。
表中の3-2、3-3は第2回で紹介しましたCUI版でのインベントリファイルの作成、表中の3-4はトップレベルのPlaybook作成に相当します。

No 作業項目 作業概要
1 Ansible、Dockerのインストール AWXを構築するために必要な事前準備としてAnsible、Dockerをインストールします
2 AWXのインストール Ansibleを使用してDocker上にAWXコンテナを起動します
3-1 「プロジェクト」の登録 作成済みのPlaybookがどこにあるかAWXに認識させます
3-2 「認証情報」の登録 操作対象サーバ/機器へのログイン方法を設定します
3-3 「インベントリー」の登録 操作対象サーバの接続情報の登録やグループ分けを行います
3-4 「ジョブテンプレート」の登録 「プロジェクト」、「認証情報」、「インベントリー」を関連付けます
3-5 「ワークフロージョブテンプレート」の登録 複数の「ジョブテンプレート」を順番に実行できるよう設定します
3-6 構築処理の実行 実行し、構築を行います

なお、AWXもAnsible TowerもPlaybookを作成、管理する仕組みを保有しておらず、作成済みのPlaybookの在りかを指定して使用することになります。Playbookはインストール時に作成されるコンテナ内で作成・管理する事も可能ですが、GitHubやGitLab(ソースコード共有サービスのOSS版)等のソースコードの共有や管理に特化したサービスのリポジトリにアップロードして管理する事を推奨します。

本稿の中で構築方法は紹介しませんが、別途GitLabの環境を用意しています。第2回で紹介しましたApacheインストールのPlaybookをそのGitLabにアップロードしてある状態を前提としています。今回はこのGitLab内に登録されたPlaybookを使用して、AWXでApacheをインストールする設定手順となっています。

1. Ansible、Dockerのインストール

Ansibleは本連載の第2回を参考に、AWXをインストールするサーバにインストールします。
Dockerは、依存関係のあるパッケージの導入後にDocker用のリポジトリを追加、yumを使用してインストールします。Docker-CE(コミュニティ版:無償)、Docker-EE(エンタープライズ版:有償)どちらで構築しても問題ありませんが、RHELはDocker- CEをサポートしません。RHEL上にインストールする場合はDocker-EEの使用を検討ください。

下図のコマンドを実行し、Dockerをインストールします。
https://docs.docker.com/install/linux/docker-ce/centos/#set-up-the-repository

# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# sudo yum-config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# sudo yum install docker-ce

※ なお、最新版やテスト版を使用したいといった場合は上記installのコマンドを実行する前に下記を実行し、対象のDockerを含むリポジトリが使用可能にします。

# sudo yum-config-manager --enable docker-ce-edge

2. AWXのインストール

Ansible、Dockerのインストールが完了しましたら、GitHubのリポジトリよりAWX環境構築のためのPlaybookを入手し、構築します。

git cloneコマンドを実行して最新のPlaybookを入手します。この結果awxという名前のディレクトリが作成されるので、その中に移動して、ansible-playbookのコマンドを実行します。この際、–e postgres_data_dir=/var/lib/pgdockerをオプションとして付与して実行するようにします。

# git clone https://github.com/ansible/awx.git
# cd awx
# ansible-playbook –i installer/inventory installer/install.yml \
–e postgres_data_dir=/var/lib/pgdocke

※標準では、Ansibleによって作成されるAWX用のデータベースのデータディレクトリが/tmpに作成される設定となっています。/tmpは10日の周期で自動的に掃除処理が実行されるため、必要なデータが消えてしまい、AWXが起動できなくなります。このオプションを付与することによってインストール時にデータディレクトリの場所が変更できるので、問題を回避できます。

インストールが完了するとawx_task、awx_web、memcached、rabbitmq、postgresの5つのコンテナが構築されます。ブラウザ(Google ChromeもしくはMozzila FireFoxを使用してください)でインストール先サーバのIPアドレスにアクセスすると、構築中の画面が表示されます。

しばらく待つとログイン画面が表示されます。
初期ユーザとパスワードは admin / passwordです。

ログインすると以下のダッシュボード画面が表示されます。
画面左の各設定画面へのリンクをクリックして設定を行います。

3. AWXを用いた環境構築の流れ

AWXを使用して環境構築を行う際は、まず最低限以下を実施する必要があります。
プロジェクト、インベントリー、認証情報の登録に関してはどの順番で設定を行っても問題ありません。

  • プロジェクトの登録
  • 認証情報の登録
  • インベントリーの登録

その後下記のテンプレートの登録を行います。テンプレートの登録作業においてプロジェクト、認証情報、インベントリーを関連付けることが出来ます。

  • ジョブテンプレートの登録
  • ワークフロージョブテンプレートの登録

ワークフロージョブテンプレートはプロジェクトやジョブテンプレート、別のワークフロージョブテンプレートを順番に実行するワークフローを作成する際に使用します。

登録完了後に実行ボタンをクリックすることで環境構築が開始されます。

テンプレートの登録の仕方には前図の通り大きく4パターン考えられます。

パターン 想定される使い方 使用例
パターン① 1つのPlaybook処理を特定のホスト・グループに実行します WebserverグループにApacheをインストールする
パターン② ジョブテンプレート(パターン①のセット)を順番に実行します ホスト・グループはジョブテンプレート毎に変更できます DBserverグループにMySQL、APserverグループにTomcat、WebserverグループにApacheをインストールする
パターン③ 特定のホスト・グループに複数のPlaybook処理を実行します WebserverグループにApache、Tomcat、MySQLを順にインストールする
失敗したら切り戻す
パターン④ パターン②、③のようなワークフローを順番に実行します 検証環境構築のワークフローが正常に実行出来たら本番環境構築のワークフローを実行する
失敗したら切り戻しのワークフローを実行する

3-1.「プロジェクト」の登録

AWXではPlaybookの作成や管理の機能を持っていないため、使用したいPlaybookがどこに存在しているかを認識させる設定を行う必要があります。
今回はApacheのPlaybookをGitLabで管理しているため、その場所を指定する設定を行います。

手順は以下の通りとなります。登録したいPlaybookの数分繰り返します。

1. ダッシュボード画面左の「プロジェクト」をクリックします。
2. プロジェクトの一覧の画面において追加ボタンをクリックします。

3. 遷移後の画面において必要情報を入力し、保存ボタンをクリックします。

SCMタイプでGitを選ぶとSCMURLという項目が表示されるので、GitLabのApache用Playbookを入手する際のURLを記載します。
今回は以下の情報を入力します。

項目
名前 apache
SCMタイプ Git
SCMURL http://(GitLabのapache.gitまでのPath)
SCM更新オプション クリーニング

3-2.「認証情報」の登録

AWXから各構築対象のサーバに対してのログイン方法を設定します。
各種認証方法から最適なものを選択し、それぞれが必要とする設定値を入力します。

※ 認証情報は登録時に暗号化して保存されるため、パスワード等後から確認する事はできません。再登録する際は削除して同じ名前で登録する必要がありますので、注意して登録します。

手順は以下の通りとなります。登録したい認証情報の数分繰り返します。
1. ダッシュボード画面左の「認証情報」をクリックします。
2.認証情報の一覧画面において追加ボタンをクリックします。

3.遷移後の画面において必要情報を入力し、保存ボタンをクリックします。

今回Apacheを導入するサーバはユーザ名とパスワードを入力する方式の認証を行っている事とします。このため、認証情報タイプでマシンを選択し、ユーザ名とパスワードを入力します。

項目
名前 webserver
認証情報タイプ マシン
ユーザ名 root
パスワード password

※ 鍵ファイルの認証の場合も同じくマシンを選ぶことになります。

3-3.「インベントリー」の登録

Playbookをどのサーバに対して実行するか、どういった条件の元で実行するかを設定します。同一の処理を行うグループ分けや接続にあたって個別に必要となる設定等を入力します。

手順は以下の通りとなります。登録したい認証情報の数分繰り返します。
1. ダッシュボード画面左の「インベントリー」をクリックします。
2. インベントリー一覧の画面において追加ボタンをクリックし、インベントリーを選択します。

3. 遷移後の画面においてインベントリーにつける名称を記載し、保存ボタンをクリックします。

今回はインベントリーの名前として以下を使用する事とします。

画面 項目
新規インベントリ 名前 myhosts

4. 保存するとグループボタンが押せるようになるので、クリックします。

5. 遷移後の画面においてグループの追加ボタンをクリックします。

6. グループの作成の画面においてグループ名を入力し、保存ボタンをクリックします。

今回はApacheをwebserverグループに所属するサーバにインストールする事としますので、グループ名として以下を登録します。

画面 項目
グループの作成 名前 webserver

7. 保存するとホストボタンが押せるようになるので、クリックします。

8. 遷移後の画面において追加ボタンをクリックし、新規ホストを選択します。

9. ホストの作成の画面においてホストの情報を入力し、保存ボタンをクリックします。
5~9を必要なグループ、ホスト数分繰り返します。

今回は1台だけを想定しているため、webserverグループに操作対象のサーバを登録します。以下の設定を行います。

画面 項目
ホストの作成 名前 Ipアドレス

3-4.「ジョブテンプレート」の登録

ここまでに登録を行ってきたプロジェクト、認証情報、インベントリーを関連付けたものをテンプレートと呼んでいます。
ジョブテンプレートは特定のホスト・グループに対して1つのPlaybookを実行するときに使用します。Playbook内で変数を使用するようにしている場合、ジョブテンプレートの設定の中で合わせて変数の値を定義することも出来ます。
手順は以下の通りとなります。登録したいジョブテンプレートの数分繰り返します。

1. ダッシュボード画面左の鉛筆のアイコンをクリックします。
2. 追加ボタンをクリックし、ジョブテンプレートを選択します。

3. 遷移後の画面において必要情報を入力し、保存ボタンをクリックします。

インベントリーやプロジェクト、認証情報は、虫眼鏡のアイコンをクリックする事で表示される一覧の中から選択できます。Playbookに関してはプロジェクトを選択するとドロップダウンリストの中に名称が表示されるので選択します。
複数のグループが1つのインベントリーに登録されている場合、制限の枠内にグループ名を記載することで実行対象を絞り込むことが出来ます。

これまでに登録してきた情報を元に以下の設定値を入力します。

項目
名前 ApacheInstall
インベントリー myhosts
プロジェクト apache
Playbook site.yml
認証情報 webserver
制限 webserver
オプション 権限昇格の有効化

3-5.「ワークフロージョブテンプレート」の登録

複数のPlaybookや複数のジョブテンプレート、作成済みのワークフローを自動で順番に実行したい、前作業の成否によって実行する処理を変えたい等の場合、ワークフロージョブテンプレートも設定します。

今回は前手順で作成したジョブテンプレートをワークフロージョブテンプレートに登録す手順を紹介します。手順は以下の通りとなります。

1.ダッシュボード画面左の鉛筆のアイコンをクリックします。
2.追加ボタンをクリックし、ワークフロージョブテンプレートを選択します。

3. 遷移後の画面においてワークフロージョブテンプレートにつける名称を入力し、保存ボタンをクリックします。

以下の設定値を入力します。

画面 項目
新規ワークフロージョブテンプレート 名前 Install-web

※ 一連の処理の中で共通の変数を使用したい場合はワークフロージョブテンプレートの設定画面において値を定義することが出来ます。

4.保存するとWorkflow Visualizerが選択できるようになりますので、クリックします。

5. STARTのボックスをクリックすると空白のボックスが表示されます。併せて画面右にジョブテンプレートが選択できる設定画面が表示されます。表示されたジョブテンプレートの一覧から必要な物を選択し、選択ボタンをクリックします。登録が終了したらSAVEボタンをクリックします。

今回は1つだけなので以下の情報を入力します。

画面 項目
Workflow Visualizer画面 テンプレート名 ApacheInstall

※ 今回は1つですが、必要な数分ジョブテンプレートの登録を繰り返すことで以下のようなワークフローを作成することが出来ます。
登録が完了したジョブテンプレートのボックスの上にマウスをあわせると緑の+と赤の×が表示されます。追加する場合には+を、削除する場合には×をクリックします。

ジョブテンプレート選択時に成否に応じて使用するジョブテンプレートを変える事も可能です。失敗時のリカバリ処理等に活用できます。

3-6.構築処理の実行

入力が完了したらテンプレートの一覧画面においてロケットのアイコンをクリックする事で構築処理の実行を行う事が出来ます。

構築中は、ジョブの画面において進捗を確認する事が出来ます。

それぞれのジョブテンプレートにおける進捗も詳細リンクをクリックする事で確認する事が出来ます。出力される内容はCUI版で実施した際と同じです。

おわりに

今回はAWXを使って構築してみようという事で、最低限必要な設定で一連の流れを紹介しました。Playbookが作成済みである前提とはなりますが、CUI版に抵抗を感じる方でも活用できる気がしたのではないでしょうか?
実案件においては複数のユーザが利用したり、完了時に通知が行われるようにしたりと言った設定も必要になるかと思います。AWXではこれらも行うことが出来ます。
実際の案件においてはオンプレミスのLinuxサーバだけでなく、VMwareにおける仮想環境の構築やAWSのようなクラウド環境等への対応が必要になってくると思います。次回、本連載の最終回では、オンプレミス以外の環境を構築する方法に関して紹介します。