AWXインストール手順(CentOS 8.1)

インフラ構成管理ツールAnsibleの拡張版であるAWXについて、インストール手順を検証してみました。

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.el7containerd.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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です