WSL2上にAWXを構築してみた

こんにちは。株式会社SHIFT、自動化エンジニアの水谷です。

少し前に「WSL上のUbuntuを使ったAnsibleの導入方法」という記事を書きました。これはWSL(WSL1)にAnsibleをインストールしてWindows PCから手軽にAnsible(構成管理ツールの1つ)を使えるようにする、という内容です。

また、AnsibleのPlaybookをWeb UIで実行したり、実行履歴管理ができるなど、Ansibleを使う上でとても便利なツールである「AWX」をインストールする方法についても、「Ansible AWXの構築方法」という記事を書きましたが、これはWSLではなくUbuntuがインストールされたPCにAWXをインストールする方法の紹介でした。

実はこの時点ではWSL1にあるネットワーク関連の制約によってAWXがインストールできなかったため、(泣く泣く?)Ubuntuマシンにインストールしたのでした。

さて、最近Windows10のアップデート「2004」がリリースされ、WSLの新しいバージョンである「WSL2」が利用可能になりました。WSL2はWSL1とは大きく構成が変わり、仮想化技術を使うことで、WSL1では動作しなかったソフトウェアの多くが動作するようになったそうです。もしかしたらAWXも動作するのでは? と思い、WSL2にAWXのインストールをトライしてみましたので、今回はその顛末を書いてみたいと思います。


Windows10のバージョン確認

AWXをインストールするには、Windows10がバージョン2004以上であることが必要ですので、まずはこれを確認します。確認するには「Windows」+「R」キーを押して、「winver」とタイプしてエンターキーを押してバージョン情報を表示しましょう。以下のようにバージョンが「2004」かそれ以降であればOKです。

画像1

もし、これ以前のバージョンの場合は、「設定」から「更新とセキュリティ」から「Windows Update」を使ってバージョンを2004以降にアップデートしてください。

WSL2の有効化

Windows10がバージョン2004以降でも、デフォルトではWSL2は動作していませんので、少し作業が必要です。WSL2使うためには、まずWindowsの機能の1つである「仮想マシン プラットフォーム」を有効にします。

WSL1とは違い、WSL2では仮想マシンの機能を使ってLinuxサブシステムを実現しているため、これを有効にする必要があります。

その方法は2つありますが、GUI上で行うには、コントロールパネルの「プログラムと機能」から「Windowsの機能の有効化または無効化」を開き、「仮想マシン プラットフォーム」にチェックを付けて、OKボタンを押します。

画像2

もう1つの方法は、管理者権限のコマンドプロンプト(あるいは管理者権限のPowershellコマンドプロンプト)でdismコマンドを使う方法で、以下のパラメーターを付けてdism.exeを実行します。

> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

続いて、WSLカーネルの更新を行います。これには、Microsoftの以下のページにアクセスします。

https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel
ここにある「最新の WSL2 Linux カーネル更新プログラム パッケージをダウンロード」リンクをクリックすると、「wsl_update_x64.msi」というファイルがダウンロードされますので、ダウンロードが終わったらこれを起動して、インストールを行います。

画像3
画像4

インストーラーは英語ですが、インストール時に何も聞かれることはないので、「Next」ボタンを押して進めていけば簡単にインストールできます。
インストールが終わりましたら念のためPCを再起動しておくいてください。
それから、WSL2をデフォルトで使用するために、管理者コマンドプロンプトで以下のコマンドを実行しておきましょう。

wsl --set-default-version 2

これで、新たにインストールするLinux系OSはWSL2を使って動作するようになります。

WSL2環境へのUbuntuのインストール

Ubuntuのインストールは簡単で、「Microsoft Store」アプリを起動して「Ubuntu」で検索すると、以下のように3つのバージョンのUbuntuが表示されますので、お好みのバージョンをクリックしてください。

画像5

例えば「Ubuntu 18.04 LTS」を選択すると、次の画面が表示されますので、「インストール」ボタンを押せばインストールが始まります。

画像6

WSL1からWSL2への移行

もし、WSL1で動作しているUbuntuが存在する場合は、WSL2上で動作させるように変更することもできます。すでにAnsibleの実行環境を持っている方などは、1からインストールしなおす必要がないので、こちらの方が楽です。
以下はその手順です。


1. 管理者コマンドプロンプトまたはPowershellコマンドプロンプトで「wsl --list --verbose」を実行して、現在インストールされているOSを表示する(下の例では「Ubuntu-16.04」がWSL1で動作していることがわかります)

画像7

2. 「wsl --set-version <OS名> 2」でWSL2に移行する

画像8

3. 再び「wsl --list --verbose」を実行して、WSLのバージョンが2になったことを確認する

画像9

AWXのインストール

さて、これでWSL2上にUbuntu環境が整いましたので、AWXをインストールしてみましょう。手順は以前の記事と同じです。

Ansibleのインストール
まずはAnsibleのインストールから始めます。

sudo apt-get update
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible

インストールが終わった後、以下のコマンドでバージョン情報が表示されればOKです。

ansible --version

DockerおよびDocker-composeのインストール
続いてDockerのインストールもインストールします。まずは前準備として、必要なツール類をインストールからです。

sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common

次にDocker公式のGPG公開鍵をインストールします。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

続いてリポジトリを追加します。

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

そして、インストールです。

sudo apt-get update
sudo apt-get install -y docker-ce

Dockerのサービスを開始します。

sudo service docker start

次のコマンドでバージョン情報が表示されることを確認します。

docker version

続いてDocker-composeもインストールします。Docker-composeは、複数のコンテナを使うDockerアプリケーションを、定義・実行するツールです。
こちらは基本的にダウンロードして実行権限を付ければOKです(ここではバージョン1.25.5をダウンロード)。

sudo curl -L https://github.com/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod 0755 /usr/local/bin/docker-compose

以下のコマンドでバージョン情報が表示されることを確認してください。

docker-compose -v

DockerのPythonモジュールをインストール
AWXのインストールはAnsibleのDockerモジュールを使って行いますので、これを動作させるためにDockerのPythonモジュールをpip(pip3)でインストールします。
まずはpip3のインストールから。

sudo apt install python3-pip

DockerのPythonモジュールをインストールします。

sudo pip3 install docker

Docker-composeのPythonモジュールをインストールします。

sudo pip3 install docker-compose

AWXをClone
ようやく(?)AWXのインストールです。これはGithubにあるPlaybookをAnsibleで実行することで行います。
まずはGithubからAWXをクローン。

git clone https://github.com/ansible/awx

特定のバージョンのAWXをインストールしたい場合は、https://github.com/ansible/awx/releases を見てタグを指定してクローンしてください(下はバージョン11.2.0の場合の例)。

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

Inventoryファイルの変更
この状態で、~/awx/installer/にあるPlaybook "install.yml"を実行すればAWXがインストールできるのですが、その前にInventoryファイルを変更します。
必ず変更していただきたいのが、下の行です。

#project_data_dir =/var/lib/awx/projects

この行の先頭の"#"(コメント記号)を消します。これをしておかないと、Playbookを(SVCに置かずに)ローカルに置いてテストする時に問題となります。
Linuxに不慣れな方は、"nano awx/installer/inventory"でInventoryファイルを開いて、「↓」キーで該当する行まで移動し、"#"を消してから、CTRL+O、Enter、CTRL+Xで保存/終了してください。
また、下の行あたりは必要であれば変更しておいてください。

host_port=80
admin_user=admin
admin_password=password

Playbookの実行
さて、あとはPlaybookを実行するだけです。

cd awx/installer
ansible-playbook -i inventory install.yml

Playbookが最後まで実行され、以下のような表示が出ればインストール成功です。

画像10

AWXの動作確認

正しくインストールができていれば、ブラウザを起動して、アドレスバーに「localhost」とタイプしてエンターキーを押せば、AWXのログイン画面が表示されるはずです。

画像11

トラブル発生! - ログイン画面が表示されない

ログイン画面が表示されるはずでしたが、実は私が試したPCでは、以下のような「AWX is Upgrading」という画面が表示されたままで、2時間ほど待ってみたものの結局ログイン画面は表示されませんでした。

画像12

その間ずっとCPU使用率もメモリ使用率も高いままとなっていましたので、使用したPCが良くない(メモリが少ない等)のか、それともWSL1からWSL2に移行した影響なのか? 原因がよくわからなかったので、メモリを多く搭載している別のPCに、クリーンなUbuntu 18.04にAWXをインストールしてみたものの、やっぱり同じ問題が発生しました。
私はUbuntuにもDockerにも詳しくないため、しばらく途方に暮れていたのですが、いろいろ試行錯誤してみた結果、Dockerでコンテナを全部再起動したらログイン画面が表示されるようになりました。以下はそのコマンドです。

sudo docker stop $(sudo docker ps -aq)
sudo docker start $(sudo docker ps -aq)

結局詳しい原因はわかりませんでしたが、もし同じ問題が発生した場合は上のコマンドを実行してみてください。
何はともあれ、これで念願の(?)AWXがWSL上で動くようになりましたので、日々の作業を自動化するためのプラットフォームとして使っていこうと思います。

画像13


――――――――――――――――――――――――――――――――――

執筆者プロフィール:水谷裕一
大手外資系IT企業で15年間テストエンジニアとして、多数のプロジェクトでテストの自動化作業を経験。その後画像処理系ベンチャーを経てSHIFTに入社。
SHIFTでは、テストの自動化案件を2件こなした後、株式会社リアルグローブ・オートメーティッド(RGA)にPMとして出向中。RGAでは主にAnsibleに関する案件をプレーイングマネジャーとして担当している。

お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/