[レポート] Build a scalable cross-platform multiplayer game backend on AWS #GAM301-R1
こんばんは、リテールアプリ共創部のmorimorikochanです。
ワークショップに参加したので、内容の紹介と感想を記録します。
セッション概要
セッションカタログの内容は以下のとおりです。
タイトル
GAM301-R1 | Build a scalable cross-platform multiplayer game backend on AWS [REPEAT]
概要
In this workshop, learn how to use the AWS Game Backend Framework to develop a custom cross-platform game backend for your multiplayer game. Explore cross-platform player identity, backend microservices for matchmaking, and integrations to popular game engines. Also learn how to use Amazon GameLift to host your game servers globally, close to players for a low-latency real-time experience. You must bring your laptop to participate.
その他
- Session types: Workshop
- Topic: Architecture, Serverless Compute & Containers
- Industry : Games
- Area of interest: Well-Architected Framework
- Level: 300 – Advanced
- Services: Amazon Cognito, Amazon GameLift
内容の紹介
まず初めに8分ほど、ゲームのバックエンドやAmazon GameLiftについての説明がありましたので、軽く紹介します
ゲームのバックエンドではユーザーの認証機能やソーシャル機能を提供しますが、スケーラビリティやオブサーバビリティや蝋料がかかるなど、課題があります。
これらの課題に対してアプローチする方法が2つあります。1つはSaaSを利用する方法、もう1つは自身でホスティングし管理する方法です。
前者はAWSのパートナーソリューションと連携が可能であるのに対し、後者は細かなコントロールが可能というメリットがあります。
これらの中間に位置するものが今日紹介するAWS Game Backend Frameworkです。
ゲームのバックエンドの一部をカスタマイズし他の部分をマネージドサービスに頼ることができます。
また、これは全てオープンソースです
ただし、今日のワークショップでは独自のゲームサーバーを構築せず代わりにAmazon GameLiftを利用します。
Amazon GameLiftを使うと、ホスティングするゲームサーバーの必要性能に応じて柔軟にサーバーが選択できます。また、低遅延と高可用性も手に入れることが可能です。 また、複数のリージョンで利用可能なため複数の地域でゲームを提供することが可能です
AWS Game Backend FrameworkはCDKで提供されており、チャット機能やマルチプレイヤー機能・友達機能などがあらかじめサンプルとして含まれています
AWS Game Backend Frameworkの動作イメージです。
ゲームクライアントにAWS Game SDKを導入し、ユーザーを認証する際にはそのSDKからIdentity componentを呼び出すことで認証情報を保持することができ、SDKを使って別で構築されたバックエンドコンポーネントを認証情報付きで呼び出すことができます。
今回のワークショップでは、"別で構築されたバックエンドコンポーネント"としてAmazon GameLiftを利用します。
やったこと
まず初めにidentity componentをCDKでデプロイしました。CDKのコードは以下から参照できます。
デプロイした後はこのような構成になっており、
ゲームクライアントから呼び出すことができるAPI GatewayとCloudFrontが提供されます。
このうちCloudFrontはJWKsエンドポイントを提供しています。JWKsエンドポイントとは、
AWS Game Backend Frameworkではユーザーの認証情報がJWTで表現されるのですが、このJWTを検証するためのエンドポイントです。
また、その後はGameLift関連のリソースをデプロイしていきます。
色々一気にデプロイされています。
重要なのは、Amazon GameLift FlexMatchとAmazon GameLift Multi-Location Fleetです。
AWS LambdaからAmazon GameLift FlexMatchがマッチメイキングのリクエストを受け、その結果をAmazon SNS, AWS Lambda, DynamoDBを通して記録され、それを別のAWS Lambdaが定期的にポーリングするような構成となっています。
また、SQSがAmazon GameLift FlexMatchからのリクエストを受けて、地理的に最適なフリートにデータを渡し、そのフリートがセッションを用意します。
デプロイが終わったのちに負荷テストを行ったところ、実際にうまく動作しており、なおかつCloudWatchにログやメトリクスが正しく出力されていることがわかりました。
Godot Engineで起動させる場合の手順・注意点
また、AWS Game Backend Frameworkのリポジトリには実際にゲームエンジンから呼び出すサンプルもついているとのことだったので、Godot Engineをインストールし起動させてみました。
Unityを最初は検討していましたが、インストーラーのサイズが大きすぎて諦めました。Godot Engineは数百MB程度でしたのでお手軽に導入が可能です。
Godot Engineをインストールした後、起動する前にあらかじめGodotSample/BackendFeatures/AmazonGameLiftIntegration/AmazonGameLiftIntegration.gd
のファイルの以下の部分を修正します。すでにこの値は前述のワークショップで手に入れれているはずです
Godot Engineで開くファイルは GodotSample/project.godot
です。リポジトリに記載のファイルはv4.3では開くことができませんでした。
また、Godot Engineのプロジェクト起動後にシーンを実行する必要があるのですが、押すのは画面右上のツールバーの左端のボタンではなく、右から3番目のボタンです。
うまくいくと以下のようにコンソール部分にログが出力されます。
感想
- ワークショップ初参加でしたが、なんとか終えることができました。
- AWSが提供するワークショップのページがわかりやすかったのですんなり内容を理解できたように思います。
- GameLiftやAWS Game Backend Frameworkを全く知らない状態で受けましたが、今回デプロイした範囲についてはしっかり理解できたと思います。
- ただし、GameLift自体がさまざまな機能を持っているようなのでまだまだ実務で利用するには学習が必要だなと感じます。
- せっかく理解したので何かしら趣味で使ってみたいなと思います