見出し画像

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をインストール&実行するために必要なシステム要件が記載されています。

・メモリ:4GB 以上
・CPU:2Core 以上
・ディスク:20GB 以上

今回は上記要件を満たす最低限のスペックである「t2.medium」インスタンスタイプでEC2を立ち上げました。また、AWXは実行環境として以下のいずれかを利用できます。

・Docker(Docker Compose)
・OpenShift
・Kubernetes

今回は最も導入が容易な Docker(Docker Compose)を利用します。
Docker ComposeでAWXを実行するためには、以下のソフトウェアがインストールされている必要があります。
これらを順にインストールしていきます。

・Python 3.6 以上
・Ansible 2.8 以上
・Docker ※最新バージョン
・Git 1.8.4 以上

※ 独自のコンテナイメージ上で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

画像1

今回は現時点の最新である 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サーバーにアクセスし、ログイン画面が表示されることを確認します。

画像2

②以下のデフォルトユーザーでログインできることを確認します。
※このアカウント情報は、AWXインストール時に参照したインベントリファイル(awx/installer/inventory)内に記載されています。

​ユーザー名: admin
パスワード: password

画像3

7. GitHubとの連携設定

7.1. 認証情報作成
AWXコンソール画面のサイドメニュー「認証情報」より、GitHubリポジトリにアクセスするための認証情報を作成します。

認証情報タイプ:ソースコントロール
ユーザー名:{GitHubのユーザー名}
パスワード:{GitHubのパスワード}

画像4

7.2. プロジェクト作成
サイドメニューの「プロジェクト」より、ジョブを管理するためのプロジェクトを作成します。
この時、SCM(GitHub)の情報と、上で作成した認証情報を指定します。

SCMタイプ:Git
SCM URL:{GitHub上のリポジトリのURL}
SCM ブランチ/タグ/コミット:{対象のブランチ名}
SCM 認証情報:{上で作成した認証情報の名前}
SCM 更新オプション:「起動時のリビジョン更新」にチェック

画像5

プロジェクトの一覧より、作成したプロジェクトの「最新SCMリビジョンの取得」アイコンをクリックしてGitHubにアクセスできることを確認します。
プロジェクト名左横の丸いマークが黄緑色になれば成功です。

画像6

以後、GitHubにPushしたAnsibleのPlaybookをジョブテンプレート(自動化処理を実行するためのタスク定義)から参照する事が可能となります。

Ansibleでインフラ構築や運用の自動化を検討されている場合、まずはお試しでAWXを導入してみてはいかがでしょうか。

――――――――――――――――――――――――――――――――――

執筆者プロフィール:馬塚勇介
文系大学卒業後、独立系ソフトウェアベンダーでアプリケーションエンジニアとして主に飲食業向けシステムの構築に従事。その後SHIFTに入社。
現在はSHIFTのグループ会社であるリアルグローブ・オートメーティッド(RGA)に出向中。
RGAでは主にIT自動化適性試験プラットフォームの構築や、CI/CD基盤導入案件を担当。

【ご案内】
ITシステム開発やITインフラ運用の効率化、高速化、品質向上、その他、情シス部門の働き方改革など、IT自動化導入がもたらすメリットは様々ございます。

IT業務の自動化にご興味・ご関心ございましたら、まずは一度、IT自動化の専門家リアルグローブ・オートメーティッド(RGA)にご相談ください!

お問合せは以下の窓口までお願いいたします。

【お問い合わせ窓口】
代表窓口:info@rg-automated.jp
URL: https://rg-automated.jp

画像7


みんなにも読んでほしいですか?

オススメした記事はフォロワーのタイムラインに表示されます!