Jaybanuan's Blog

どうせまた調べるハメになることをメモしていくブログ

AWX 21.6.0をdocker composeで動かす

はじめに

docker composeを利用して、AWXのお試し環境を構築したときのメモ。 AWXのバージョンによって構築方法が結構異なるので、注意が必要。

なお、今回構築するのは「開発用のAWX」になる。 開発用と言っても、本番環境に対する開発環境という意味ではなく、AWX自体を開発するためのもの、という意味合い。

普通に動作させる場合はKubernetes(やMiniKube等)が前提のようだが、ちょっと試すにはオーバースペックなので、ここでは敢えて「開発用のAWX」を利用している。

環境

$ cat /etc/os-release | grep PRETTY_NAME
PRETTY_NAME="Ubuntu 22.04.1 LTS"

$ uname -srvm
Linux 5.15.0-47-generic #51-Ubuntu SMP Thu Aug 11 07:51:15 UTC 2022 x86_64

$ docker version
Client: Docker Engine - Community
 Version:           20.10.18
(略)
Server: Docker Engine - Community
 Engine:
  Version:          20.10.18
(略)

AWXのバージョン

AWXのバージョンは、執筆時点の最新版の21.6.0とする。

github.com

AWXの構築

以下を参照して、AWXの環境を構築する。

github.com

(1) GitHubからソースコードをcloneする

$ git clone -b 21.6.0 https://github.com/ansible/awx.git

(2) ビルドに必要なツール/ライブラリをインストールする

DockerとDocker Composeが動作する環境であれば、あとはPythonのライブラリを整備するぐらい。 まずは、実行したコマンドを示す。

$ pip3 install -U requests urllib3
$ pip3 install docker-compose ansible "setuptools_scm[toml]"

まず最初に、Pythonのライブラリであるrequestsurllib3をアップデートする。 これはAWXのビルド手順には記載はないが、次の手順のAWXのビルドで出たエラーを地道に潰した結果、今回の環境ではアップデートが必要であることが分かったため実施している。

次に、新規にPythonのライブラリをインストールする。 docker-composeansibleはAWXのビルド手順に記載があったが、setuptools_scm[toml]についてはビルド時のエラーを潰した結果、必要であることが分かった。

ライブラリの過不足については、かなり環境に依存しそうである。

(3) AWXをビルドする

以下のコマンドを実行して、AWXのコンテナイメージをビルドする。

$ cd awx
$ make SHELL=/bin/bash PYTHON=python3 docker-compose-build

ここで、makeの引数にSHELL=/bin/bashを指定してシェルをbashに切り替えているが、理由はMakefileの中の一部記述がbashを想定しているようであるため。 ちなみにmakeのデフォルトのシェルは/bin/shである。

www.gnu.org

AWXはRedHatが開発しているが、RHEL系のディストリビューションでは/bin/sh/bin/bashへのシンボリックリンクなので、Makefileが緩く作られてしまったのだろうと推測する。 Ubuntuでは、/bin/shPOSIX互換の/bin/dashへのシンボリックリンクなので、bashの拡張構文は使えない。

また、makeの引数にPYTHON=python3を引き渡しているのは、Makefileの中でPythonインタプリタが以下のようにpython3.9と指定されているのだが、今回の環境に合わせてpython3に切り替える必要があるため。

PYTHON ?= python3.9

(4) AWXのコンテナを立ち上げる

以下のコマンドを実行して、AWXのコンテナをdocker composeで立ち上げる。

$ make SHELL=/bin/bash PYTHON=python3 docker-compose

初回起動時には、DBへの初期データ投入などの初期化処理がまだ実行されていないためエラーが大量に発生するが、初期化処理が進むにつれて(ほぼ)エラーは発生しなくなる。 自分の環境が非力なせいか、安定するまでに10分以上かかった。

(5) AWXのWeb UIを構築する

実は、前述の手順で起動されるのは、AWXのAPIサーバであり、Web UIは別になっている。 READMEの手順に従うと、APIサーバの中にWeb UIサーバも同居させることができるため、Web UIサーバ用のコンテナを立ち上げずにすむ。

Web UIサーバの構築は、実行中のAPIサーバのコンテナの中に入って行う。

$ docker exec tools_awx_1 make clean-ui ui-devel

上記のコマンドが完了した後、以下のコマンドを実行して、Web UIにログインするための管理ユーザを作成する。 入力用のプロンプトが表示されるので、必要事項を入力する。

$ docker exec -ti tools_awx_1 awx-manage createsuperuser
Username (leave blank to use 'awx'): 
Email address: 
Password: 
Password (again): 
Superuser created successfully.

動作確認

(1) AWXのWeb UIにアクセスする

ウェブブラウザで https://localhost:8043/ にアクセスする。

先の手順で作成した管理ユーザでログインして以下のようなトップ画面が表示できれば、ひとまずはAWXの構築は完了。