RHEL8でのAWXセットアップ手順
『IT自動化の力でビジネス加速を全ての企業に』
”IT自動化の専門会社”、リアルグローブ・オートメーティッド(RGA)の技術ブログ編集部の馬塚です。
RGAが提供するIT自動化サービスでは、「Ansible」という構成管理ツールを利用することが多いですが、通常は自動化コードを実行するAnsible Engineの機能と、それをGUIで管理するためのAnsible Towerという機能をセットで提供しています。
Ansible Towerを利用するためにはRed Hat社のサブスクリプション購入が必要となりますが、簡単にお試しでさわってみるだけであれば、「AWX」というアップストリーム版(無償)を利用することができます。
今回、AWS EC2上のRHEL8にAWXをインストールし、GitHubとの連携設定まで実施した手順について記載します。
なお、Ubuntuでのインストール方法については、「Ansible AWXの構築方法」という別記事がありますのでそちらをご覧ください。今回対象とするRHEL8では、デフォルトで dockerコマンド 及び Dockerコンテナエンジンが取り除かれている ことで少し手間取る部分があったため、その対応についても後述しています。
――――――――――――――――――――――――――――――――――
導入環境とインストール内容について
AWXのインストーラが格納されたGitHubのREADMEに、AWXをインストール&実行するために必要なシステム要件が記載されています。
今回は上記要件を満たす最低限のスペックである「t2.medium」インスタンスタイプでEC2を立ち上げました。また、AWXは実行環境として以下のいずれかを利用できます。
今回は最も導入が容易な Docker(Docker Compose)を利用します。
Docker ComposeでAWXを実行するためには、以下のソフトウェアがインストールされている必要があります。
これらを順にインストールしていきます。
※ 独自のコンテナイメージ上でAWXを動かす場合には、NPM及びNode.jsも必要となります。Docker Hubで提供されている標準のイメージで動かす場合には不要です。
※ DBとして外部のPostgreSQLを利用する場合は、PostgreSQL10 以上である必要があります。
1. Python のインストール
①yumリポジトリから取得できる最新のPython 3.8をインストールします。
$ sudo yum install python38
...
Installed:
python38-3.8.3-3.module+el8.3.0+7680+79e7e61a.x86_64
python38-libs-3.8.3-3.module+el8.3.0+7680+79e7e61a.x86_64
python38-pip-19.3.1-1.module+el8.3.0+7187+a27ec44b.noarch
python38-pip-wheel-19.3.1-1.module+el8.3.0+7187+a27ec44b.noarch
python38-setuptools-41.6.0-4.module+el8.3.0+7187+a27ec44b.noarch
python38-setuptools-wheel-41.6.0-4.module+el8.3.0+7187+a27ec44b.noarch
Complete!
$ python3 --version
Python 3.8.0
②今後の利便性のため、バージョン番号無しの名前で python 及び pip コマンドを使用できるようにエイリアスを設定しておきます。
$ sudo vi /etc/bashrc
---
...
# User specific aliases and functions
alias python='python3'
alias pip='pip3'
---
$ source ~/bashrc
2. Ansible のインストール
pip コマンドでAnsibleをインストールします。yum でもインストールできますが、古いバージョンしか取得できないため pip を利用します。
ただし、今回は最新の v.2.10(2020年12月時点)ではなく v2.9系を利用したいため、明示的にバージョンを指定しました。
$ sudo pip install "ansible==2.9.15" selinux
…
$ ansible --version
ansible 2.9.15
config file = None
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.8/site-packages/ansible
executable location = /usr/local/bin/ansible
python version = 3.8.3 (default, Aug 18 2020, 08:56:04) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]
※SELinux が有効な環境では selinux という Python ライブラリをインストールする必要があります。インストールしない場合、AWX のインストール Playbook実行時に「SELinux が有効な環境では SELinux のバインディング libselinux-python が必要」というエラーが発生するようです。
※誤って最新バージョンをインストールしてしまった場合には、以下のようにアンインストール&ディレクトリを初期化してから再度インストールすればOKです。(ディレクトリが残っているとNGです)
$ sudo pip uninstall ansible
$ sudo rm -rf /usr/local/lib/python3.8/site-packages/ansible
$ sudo pip install "ansible==2.9.15"
3. Docker 及び Docker Compose のインストール
RHEL8からは dockerコマンドと Docker コンテナエンジンが完全に取り除かれており、yumリポジトリからもインストールすることができません。
dockerコマンドの代わりに podman が提供されており、基本的には docker と同機能を利用することが可能になっています。
《Red Hat ドキュメント:コンテナーの構築、実行、および管理 Red Hat Enterprise Linux 8 より》
ただし今回は実績のあるDockerでAWXを起動させたかったため、Dockerのサイトからからリポジトリを取得してインストールすることにしました。また、RHEL8では iptablesも無くなっており、docker コマンド実行時に iptables が無いというエラーが発生するため、こちらも合わせてインストールする必要があります。
なお、Docker, Docker Compose 及び iptablesをインストールしてiptablesの設定ファイルを作ってくれるシェルスクリプトが公開されているため、今回はこちらを利用しました。
Docker CE on RHEL 8 with IPTables ※Red Hat公式のものではありません。
①上記に公開されている内容をコピペしてシェルスクリプトを作成します。
$ vi docker-ce-rhel8.sh
②シェルスクリプトを実行します。
$ sudo sh docker-ce-rhel8.sh
...
Installed:
iptables-services-1.8.4-15.el8.x86_64
Complete!
Failed to disable unit: Unit file firewalld.service does not exist.
Failed to disable unit: Unit file nftables.service does not exist.
Created symlink /etc/systemd/system/multi-user.target.wants/iptables.service → /usr/lib/systemd/system/iptables.service.
ip_tables
ip_vs_sh
ip_vs
ip_vs_rr
ip_vs_wrr
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
③Docker 及び Docker Composeが正しくインストールされたことを確認します。
$ docker --version
Docker version 19.03.13, build 4484c46d9d
$ docker-compose --version
docker-compose version 1.27.4, build unknown
④Dockerサービスが正常に動作していることを確認します。
$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-11-04 06:40:11 UTC; 6min ago
Docs: https://docs.docker.com
$ sudo systemctl is-enabled docker
enabled
⑤Dockerコンテナが正常に起動できることを確認します。
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:8c5aeeb6a5f3ba4883347d3747a7249f491766ca1caa47e5da5dfcf6b9b717c0
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly
4. Git のインストール
yum で git をインストールします。
$ sudo yum install git
...
$ git --version
git version 2.27.0
5. AWX のインストール
①AWXのGitHubリポジトリを参照して、インストール可能なバージョンの一覧を確認します。
https://github.com/ansible/awx/releases
今回は現時点の最新である 15.0.1 をインストールします。
② AWXリポジトリをクローンします。
$ pwd
/home/ec2-user
$ git clone -b 15.0.1 https://github.com/ansible/awx.git
Cloning into 'awx'...
remote: Enumerating objects: 11, done.
remote: Counting objects: 100% (11/11), done.
remote: Compressing objects: 100% (11/11), done.
remote: Total 257234 (delta 2), reused 1 (delta 0), pack-reused 257223
Receiving objects: 100% (257234/257234), 231.68 MiB | 19.38 MiB/s, done.
Resolving deltas: 100% (198693/198693), done.
③インベントリファイル(awx/installer/inventory)を開き、ansible_python_interpreter の値が python3 を指していることを確認します。
$ cd awx/installer
$ ls -l
-rw-rw-r--. 1 ec2-user ec2-user 166 Nov 4 06:51 build.yml
-rw-rw-r--. 1 ec2-user ec2-user 437 Nov 4 06:51 install.yml
-rw-rw-r--. 1 ec2-user ec2-user 7648 Nov 4 06:51 inventory
drwxrwxr-x. 7 ec2-user ec2-user 99 Nov 4 06:51 roles
$ vi inventory
[awx/installer/inventory]
localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python3"
…
④AWXインストール用のPlaybookを実行します。実行完了後に failedが「0」であれば正常です。
※ sudo で実行する場合 ansible-playbook にパスが通っていないため、フルパスで指定しています。
$ sudo /usr/local/bin/ansible-playbook -i inventory install.yml
...
PLAY RECAP **************************************************************************************
localhost : ok=15 changed=7 unreachable=0 failed=0 skipped=91 rescued=0 ignored=0
⑤dockerコンテナの状態を確認します。今回は以下の4つのコンテナが動いていました。※インストールするAWXのバージョンによって異なる場合があります。
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe80bff88fa8 ansible/awx:15.0.1 "/usr/bin/tini -- /u…" 3 minutes ago Up 3 minutes 8052/tcp awx_task
f78259ab53be ansible/awx:15.0.1 "/usr/bin/tini -- /b…" 3 minutes ago Up 3 minutes 0.0.0.0:80->8052/tcp awx_web
a00b0ef1d9e2 redis "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 6379/tcp awx_redis
cee8c0460f1e postgres:10 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 5432/tcp awx_postgres
6. AWXへのアクセスとログイン確認
①WebブラウザでAWXサーバーにアクセスし、ログイン画面が表示されることを確認します。
②以下のデフォルトユーザーでログインできることを確認します。
※このアカウント情報は、AWXインストール時に参照したインベントリファイル(awx/installer/inventory)内に記載されています。
7. GitHubとの連携設定
7.1. 認証情報作成
AWXコンソール画面のサイドメニュー「認証情報」より、GitHubリポジトリにアクセスするための認証情報を作成します。
7.2. プロジェクト作成
サイドメニューの「プロジェクト」より、ジョブを管理するためのプロジェクトを作成します。
この時、SCM(GitHub)の情報と、上で作成した認証情報を指定します。
プロジェクトの一覧より、作成したプロジェクトの「最新SCMリビジョンの取得」アイコンをクリックしてGitHubにアクセスできることを確認します。
プロジェクト名左横の丸いマークが黄緑色になれば成功です。
以後、GitHubにPushしたAnsibleのPlaybookをジョブテンプレート(自動化処理を実行するためのタスク定義)から参照する事が可能となります。
Ansibleでインフラ構築や運用の自動化を検討されている場合、まずはお試しでAWXを導入してみてはいかがでしょうか。
――――――――――――――――――――――――――――――――――
【ご案内】
ITシステム開発やITインフラ運用の効率化、高速化、品質向上、その他、情シス部門の働き方改革など、IT自動化導入がもたらすメリットは様々ございます。
IT業務の自動化にご興味・ご関心ございましたら、まずは一度、IT自動化の専門家リアルグローブ・オートメーティッド(RGA)にご相談ください!
お問合せは以下の窓口までお願いいたします。
【お問い合わせ窓口】
代表窓口:info@rg-automated.jp
URL: https://rg-automated.jp