GCPでAWXを構築する　Version18.0以降



# 概要
GCPでDocker版AWXの構築方法を残したいと思います。
AWXを使うことで、Ansibleで課題だったセキュリティの問題（権限に合わせたPlaybookの実行、秘密鍵の保管、実行記録）を多く解決してくれます。

# 事前準備
+ GCPのデプロイ先の環境（メモリ４G以上）
  メモリが４G以上でなければ、OOM killer に殺される可能性が高いです。

# 目次
+ コンテナ環境の準備
+ PIP Ansibleインストール
+ AWXインストール
+ GCP　遠隔からの疎通に向けた任意ポート開放
+ web接続


# コンテナ環境の準備
まず初めにDockerをインストールします。

インストール方法は公式リポジトリを使ってインストールします。

手順は公式ドキュメントの通りです。
[https://docs.docker.com/engine/install/centos/](https://docs.docker.com/engine/install/centos/)


```shell
sudo yum install -y yum-utils
sudo yum-config-manager --disable docker-ce-nightly \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
```

リポジトリ登録ができたらdockerをインストール
```shell
sudo yum install docker-ce docker-ce-cli containerd.io
```
インストールが完了したらDockerソケットを起動します。
```shell
sudo systemctl enable --now docker.socket
sudo systemctl status docker.socket
```
dockerの作動確認
```
sudo docker info
```
最初に書いたバージョンが確認できます。
```
Client:
Context:    default
Debug Mode: false
Plugins:
 app: Docker App (Docker Inc., v0.9.1-beta3)
 buildx: Build with BuildKit (Docker Inc., v0.6.1-docker)
 scan: Docker Scan (Docker Inc., v0.8.0)
Server:
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 20.10.8
```

次にDocker-composeをインストールします。

こちらも公式手順の通りです。
[https://docs.docker.com/compose/install/](https://docs.docker.com/compose/install/)
```
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
```

インストールしたファイルにシンボリックリンクを張ります。
```
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
```
バージョン確認
```
docker-compose version
```
バージョンが確認できます。
```
docker-compose version 1.29.2, build unknown
docker-py version: 5.0.2
CPython version: 3.9.6
OpenSSL version: OpenSSL 1.1.1k  FIPS 25 Mar 2021
```
sudo実行権限を持つAWXインストールユーザーをdockerグループに追加する。
```
sudo gpasswd -a daath docker
```

# PIP Ansibleインストール
次にAnsibleをインストールします。RHEL8系では専用のリポジトリをインストールしてAnsibleインストールする方法もありますが、今回は、PIPでのインストールにします。

CentOS Stream8ではデフォルトでPythonが入っていませんので今回は3.9をインストールします。
```
python3 -V

### 3.9がインストールされています。
Python 3.9.6
```
PIP3でAnsibleインストール、このとき合わせてSElinuxの制御パッケージもインストールしておきます。これがないとAWXビルド途中でエラーとなります。



それではインストールします。
```
sudo pip3 install ansible selinux 
```
インストールしたAnsibleのバージョンを確認
```
ansible --version
```
```
ansible [core 2.11.5] 
config file = None
configured module search path = ['/home/daath/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/lib/python3.9/site-packages/ansible
ansible collection location = /home/daath/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/local/bin/ansible
python version = 3.9.6 (default, Aug 25 2021, 16:22:38) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)]
jinja version = 3.0.1
libyaml = True
```

# AWXインストール
下準備が完了したのでAWXをインストールします。

AWXリポジトリをクローンで取得
```
git clone -b 19.3.0 https://github.com/ansible/awx.git
```
2022/05/20時点の最新バージョンになります。

ブランチバージョンは、Gitサイトを確認してください
[https://github.com/ansible/awx/releases?](https://github.com/ansible/awx/releases?)


クローンしたディレクトリ内へ移動
```
ls -l
cd ~/awx/
```

補足：AWX各種設定を変更する場合は以下のファイルを使用します。

主にデータベースのパスワード設定など
```
vi ~/awx/tools/docker-compose/inventory
```
同一の環境であれば５〜１０分くらいでビルドが完了します。

ビルドが完了するとansible/awx_devel、ローカルイメージキャッシュにイメージが作成されます。
docker imagesコマンドを使用して確認します。
```
docker images
```
以下のようにイメージが作成されている
```
REPOSITORY                         TAG         IMAGE ID      CREATED             SIZE
quay.io/awx/awx_devel              HEAD        03eaa84b348f  About a minute ago  2.11 GB
```

AWXを実行する
コンテナを起動します
```
make docker-compose COMPOSE_UP_OPTS=-d
```

# Web接続

ビルドしてコンテナを起動させただけではWeb接続できません。

まずはUIをクリーンアップしてビルドします。

Makefileを編集し、--forceを通過しビルドを可能にします。
```
vim Makefile
```
```
awx/ui/node_modules:
        NODE_OPTIONS=--max-old-space-size=6144 $(NPM_BIN) --prefix awx/ui --loglevel verbose --force ci
```
ビルドを開始
```
docker exec tools_awx_1 make clean-ui ui-devel
```

Reactの最新バージョンが異なると警告がでますが、無視してもAWXは動きます。
コンパイル前のファイルがないと警告が出ますが、無視してもAWXは動きます。


次に管理ユーザーの作成
AWXにログインする前に、管理者ユーザーを作成する必要があります。
```
docker exec -ti tools_awx_1 awx-manage createsuperuser
```
実行すると以下のようにユーザー名、メールアドレスパスワードを入力していきます。
```
Username (leave blank to use 'awx'): masahiro
Email address: masahiro@example.jp
Password:
Password (again):
Superuser created successfully.
```
ファイヤーウォールを解放、WebUIは8043TCPポートに接続されているようです。
```
sudo firewall-cmd --add-port=8043/tcp
```

GCPに関して遠隔からの疎通に向けた任意ポートの開放します。
以下のサイトを参考に　ポート8043を開放してください。
[https://www.mtioutput.com/entry/googlecloud-port-open](https://www.mtioutput.com/entry/googlecloud-port-open)

ブラウザで接続を確認する。
[https://{AWXサーバIPもしくはFQDN}:8043](https://{AWXサーバIPもしくはFQDN}:8043)

接続が確認できたらファイヤーウォールを永久設定へ
```
sudo firewall-cmd --runtime-to-permanent
```

以上でAWX構築が完了となります。

参考サイト
[https://note.com/koya0316/n/n2cd9ac1cf5dd](https://note.com/koya0316/n/n2cd9ac1cf5dd)
[https://www.mtioutput.com/entry/googlecloud-port-open](https://www.mtioutput.com/entry/googlecloud-port-open)