ゲームの分散ビルド on AWS

[AWS & Game Advent Calendar 2020](https://qiita.com/advent-calendar/2020/aws-game)の16日目の記事です。

#はじめに

ゲーム業界ではかねてより分散ビルドソフトウェアが使われており、古くはdistcc(今でも使っている会社はあるのでしょうか)、近年ではSN-DBS(SIEのハード向け)やIncrediBuildが使われるケースが多いかと思います。

このIncrediBuildですが、公式サイトにも[AWSに対応している](https://www.incredibuild.com/ja/product/hybrid-cloud)と書かれているものの具体的にどうすれば使える様になるかイマイチ周知されていません。
そこで本記事ではIncrediBuildのビルドノード(Agent)としてAWSのEC2インスタンスを追加する事が出来る「IncrediBuild Cloud」を利用するまでの最短手順を追ってみます。


#手順

IncrediBuild Cloudを使うのに必要な手順は以下の通りです。

1. 動作環境を整える
1. IncrediBuild Cloudのセットアップ
1. インスタンスの起動確認
1. ビルド確認

えらいシンプルですが、これらを順を追って説明します。


# 動作環境を整える

IncrediBuildを普段使っている人は知っている事かと思いますが、AgentはCoordinatorとネットワーク通信が可能である必要があります。これはAWS上にAgentを追加する場合も同じです。

つまりIncrediBuild Cloudを動作させるには、

* Agentを追加したいAWS上のネットワーク(VPC)と、社内に立てているCoordinatorが通信可能な環境である

ことが必要であり、この環境を作るには「[VPNを張る](https://aws.amazon.com/jp/vpn/)」「[専用線で繋ぐ](https://aws.amazon.com/jp/directconnect/)」などでAWSと会社をローカルネットワークとして繋ぐ事になります。
ふつうの会社であれば情シス部門などに作業を依頼するかと思います。

今回は最短手順を追うので、一番手っ取り早い

* Agentを追加したいVPCにCoordinatorを立てる

事で環境を整えます。
以下画像の通りt2.smallのWindowsインスタンスを起動してCoordinatorをインストールしました。
ここでCoordinatorが起動しているネットワークの情報(VPC ID, サブネットID)をメモしておきます(あとで使います)。
<img width="800" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/894634/f2f4a2b1-f383-e6fa-e519-329d1a00f980.png">

# IncrediBuild Cloudのセットアップ

セットアップはCoordinator Monitor画面の「Add Cloud Cores」ボタンから行います。
まずここで注意ですが、このボタンが有効になるのはCoordinatorマシン上でCoordinator Monitorを起動した時「のみ」です。
普段仕事でビルドジョブを投げる用途にのみIncrediBuildを使ってる人は、社内にいるIncrediBuildの管理者に作業を依頼する事になるかと思います。
<img width="500" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/894634/bf278e6a-d0fe-3eb8-c05a-d678fd422b9f.png">

「Add Cloud Cores」ボタンを押すとブラウザで設定画面が開きます。
2020年12月現在は以下の様な感じですが、数ヶ月前とは見た目の色合いがけっこう変わってます。
<img width="500" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/894634/9f5f7192-65e3-1d8d-285a-273205fa6408.png">

「SCALE TO CLOUD NOW」を押すと以下の画面に進むので、左の「amazon web services」を選びます。
<img width="500" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/894634/8d54a7c9-861c-9b2a-af03-db43766b96d4.png">

次の画面で「Yes, I DO.」を選び「Login」を押すとAWSユーザのアクセスキー/シークレットの入力を求められます。
アクセスキーはAWSでAdministrator権限を持つIAMユーザを作り、[新しいアクセスキーを作成する](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_access-keys.html#Using_CreateAccessKey)事で発行できます。
<img width="500" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/894634/d4edaef4-0436-3b7f-ae07-e653767a6f0d.png">

ログインするとインスタンスの設定画面が出るので必要事項を入力します。
ポイントとなるのは以下の箇所です。

* Resource Management
 * 「Use Private Network」を選び、Coordinatorが立っているVPC/サブネットを指定します
* VMs
 * 「VM Type」でEC2のインスタンスタイプを指定します
 * 「No. of VMs in Pool」で同時に起動させるEC2の最大台数を決めます
 * 「Use Spot Instances」を有効にすると[Spot Instance](https://aws.amazon.com/jp/ec2/spot/)を起動しようと試みます

<img width="800" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/894634/c7332dea-c3e7-e78f-cac7-fd00c0a18908.png">


# インスタンスの起動確認

設定を終えてしばらくするとAgentが起動します。起動が完了するとCoordinatorの「Cloud Machines」にAgentが登録されます。
<img width="500" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/894634/0fbf786b-720f-6e9d-a43b-38f91f950f41.png">

AWSのマネジメントコンソールからもEC2が起動している事を確認できます。
<img width="500" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/894634/420971f1-8cff-e708-188e-d79fb97029cc.png">

# ビルド確認

Coordinatorに接続可能な別マシンからビルドジョブを投げて動作確認します。
今回は最短手順を追うので、手っ取り早くCoordinatorと同じVPCに別マシンを立て、VisualStudioとIncrediBuildクライアントを入れてビルドジョブマシンを作りました。

実際にビルドを実行した結果は以下の通りです。
Coordinatorの「Cloud Machines」に登録されたAgentにビルドジョブが分散された事が確認できました。
<img width="800" alt="" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/894634/b09ec101-4ad1-8ca9-fe95-8596f98b97fc.png">


# おわりに

今回はIncrediBuild Cloudを使うまでの最短手順を書きました。
IAM,EC2,VPCの基本がわかっていれば数時間で動作確認まで出来ると思います。

なおIncrediBuildのライセンスについては説明を省いていますが、当然必要になります。
詳細はライセンス販売会社にご確認下さい。