AWXインストール手順(CentOS 8.1)
インフラ構成管理ツールAnsibleの拡張版であるAWXについて、インストール手順を検証してみました。
Contents
AWXについて
AWXは、Red Hat社が有償提供しているAnsible Towerのアップストリーム製品です。AWXを使用することで、Ansible単体では実現できないアクセス制御やインベントリ管理、ジョブ管理をWebUIから簡単に行うことができます。実運用でAnsibleを使用する場合は、AWXを合わせて導入することをお勧めします。
前提条件
以下の前提条件で検証しています。
- ハードウェア: VirtualBox上の仮想マシン
- OS: CentOS 8.1 (1911)
- アプリケーション: AWX 9.1.1
- 各手順はroot権限を持つユーザで実施
必要パッケージのインストール
Python
CentOSインストール時に最小限のインストールを選択した場合、Pythonがインストールされていません。そのため、新たにインストールします。
Pythonのモジュール管理ツールであるpip
も、このタイミングで同時にインストールされます。
# dnf -y install python3
(略)
インストール済み:
python36-3.6.8-2.module_el8.1.0+245+c39af44f.x86_64 python3-pip-9.0.3-15.el8.noarch
python3-setuptools-39.2.0-5.el8.noarch
完了しました!
Python仮想環境のインストール
この後インストールするPythonモジュールは、AWXをインストールするために必要なものです。そのため、ホストOSの環境を汚さないように、awx_env
という名前でモジュールインストール先のPython仮想環境を作成します。
# python3 -m venv awx_venv
# source awx_venv/bin/activate
Ansible
Ansibleをpip
コマンドでインストールします。なお、ここでインストールするAnsibleは、AWXのインストールに使用します。AWXの内部で使用するAnsibleとは異なります。
# pip install ansible
(略)
Successfully installed MarkupSafe-1.1.1 PyYAML-5.3 ansible-2.9.4 jinja2-2.11.1
Docker操作用Pythonモジュール
AWXインストール時にAnsibleからDockerを操作するので、必要なPythonモジュールをインストールします。
# pip install docker docker-compose selinux
(略)
Successfully installed attrs-19.3.0 cached-property-1.5.1 certifi-2019.11.28 chardet-3.0.4 distro-1.4.0 docker-4.2.0 docker-compose-1.25.4 dockerpty-0.4.1 docopt-0.6.2 idna-2.8 importlib-metadata-1.5.0 jsonschema-3.2.0 pyrsistent-0.15.7 requests-2.22.0 selinux-0.2.1 texttable-1.6.2 urllib3-1.25.8 websocket-client-0.57.0 zipp-2.2.0
Docker
AWXはコンテナ上で動作します。そのため、実行基盤となるDockerをインストールします。
# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# dnf -y install docker-ce-3:18.09.0-3.el7
(略)
インストール済み:
docker-ce-3:19.03.5-3.el7.x86_64 docker-ce-cli-1:19.03.5-3.el7.x86_64 libcgroup-0.41-19.el8.x86_64
tar-2:1.30-4.el8.x86_64
完了しました!
Git
AWXのリポジトリをダウンロードするため、Gitをインストールします。
# dnf -y install git
(略)
インストール済み:
git-2.18.2-1.el8_1.x86_64 perl-IO-Socket-IP-0.39-5.el8.noarch
perl-IO-Socket-SSL-2.066-3.el8.noarch perl-Mozilla-CA-20160104-7.el8.noarch
git-core-2.18.2-1.el8_1.x86_64 git-core-doc-2.18.2-1.el8_1.noarch
perl-Digest-1.17-395.el8.noarch perl-Digest-MD5-2.55-396.el8.x86_64
perl-Error-1:0.17025-2.el8.noarch perl-Git-2.18.2-1.el8_1.noarch
perl-Net-SSLeay-1.88-1.el8.x86_64 perl-TermReadKey-2.37-7.el8.x86_64
perl-URI-1.73-3.el8.noarch perl-libnet-3.11-3.el8.noarch
emacs-filesystem-1:26.1-5.el8.noarch perl-Carp-1.42-396.el8.noarch
perl-Data-Dumper-2.167-399.el8.x86_64 perl-Encode-4:2.97-3.el8.x86_64
perl-Errno-1.28-416.el8.x86_64 perl-Exporter-5.72-396.el8.noarch
perl-File-Path-2.15-2.el8.noarch perl-File-Temp-0.230.600-1.el8.noarch
perl-Getopt-Long-1:2.50-4.el8.noarch perl-HTTP-Tiny-0.074-1.el8.noarch
perl-IO-1.38-416.el8.x86_64 perl-MIME-Base64-3.15-396.el8.x86_64
perl-PathTools-3.74-1.el8.x86_64 perl-Pod-Escapes-1:1.07-395.el8.noarch
perl-Pod-Perldoc-3.28-396.el8.noarch perl-Pod-Simple-1:3.35-395.el8.noarch
perl-Pod-Usage-4:1.69-395.el8.noarch perl-Scalar-List-Utils-3:1.49-2.el8.x86_64
perl-Socket-4:2.027-3.el8.x86_64 perl-Storable-1:3.11-3.el8.x86_64
perl-Term-ANSIColor-4.06-396.el8.noarch perl-Term-Cap-1.17-395.el8.noarch
perl-Text-ParseWords-3.30-395.el8.noarch perl-Text-Tabs+Wrap-2013.0523-395.el8.noarch
perl-Time-Local-1:1.280-1.el8.noarch perl-Unicode-Normalize-1.25-396.el8.x86_64
perl-constant-1.33-396.el8.noarch perl-interpreter-4:5.26.3-416.el8.x86_64
perl-libs-4:5.26.3-416.el8.x86_64 perl-macros-4:5.26.3-416.el8.x86_64
perl-parent-1:0.237-1.el8.noarch perl-podlators-4.11-1.el8.noarch
perl-threads-1:2.21-2.el8.x86_64 perl-threads-shared-1.58-2.el8.x86_64
完了しました!
サービスの設定
firewalld
firewalldが動作していると、AWXのコンテナ間通信が失敗してしまうため、同サービスを無効化します。
# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Dcoker
Dockerのサービスを起動します。
# systemctl enable --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
AWXのインストール
インストーラの取得
GitHubの公式リポジトリから、インストーラを含むディレクトリをクローンします。
# cd /tmp
# git clone https://github.com/ansible/awx.git
パラメータの設定
AWXのインストーラは、AnsibleのPlaybook形式で作成されています。インストール対象のホストに対するパラメータを指定するため、インベントリファイルを編集します。
# cd /tmp/awx/installer/
# vi inventory
変更箇所は以下の通りです。
Python仮想環境をホームディレクトリ直下に作成した場合は、ターゲットノード設定のansible_python_interpreter
に/home/<ユーザ名>/awx_venv/bin/python
を指定します。
# ターゲットノード設定
localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python"
↓
localhost ansible_connection=local ansible_python_interpreter="/home/<ユーザ名>/awx_venv/bin/python"
# PostgreSQLコンテナのDBデータディレクトリ
postgres_data_dir="~/.awx/pgdocker"
↓
postgres_data_dir="/var/lib/awx/pgdocker"
# Docker Composeのファイルディレクトリ
docker_compose_dir="~/.awx/awxcompose"
↓
docker_compose_dir="/var/lib/awx/awxcompose"
また、必要に応じて以下のセキュリティ関連のパラメータを任意の文字列に変更します。
# PostgreSQLのDBユーザ
pg_username=awx
# PostgreSQLのDBユーザパスワード
pg_password=awxpass
# AWXダッシュボードの管理ユーザ名
admin_user=admin
# AWXダッシュボードの管理ユーザパスワード
admin_password=password
# AWXが使用する秘密鍵
secret_key=awxsecret
イベントリファイルの編集後、ansible-playbook
を実行してAWXをインストールします。マシンスペックにもよりますが、インストール処理は10分から20分程度かかります。Playbookの実行結果を確認し、failed
の項目が0であればインストールは正常に完了しています。
# ansible-playbook -i inventory install.yml
(略)
PLAY RECAP *********************************************************************************************
localhost : ok=14 changed=6 unreachable=0 failed=0 skipped=93 rescued=0 ignored=0
AnsibleによるAWXのインストール処理完了後、docker ps
コマンドで以下の5つのコンテナが起動していることを確認します。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e0da532964c4 ansible/awx_task:9.1.1 "/tini -- /bin/sh -c…" 30 minutes ago Up 30 minutes 8052/tcp awx_task
cb9c454dcd99 ansible/awx_web:9.1.1 "/tini -- /bin/sh -c…" 30 minutes ago Up 30 minutes 0.0.0.0:80->8052/tcp awx_web
c38cbe6235e4 postgres:10 "docker-entrypoint.s…" 30 minutes ago Up 30 minutes 5432/tcp awx_postgres
3d0326afcaed memcached:alpine "docker-entrypoint.s…" 30 minutes ago Up 30 minutes 11211/tcp awx_memcached
9cc64ff0f71e ansible/awx_rabbitmq:3.7.4 "docker-entrypoint.s…" 30 minutes ago Up 30 minutes 4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp awx_rabbitmq
インストール後の動作確認
初期化処理の完了確認
インストール後も、しばらくの間AWXの各コンテナ内で初期化処理が行われるので、10分程度はWebUIにアクセスすることができません。初期化処理の終了は特に画面に表示されないので、top
コマンドなどでOSのCPU使用率を確認しながら、処理が終わるまで気長に待ちましょう。
初期化処理中は、AWXのコンテナ内でAnsibleが初期化処理を行なっているようです。top
コマンドで、以下のようにansible
プロセスが実行状態であることを確認できます。
$ top
top - 00:12:24 up 41 min, 3 users, load average: 0.20, 1.45, 1.37
Tasks: 132 total, 3 running, 129 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.0 us, 0.8 sy, 0.0 ni, 94.0 id, 0.0 wa, 3.2 hi, 0.0 si, 0.0 st
MiB Mem : 3938.4 total, 223.0 free, 866.9 used, 2848.5 buff/cache
MiB Swap: 2220.0 total, 2210.2 free, 9.8 used. 2779.9 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18258 root 20 0 252788 45468 12336 R 7.6 1.1 0:06.42 ansible
18283 root 20 0 252788 45436 12304 R 7.6 1.1 0:06.32 ansible
(略)
WebUIのログイン確認
初期化処理が完了した後、WebブラウザからWebUIにアクセスしてログインできることを確認します。
WebブラウザのURL欄に、http://<IPアドレス>
を入力します。AWXのログイン画面が表示されるので、管理ユーザ名admin
、管理ユーザパスワードpassword
を入力し、「サインイン」を押下します。
なお、AWXインストール時に上記パラメータを変更している場合は、設定したユーザ名とパスワードに置き換えてください。
ログインが成功すると、AWXのダッシュボードが表示されます。
参考情報
Dockerのインストールバージョン
CentOS 8系では、標準のコンテナツールがDockerからPodmanに変更されています。あまり適切ではないかもしれませんが、Dockerをインストールするには、Docker
公式リポジトリからCentOS 7用のパッケージをインストールする必要があります。このとき、単純にdocker-ce
をパッケージ名に指定すると、依存関係にあるcontainerd.io
のバージョンミスマッチが発生し、エラーが出力されます。
# dnf -y install docker-ce
(略)
エラー:
問題: package docker-ce-3:19.03.5-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
- cannot install the best candidate for the job
- package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
- package containerd.io-1.2.2-3.el7.x86_64 is excluded
- package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
- package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
(インストール不可のパッケージをスキップするには、'--skip-broken' を追加してみてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)
以下のコマンドで、docker-ce
のインストール可能バージョンを調べて降順にインストールを試してみたところ、docker-ce-3:18.09.0-3.el7
がcontainerd.io
のバージョンと整合性の取れる最新バージョンでした。そのため、今回は同バージョン番号をインストールパッケージ名に付加します。
# dnf list --showduplicates docker-ce
(略)
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.3-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.8-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.9-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.0-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.3-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:19.03.5-3.el7 docker-ce-stable