[リポート]How Epic Games develops Fortnite faster with a build farm on AWS #reinvent #GAM203
概要
Epic Games is a leading interactive entertainment company and provider of real-time 3D creation technology. Epic is also the creator of Fortnite—one of the world’s most popular games, with over 350 million accounts. In this session, learn how with the help of AWS, Fortnite entertains players around the world, years after its initial release in 2017. By migrating its internal build farm from on premises to AWS services, including Amazon EC2 and Amazon S3, Epic drastically improved development iteration times and its rapid release cycle to continually deliver fresh content to players.
SPEAKERS
- Greg Troyan
- Alex Carberry
SESSION LEVEL
200 - Intermediate
内容
繰り返し継続的な開発周期を短縮できなければ、全体の開発も速くなれない。
開発用語:
- Compile(コンパイル)
普通のソースからバイナリーにコンパイルする過程。 -
Cook(コック)
エンジンが(PNG、WAV)内部のフォーマットから特定なプラットフォームに使うフォーマットに転換する過程。
2020年にあったチャレンジ:
- Unreal Engine と Fortnite の開発
- どんどん増員しているグローバルなチーム
- リソースをUE5の開発にかかってます
- 他の製品をいいペースでリリースしてます
- コロナ禍の影響で在宅勤務に変更する
在宅勤務に変えてから、いくつ問題も発生しました。
アジャイル的に開発をスムーズに進められなくなって、例えば:
- コードが汚い
- 最後まで焦ってバグを直す
- 普段仕事以上の負荷がかかる
- 手動でテストする
- 在宅勤務に不便がある(遅延、接続問題など)
- バージョンアップの開発周期が長くなる
普通のアプリ開発より、ゲームエンジンの開発やテストなどは非常に時間がかかります。
こういう複雑な開発には、頼れる、スケーリングしやすいインフラが重要です。
昔のビルド環境は完全にオンプレでしたが、ビルド環境をクラウドへ移行することに決めた。
複雑な開発流れをどう効率化するのか:
- できる限り自動化にすること
- 検証を頻繁的にすること
- 早くフィードバックを提出すること
クラウド移行のPOC(Proof of Concept、概念実証)はこういう感じです。
オンプレの環境がAWS Direct Connect経由、Amazon EKSでUnreal EngineのCI環境を作って、クラウド上にWindowsのビルダーを作られました。
POCの検証ができて、MVP(Minimal Viable Product、実用最小限の製品)の作業に進めました。
MVPに使うソフトは三つあります:
- Ansibleは設定管理担当
- HashiCorp Packerは仮想マシンのイメージ作成担当
- HashiCorp Terraformはビルド環境(インフラ)作成担当
これで速やかにクラウドビルド環境を作成することができました。
- CI(continuous integration、継続的インテグレーション)は20分一回
- ちゃんとテストされるコードは少ない
- 一日最大全ビルド回数は4回
- 一日中問題がない全ビルドは1回か0回
- ストーレージとキャッシング: Amazon FSx
- バージョン管理(Perforce): Amazon EC2 / EC2 Autho Scaling / EBS
- ネットワーク10Gbpsから40Gbpsにアップグレード: Amazon Direct Connect
- 分散ビルド(Incredibuild): Amazon EC2 / EC2 Autho Scaling / EBS
Incredibuildというソフトでクラウドコアを使って分散ビルドを行ってます。
大体構築できたアーキテクチャで、毎日ビルド数が倍になって、問題ないビルドは少なくても1日一回以上がありました。
AWSのクラウドサービスはいろんな環境(OS、ハード)を作れるので、クロースプラットフォームには非常に使いやすいです。
クラウドリソースはよくオンオフするので、スケジュール的にキャッシングするためAmazon Lambdaを使われました。
QAチームもグローバルなので、ビルドしたものをすぐ配布できるように、Amazon S3を使われました。
検証したクラウド開発環境をスケーリングアップすると、コンパイル時間は75%短縮し、QAチームにビルドしたものを配ることは2時間から20分になりました。
クラウドに移行する開発環境についての注意点:
- データの転送、交換、保存、配布を高速で行うこと
- 重複なデータを減らすこと
- 開発環境はペットに扱うことではなく、乳牛のように(メインテナンスしやすい、効率がいい)作ります
- クラウドリソースに費用がかかるので、リソースのオンオフをうまくスケジューリングすること
- ダイナミック的にインフラを管理すること
- ビルダーをコンテナ化すること
その他:
- 開発中収集した開発データで開発環境を改善します
- Epic Games社内プロジェクトの経験では、コアが多いほどマシンでビルドが速い、コアのクロック周波数が高いほどコックが速いです。
- AWS Device Farmでいろんなデバイスでテストできます