AmazonLinux2 に AWX をインストールする手順をメモしておきます。
環境
今回は以下の環境を構築します。
構築完了後、各コンポーネントのバージョンは以下になりました。
- Amazon Linux release 2 (Karoo)
- docker-18.06.1ce-10.amzn2.x86_64
- git-2.17.2-2.amzn2.x86_64
- nginx-1.17.1-1.el7.ngx.x86_64
- pyenv 1.2.13
- pip
- ansible 2.8.2
- docker-compose 1.23.2
- pip 19.1.1
- python 3.7.4
インスタンスサイズ
AWX では複数のコンテナを組み合わせて利用することになり、それなりのスペックを要求します。 AWS のインスタンスサイズが t2.micro では SWAP が多発する為、t2.small の利用をお勧めします。
pyenv 環境の構築
pyenv が依存するパッケージをインストールします。
yum -y install \ bzip2-devel \ gcc \ gcc-c++ \ git \ libffi-devel \ make \ openssl-devel \ readline-devel \ sqlite-devel \ zlib-devel
pyenv 自体をインストールします。
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
pyenv が必要とする環境変数を追加し、反映します。
cat << 'EOS' >> ~/.bashrc export PATH="/root/.pyenv/bin:$PATH" eval "$(pyenv init -)" eval "$(pyenv virtualenv-init -)" EOS source ~/.bashrc
Python 3.7.4 のインストール
pyenv で Python 3.7.4 をインストールします。 pyenv install
は Python をビルドするので、完了するまで数分はかかるはずです。
pyenv install 3.7.4 pyenv global 3.7.4 pyenv rehash
pip のアップデート
今後、更に AWX が依存するパッケージや Python モジュールをインストールしていきますが、先んじて pip 自体を最新版にアップデートしておきます。
pip install pip --upgrade
関連パッケージのインストール (docker & git)
AWX をインストールする上で必要になる docker と git をインストールしておきます。
yum -y install \ docker \ git
Docker の自動起動&起動設定
docker を自動起動&起動設定しておきます。
systemctl enable docker systemctl start docker
Python モジュールのインストール
pip で Ansible と docker-compose をインストールしておきます。 docker-compose はバージョンを指定せず、最新バージョンをインストールしようとすると「別モジュールが依存している requests モジュールのバージョン」と「docker-compose モジュールが要求する requests モジュールのバージョン」が衝突してしまうようで、インストールが出来ません。 そこで docker-compose モジュールはエラー無くインストール出来るバージョン 1.32.2 を指定してインストールします。
pip install ansible pip install docker-compose~=1.23.2
AWX のインストール
まず、GitHub から clone します。 フロントエンドに Nginx を設置するので、AWX 付属の Web サーバはローカルアドレス (127.0.0.1) を Listen するように変更します。 設定ファイルの修正が完了したら ansible-playbook
でインストールを開始します。
git clone https://github.com/ansible/awx.git cd ./awx/installer sed -i -e "s/host_port=80/host_port=127.0.0.01:8080/g" inventory sed -i -e "s/host_port_ssl=443/host_port_ssl=127.0.0.1:8443/g" inventory ansible-playbook -i inventory install.yml
インストールが完了しました。 コンテナの状況を確認すると以下のようになっていました。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b8fbd71fb87b ansible/awx_task:6.1.0 "/tini -- /bin/sh -c…" 3 minutes ago Up 3 minutes 8052/tcp awx_task 3b2273304754 ansible/awx_web:6.1.0 "/tini -- /bin/sh -c…" 3 minutes ago Up 3 minutes 127.0.0.1:80->8052/tcp awx_web a7367810eb5b ansible/awx_rabbitmq:3.7.4 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 4369/tcp, 5671-5672/tcp, 15671-15672/tcp, 25672/tcp awx_rabbitmq cea6f30759e8 postgres:9.6 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 5432/tcp awx_postgres 270a611afa0f memcached:alpine "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 11211/tcp awx_memcached
サーバ証明書の用意
今回は AWX のフロントエンドに Nginx を配置し、SSL/TLS サーバ証明書を終端させます。 予め、サーバ証明は任意のディレクトリに用意しておきます。 今回は /etc/letsencrypt/certificates/
へ証明書や秘密鍵をインストールしておきました。
mkdir -p /etc/letsencrypt/certificates/
Nginx
続いて Nginx を構築していきます。
インストール
AmazonLinux 標準リポジトリ上の Nginx はバージョンが低い為、Nginx 公式リポジトリから Nginx をインストールします。 まず、リポジトリの定義ファイルを作成します。 /etc/yum.repos.d/nginx.repo
を以下の内容で新規作成します。
[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key
リポジトリの定義が出来たので、Nginx をインストールします。
yum check-update
yum -y install nginx
SSL/TLS 設定
Nginx で SSL/TLS を終端すべく、/etc/nginx/conf.d/awx.conf
を以下の内容で新規作成します。
upstream awx { server localhost:8080; } server { listen 80; server_name awx.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name awx.example.com; ssl_certificate /etc/letsencrypt/certificates/example.com.crt; ssl_certificate_key /etc/letsencrypt/certificates/example.com.key; ssl_protocols TLSv1.1 TLSv1.2; ssl_ciphers 'ECDH !aNULL !eNULL !SSLv2 !SSLv3'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://awx; proxy_redirect http:// https://; } }
自動起動&起動
準備が出来たので、Nginx を自動起動&起動設定します。
systemctl enable nginx systemctl start nginx
AWX へログインする
docker コンテナが起動完了するまで待った後、ブラウザで https://awx.example.com
へアクセスし、以下のような画面が表示されれば AWX のインストールは完了です。
AWX への初期ログイン情報はインストール時に利用した awx/installer/inventory
に定義されていますが、変更していなければ下記です。
項目 | 値 |
---|---|
ユーザ名 | admin |
パスワード | password |
AWX へのログインに成功すると下記のような画面に遷移するはずです。