【レポート】Game Server RTA in Summit Tokyo 〜多分これ(GameLift)が一番早いと思います〜(DEV-08) #AWSSummit
みなさんこんにちは、杉金です。
今回は 2022 年 5 月 25 - 26 日の 2 日間開催されている AWS Summit Onlineのセッションレポートをしていきます。セッションのサマリーを理解し、興味があるセッションをチェックすることにご活用ください。
セッション概要
「あなたの作ったゲームに、オンライン通信の要素をサクッと簡単に追加できたらと考えたことはないでしょうか」 近年の巣ごもり需要により、家族、子供、そして友達と、オンラインゲームを遊ぶ機会が増えてきています。インフラに詳しくないゲーム開発者でも、数百万人が同時に遊べる専用ゲームサーバーを簡単かつ最速で用意できるようになるために、本セッションでは Unity で開発した実際に遊ぶことのできるゲームクライアントをお客様にも配布し、みんなで遊びながら GameLift SDK を使ったゲームサーバーの実装方法を中心に Live Demo 形式で Amazon GameLift についてご紹介します。
スピーカー
AWS ソリューションアーキテクト ゲーム 岩井 泰児 氏
セッションレベル
Level 300: 中級者向け
アジェンダ
- Game Server RTAの概要
- Let's Play Unity Game in Live Demo!!
- RTA最速攻略ツール:Amazon GameLiftのご紹介
- GameLift SDKを使ったServer Side実装の解説
レポート
Game Server RTAの概要
- RTAとは「リアルタイムアタック」の略であり、ゲームを通しでクリアするまでの実時間を競う競技を指す
- 本セッションではゲームサーバーをいかに早く構築できるかを競うGame Server RTAを開催する
- Game Server RTAのレギュレーション
- クリア条件
- AWSを使ってゲームサーバーを以下の条件で最速構築を目指す
- スタート条件:運営から渡されたビルド済みアプリの準備ができ次第計測を開始
- ストップ条件:マルチプレイゲームが実際に遊べることが確認できたらクリア
- AWSを使ってゲームサーバーを以下の条件で最速構築を目指す
- プレイ制約
- Well ArchitectedなServer構築は必須要件
- Reliability:500人同時に安心して遊べるスケーラビリティを担保
- Cost Optimization:コストダウンのためリソースの効率化は必須
- Operational Excellence:Blue/Greenデプロイにより容易に運用できる仕組みを用意
- Performance Efficiency:リソース最適化のためにマッチメイキング(+バックフィル)は必須
- Well ArchitectedなServer構築は必須要件
- クリア条件
運営チームからの贈り物1
- Unity製のゲームクライアント
- 5人同時にマルチプレイ可能
- 登場キャラの曲線美が大人気
- リアルタイムに位置情報を共有
- 十字キーでの操作
- マルチリージョン対応
- サーバー(Headless mode)付属
- ゲームサーバーデプロイ完了後にセッション参加者が実際のゲームに参加できる
- 5人同時にマルチプレイ可能
運営チームからの贈り物2
- API用Serverless Backend
- 提供されているもの
- マッチメイキングリクエストAPI
- ゲームサーバー接続先確認API
- サーバーやプレイヤーの情報保存用DB
- 提供されていないもの
- 具体的なマッチメイキング処理のロジック
- プレイヤー接続先ゲームサーバー本体
- 提供されているもの
攻略チャート
- ビルドのアップロード
- ビルドのデプロイ開始
- プレイヤーセッション管理
- マッチメイキング
- ビルドのデプロイ完了
- 動作確認(Unity)
Let's Play Unity Game in Live Demo!!
- RTAの開始
- 攻略チャートの1〜4までは6分20秒で完了
- デプロイ完了待ちの間に技術要素の解説
RTA最速攻略ツール Amazon GameLiftのご紹介
アーキテクチャ全体像
引用:https://github.com/aws-samples/aws-gamelift-and-serverless-backend-sample
- アーキテクチャ全体像
- グレーの部分が事前提供のもの
- 事前提供以外のマッチメイキングやゲームサーバーが今回の構築対象
- グレーの部分が事前提供のもの
Amazon GameLift
- クラウド内でセッションベースのマルチプレイヤー専用ゲームサーバーをデプロイ・操作・スケーリングするマネージド型サービス
- 数百万プレイヤーの需要に応えるスケール性能を提供
- ゲームサーバーは22のリージョンに展開可能
- スピード感のある低遅延なゲームプレイを楽しめる
- 信頼性と安全性の高いインフラストラクチャ
- 柔軟にカスタマイズ可能な豊富な機能セット群
- お客様は運用ではなくゲーム開発に集中可能
RTAの高速開発を支えるGameLiftの機能
- 4つの機能
- Fleets
- Aliases
- Queues
- FlexMatch
- GameLift - Fleet
- ゲームビルドをデプロイするサーバリソース群
- 60種類から選べる柔軟なインスタンスタイプ
- 5つの大陸の22リージョンでマルチリージョン構成が可能
- インスタンスロール(IAM)を使ってAWSリソースと連携可能
- スケーリングポリシー(ターゲット追跡、ルールベース)
- プロセス管理機能
- TLS証明書生成
- SSH/RDP機能
- ゲームビルドをデプロイするサーバリソース群
- GameLift - Alias
- クライアントのコードを変えずにフリートを切り替える2つの仕組み
- シンプルエイリアス
- [機能]エイリアスを参照したときに特定のフリートにルーティングさせる
- [用途]新規フリート(ビルド)をデプロイした時に安全にトラフィックを切り替える
- ターミナルエイリアス
- [機能]フリートにルーティングさせずに終了メッセージをクライアントに直接返す
- [用途]ゲームの大きな更新時にクライアントのアップデートを促すメッセージを送る
- シンプルエイリアス
- クライアントのコードを変えずにフリートを切り替える2つの仕組み
- GameLift - Queue
- ゲームセッションのフリートへの配置を効率化
- プレイヤーのレイテンシーを最小に抑える
- スポットインスタンスを活用してコスト削減
- キューアクティビティのメトリクスを取得し、リアルタイムにモニタリング
- キューのフォールバック処理とフリートのAutoScaling機能により、ゲームセッションの配置速度と可用性が向上
- ゲームセッションのフリートへの配置を効率化
- GameLift - FlexMatch
- カスタマイズ可能なマッチメイキングサービス
- フレキシブルなマッチングにおいてマルチプレイヤーゲームをさらに楽しく
- 簡単にゲームに合ったカスタムルールを複数作れる
- チームマッチング対応
- サーバーとの間のレイテンシーを基準にマッチング可能
- 時間と共にルールの条件を緩和
- マッチングされた後に明示的に受託可能
- マッチメイキングのメトリクスを取得
- キューを使用してゲームセッションを効率的に配置
- プレイヤーの途中抜け/参加をサポート(バックフィル)
- ユーザーがアクセスするときの処理の流れ
- FLexMatchでマッチメイキング→Queuesでキューイング→Aliasに接続→接続先となるFleetsのゲームサーバー
GameLift SDKを使ったServer Side実装の解説
- GameLift - Server SDK
- ゲームサーバーの管理をSDKを通じてGameLiftにオフロードする
- Server SDKによりゲームサーバー管理用APIを提供
- サーバーのプロセス登録
- サーバーのヘルスチェック
- プレイヤーの受け入れ通知
- サーバーのシャットダウン
- Server SDKの対応言語
- C++/C#/Unreal Plugin/Unity Pluginに対応
セッションまとめ
- Amazon GameLiftを使うことでインフラにあまり詳しくないゲーム開発者の方でも、数百万人が同時に遊べる専用ゲームサーバーを簡単かつ高速に用意できるようになります
- コスト最適化や運用のための仕組みを用意する必要がなくなることで質の高いゲーム体験をユーザーに提供する開発作業に集中できます
- ぜひあなたが作るゲームにもオンライン要素を追加してみましょう!
感想
Game Server RTAということでハラハラしながら楽しめたセッションでした。私の視聴環境のせいか途中で映像が途切れてしまい、惜しくもゴール達成の瞬間は見届けられなかったのですが、セッション終了後にダウンロードしたゲームクライアントからゲームサーバーに接続できました。Amazon GameLiftの設定でゲームサーバーのリージョンとして東京と大阪をコンソールから簡単に選択していましたが、マルチリージョン構成をEC2でやろうとするとインフラまわりの設計が悩ましいので便利だなと思いました。また、マッチメイキングやバックフィルもGameLiftの機能で実現できるのも激アツですね!