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とする。
AWXの構築
以下を参照して、AWXの環境を構築する。
(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のライブラリであるrequests
とurllib3
をアップデートする。
これはAWXのビルド手順には記載はないが、次の手順のAWXのビルドで出たエラーを地道に潰した結果、今回の環境ではアップデートが必要であることが分かったため実施している。
次に、新規にPythonのライブラリをインストールする。
docker-compose
とansible
は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
である。
AWXはRedHatが開発しているが、RHEL系のディストリビューションでは/bin/sh
は/bin/bash
へのシンボリックリンクなので、Makefile
が緩く作られてしまったのだろうと推測する。
Ubuntuでは、/bin/sh
はPOSIX互換の/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の構築は完了。