【IaCで作るselenium環境】04_Androidコンテナを構築する(Azure準備編)

直近の関連エントリ

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

こんにちは。SHIFTのスクラムマスター・テスト自動化エンジニアの石丸です。

前回記事からちょっと時間が経ってしまいました。世の中の流れは速いもので、エントリを書いていないこの2ヶ月弱の間に、コンテナ界隈でも面白いニュースがちょいちょい出回っています。

例えばdocker-composeでECS環境へのデプロイが可能になったり
kubernates1.20でdockershimが非推奨になる話題でざわついたり
このあたりは既に世間に良記事が出ていますので、そちらをご覧ください。

さて、前回はGgr環境構築まで話しました。
今回からSelenoidを使用したAndroidコンテナ構築の話を進めていきます。


■今回のテーマ

今回のテーマは「SelenoidでAndroidコンテナ」です。

Androidのテストですが、みなさんどのようにやっていますか?

自マシンにAndroidStudioを入れてAVDしたり、あと簡単なのはSauceLabsやBrowserStackなどのクラウドテスティングを使用する方法なんかがパっと思いつくかなと思います。

ですが実はSelenoidでもAndroidイメージが準備されていて、自力で準備することが可能です。
今回はこちらをチャレンジしてみましょう。

なお、今回の内容はクラウドサービスであるMicrosoft Azureの準備がメインタスクとなります。
結構手順が多くなると思いますが、なるべく最小手順でAzure準備までご説明します。


■前提

・windows環境での構築
【重要】Azure環境


■前回のおさらい

前回の最後はこんな感じでした。

今回の構成_03_妥協版

Ggrが複数のSelenoid環境をロードバランスしている状態です。


■Androidコンテナ構築時のハードル

SelenoidでAndroidコンテナを立てる手順自体は、実は特に難しくありません。他ブラウザと同様に

・事前にimageをpull
・browsers.jsonで設定
・テストコードを準備して実行(これもaerokubeのGitHubにあります


でおしまいです。が、これまで説明してきた環境では、普通に上記を実行しても起動しません。

理由はDockerDesktop環境の中に、スマートフォン仮想環境が立っている構成になってしまうからです。

画像2

上記図のAndroidコンテナの中に、AndroidVirtualDevice(AVD)というものが入っているのが確認できます。これが1つめのVMです。

次に、我々がDockerDesktopを使用するとき、実は知らず知らずのうちにVMのお世話になっています。

理由はDockerコンテナがLinuxカーネル上でしか動かないからなのですが、DockerDesktopユーザにはあまりこの辺り意識させない作りになっています。
これが2つめのVMです。

そしてSelenoidでは、DockerDesktop(windows、mac)でのAndroidコンテナを使用したVMの入れ子を許容していません。

ローカル環境で普通に構築しても動かない理由はこれになります。

================================================
【補足】
この状況はWSL2の出現でちょっと変わるかもしれません。
どこかのタイミングで改めて検証してみようと思います。
================================================


■AzureでNestedVMする

DockerDesktopを使わずに構築するには、選択肢がいくつかあります。

1. ローカルPCにVMを入れてDockerをたて、Androidコンテナを起動
2. LinuxマシンにDockerをたて、Androidコンテナを起動
3. クラウドサービス(AWS、GCP、Azure)でAndroidコンテナを起動

今回は拡張性とお手軽さの観点から、3.のクラウドサービスを使用して実現しようと思います。

クラウドサービスを使用する場合の判断として、mercariさんのこちらのエントリが大変参考になりました。感謝。

上記の記事ではAWSのメタルインスタンスを利用した手順でしたので、今回は敢えてAzureをチョイスします。

Azureは上記記事のとおりNestedVirtualizationに対応していることもありますが、12ヶ月の基本使用料無料とともに、初月の使用に関しては¥22,500の無料利用券がついてきます。大抵の試用は無料で試せてしまいます。


■無料枠でAzureを準備する

前置きが長くなりましたが、ここからが本題です。
今回は以下の手順を実施します。
Azureを利用する分、若干手間が増えますが、がんばって進めましょう!

1. Azureアカウントを作成
(クレカ、携帯電話、microsoftアカウントを準備ください)
2. Azure PortalからVMの作成
3. DNS名を設定
4. SSH接続の確認

最初に補足

・無料アカウントを開始すると「無料試用版」というサブスクリプションで¥22,500が付きます。この無料枠を使い切ってもサービスが停止されるだけで、追加で課金されることは無いのでご安心ください。

・1ヶ月を越えると無料試用版サブスクリプションから従量課金制サブスクリプションへの移行を促されます。移行は手動で行うため、移行作業さえしなければ課金されません。移行すると、12ヶ月無料リソース以外の使用料はかかります。

・最短でAzureを立ち上げるため、Azureの基本的な説明は省きます。詳しくはこちらをご覧ください。

無料アカウントの作成
※既にAzureのご契約がある方は、このセクションは飛ばして頂いて構いません。

以下を準備します。

1. クレジットカード(過去Azure契約していないもの)
2. 携帯電話(通話可能なもの)
3. Microsoftアカウント


1つ目に関しては¥22,500のバウチャーが受けられなくなるので、Azureの使用履歴がないクレカを使用しましょう。

2つ目は本人確認で2段階認証が発生します。
携帯電話での認証が手順に差し込まれるので(通話 or SMS)、こちらも必ず準備しましょう。

3つ目は以下を参考に作成してください。

Azure開通の手順ですがMicrosoft learnが準備されています。
こちらに沿って操作すれば無料試用版のアカウントが作成されます。

【注意】
Microsoftアカウントに関しては必ず2段階認証設定をしておくことを強くお勧めします
Authenticatorアプリが出ているので、こちらを使用しましょう。


■Virtual Machinesをたてる

VirtualMachinesとは、AWSでいうところのEC2にあたるものです。
建て方は非常に簡単です。

手順1
まずAzure Portalにログインしてダッシュボードにアクセスしてください。

画像3

Azureサービス内に「Virtual Machines」という項目があるのでこちらを選択します。(見つからない場合はその他のサービスから遷移先画面で選択)

手順2
VirtualMachineの基本設定を入力します。
構築手順はMicrosoft Learnが参考になります。
こちらを踏まえて一部入力値を以下のように設定してください。

・サブスクリプション:無料試用版
・リソースグループ:初期値のまま触らない
 (仮想マシン名を入力すると自動生成)
・仮想マシン名:SelenoidVM
・サイズ:Standard D4s v3 (4 vcpu 数、16 GiB メモリ)

また管理者アカウントは、必ずSSHを選択してください。

画像4

キーペア名は仮想マシン名を入力すると自動的に命名されるため、こちらも初期値のままとします。

手順3
管理タブで自動シャットダウンを設定しておきます。

管理タブ

これでVirtualMachineを落とし忘れた!ということを防ぐことができます。

手順4
最後に画面下部にある「確認および作成」ボタンを押すと、仮想マシン作成の確認画面が出るので、そこで再度「作成」ボタンを押します。

画像6

このときSSHキーペアが自動的に作成され、ファイルのダウンロードを促されるので必ずダウンロードしてください。(後続の作業で必要となります)

ここまでで、無事Virtual Machineを作成できたと思います。


■DNS名の設定

今回作成したVMはDynamicIPアドレスが使用されているので、VMを立ち上げなおすとIPが変わってしまいます。VMにアクセスする際にいつも同じようにアクセスするためにもDNSを設定しておきましょう。

まずAzureポータルにアクセスして、Virtual Machinesを選択します。

画像7

先程作成したVM「selenoidVM」を選択します。

画像8

VMの概要が表示されるので、画面の右下の「DNS名」内の構成リンクを押します。

画像9

ここでDNS名ラベルに好きな名前を入れます。
下記例では「myselenoidvm」としましたが、この名前はURLになるので世界中で一意になります。
既に存在している名前でしたら残念ですが変えましょう。

重複が無い場合は入力欄右側に緑のレ点が付きます。

画像10

問題なければ画面上部の保存ボタンを押します。

これで次回からは
myselenoidvm.eastus.cloudapp.azure.com
としてVMにアクセス可能となります。


■SSH接続の確認

VMがたったので、SSHのアクセス確認をしましょう。
ここで先ほどダウンロードしたキーペアを使用します。

まずダウンロードしたキーペアファイルを自身のユーザフォルダ配下にある.sshフォルダ内に配置します。(ファイルの置き場は画像を参考にしてください)

キーの置き場

次にPowerShellから以下のコマンドを実行します。

>ssh -i ~/.ssh/selenoidVM_key.pem azureuser@myselenoidvm.eastus.cloudapp.azure.com

SSH接続するサーバにアクセス履歴がない場合は必ず以下を聞かれます。
「yes」を選択します。

Are you sure you want to continue connecting (yes/no)? yes

正常にアクセスができたら以下のように出力されると思います。

Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-1031-azure x86_64)

* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage

 System information as of Mon Dec 14 13:31:28 JST 2020Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-1031-azure x86_64)

* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage

 System information as of Mon Dec 14 13:31:28 JST 2020

(中略)

azureuser@myselenoid:~$

お疲れ様でした!

今回はこちらで終わりですので、VMは一旦落としてしまいましょう。
「停止」を選択します。

画像12

今回作成された構成

今回の構成_04


■まとめ

実際の構築手順

1. Azureアカウントを作成する
(クレカ、携帯電話、microsoftアカウントを準備ください)
2. Azure PortalからVMの作成する
3. DNS名を設定する
4. SSH接続の確認する

次回、やっと本題のAndroidコンテナを構築するために、今回準備した空っぽのVMにAnsibleでプロビジョニングをかけにいきます。

ではでは。

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

執筆者プロフィール:石丸圭
スクラムを中心にテストのアジリティーを高めるべく
日々仕事のリードタイム・プロセスタイムの圧縮に奮闘中。
3児のパパ(7歳4歳1歳)。
MUPうさぎクラス。

個人的なご相談はインスタDMにてどうぞー。
Instagram:@theboyalex

【ご案内】
テスト自動化のご相談は以下までお気軽にご連絡ください。
https://forms.office.com/Pages/ResponsePage.aspx?id=IkyjGtUOzUeqMMEbzjGdlSf__O4V1URMn-5BpGP8xd9UNE9ESkRPUEs1Wk9FM0REU1BXODFBSkI0MC4u

お問合せはお気軽に
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/