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です。
もし、これ以前のバージョンの場合は、「設定」から「更新とセキュリティ」から「Windows Update」を使ってバージョンを2004以降にアップデートしてください。
WSL2の有効化
Windows10がバージョン2004以降でも、デフォルトではWSL2は動作していませんので、少し作業が必要です。WSL2使うためには、まずWindowsの機能の1つである「仮想マシン プラットフォーム」を有効にします。
WSL1とは違い、WSL2では仮想マシンの機能を使ってLinuxサブシステムを実現しているため、これを有効にする必要があります。
その方法は2つありますが、GUI上で行うには、コントロールパネルの「プログラムと機能」から「Windowsの機能の有効化または無効化」を開き、「仮想マシン プラットフォーム」にチェックを付けて、OKボタンを押します。
もう1つの方法は、管理者権限のコマンドプロンプト(あるいは管理者権限のPowershellコマンドプロンプト)でdismコマンドを使う方法で、以下のパラメーターを付けてdism.exeを実行します。
続いて、WSLカーネルの更新を行います。これには、Microsoftの以下のページにアクセスします。
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel
ここにある「最新の WSL2 Linux カーネル更新プログラム パッケージをダウンロード」リンクをクリックすると、「wsl_update_x64.msi」というファイルがダウンロードされますので、ダウンロードが終わったらこれを起動して、インストールを行います。
インストーラーは英語ですが、インストール時に何も聞かれることはないので、「Next」ボタンを押して進めていけば簡単にインストールできます。
インストールが終わりましたら念のためPCを再起動しておくいてください。
それから、WSL2をデフォルトで使用するために、管理者コマンドプロンプトで以下のコマンドを実行しておきましょう。
これで、新たにインストールするLinux系OSはWSL2を使って動作するようになります。
WSL2環境へのUbuntuのインストール
Ubuntuのインストールは簡単で、「Microsoft Store」アプリを起動して「Ubuntu」で検索すると、以下のように3つのバージョンのUbuntuが表示されますので、お好みのバージョンをクリックしてください。
例えば「Ubuntu 18.04 LTS」を選択すると、次の画面が表示されますので、「インストール」ボタンを押せばインストールが始まります。
WSL1からWSL2への移行
もし、WSL1で動作しているUbuntuが存在する場合は、WSL2上で動作させるように変更することもできます。すでにAnsibleの実行環境を持っている方などは、1からインストールしなおす必要がないので、こちらの方が楽です。
以下はその手順です。
1. 管理者コマンドプロンプトまたはPowershellコマンドプロンプトで「wsl --list --verbose」を実行して、現在インストールされているOSを表示する(下の例では「Ubuntu-16.04」がWSL1で動作していることがわかります)
2. 「wsl --set-version <OS名> 2」でWSL2に移行する
3. 再び「wsl --list --verbose」を実行して、WSLのバージョンが2になったことを確認する
AWXのインストール
さて、これでWSL2上にUbuntu環境が整いましたので、AWXをインストールしてみましょう。手順は以前の記事と同じです。
Ansibleのインストール
まずはAnsibleのインストールから始めます。
インストールが終わった後、以下のコマンドでバージョン情報が表示されればOKです。
DockerおよびDocker-composeのインストール
続いてDockerのインストールもインストールします。まずは前準備として、必要なツール類をインストールからです。
次にDocker公式のGPG公開鍵をインストールします。
続いてリポジトリを追加します。
そして、インストールです。
Dockerのサービスを開始します。
次のコマンドでバージョン情報が表示されることを確認します。
続いてDocker-composeもインストールします。Docker-composeは、複数のコンテナを使うDockerアプリケーションを、定義・実行するツールです。
こちらは基本的にダウンロードして実行権限を付ければOKです(ここではバージョン1.25.5をダウンロード)。
以下のコマンドでバージョン情報が表示されることを確認してください。
DockerのPythonモジュールをインストール
AWXのインストールはAnsibleのDockerモジュールを使って行いますので、これを動作させるためにDockerのPythonモジュールをpip(pip3)でインストールします。
まずはpip3のインストールから。
DockerのPythonモジュールをインストールします。
Docker-composeのPythonモジュールをインストールします。
AWXをClone
ようやく(?)AWXのインストールです。これはGithubにあるPlaybookをAnsibleで実行することで行います。
まずはGithubからAWXをクローン。
特定のバージョンのAWXをインストールしたい場合は、https://github.com/ansible/awx/releases を見てタグを指定してクローンしてください(下はバージョン11.2.0の場合の例)。
Inventoryファイルの変更
この状態で、~/awx/installer/にあるPlaybook "install.yml"を実行すればAWXがインストールできるのですが、その前にInventoryファイルを変更します。
必ず変更していただきたいのが、下の行です。
この行の先頭の"#"(コメント記号)を消します。これをしておかないと、Playbookを(SVCに置かずに)ローカルに置いてテストする時に問題となります。
Linuxに不慣れな方は、"nano awx/installer/inventory"でInventoryファイルを開いて、「↓」キーで該当する行まで移動し、"#"を消してから、CTRL+O、Enter、CTRL+Xで保存/終了してください。
また、下の行あたりは必要であれば変更しておいてください。
Playbookの実行
さて、あとはPlaybookを実行するだけです。
Playbookが最後まで実行され、以下のような表示が出ればインストール成功です。
AWXの動作確認
正しくインストールができていれば、ブラウザを起動して、アドレスバーに「localhost」とタイプしてエンターキーを押せば、AWXのログイン画面が表示されるはずです。
トラブル発生! - ログイン画面が表示されない
ログイン画面が表示されるはずでしたが、実は私が試したPCでは、以下のような「AWX is Upgrading」という画面が表示されたままで、2時間ほど待ってみたものの結局ログイン画面は表示されませんでした。
その間ずっとCPU使用率もメモリ使用率も高いままとなっていましたので、使用したPCが良くない(メモリが少ない等)のか、それともWSL1からWSL2に移行した影響なのか? 原因がよくわからなかったので、メモリを多く搭載している別のPCに、クリーンなUbuntu 18.04にAWXをインストールしてみたものの、やっぱり同じ問題が発生しました。
私はUbuntuにもDockerにも詳しくないため、しばらく途方に暮れていたのですが、いろいろ試行錯誤してみた結果、Dockerでコンテナを全部再起動したらログイン画面が表示されるようになりました。以下はそのコマンドです。
結局詳しい原因はわかりませんでしたが、もし同じ問題が発生した場合は上のコマンドを実行してみてください。
何はともあれ、これで念願の(?)AWXがWSL上で動くようになりましたので、日々の作業を自動化するためのプラットフォームとして使っていこうと思います。
――――――――――――――――――――――――――――――――――
お問合せはお気軽に
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/