#概要
Amazon GameLiftについて調べる機会があったので、全体像を出来るだけ分かりやすいようにまとめてみた。
####参考にさせて頂いたサイト
Amazon GameLift の仕組み
https://docs.aws.amazon.com/ja_jp/gamelift/latest/developerguide/gamelift-howitworks.html#gamelift-howitworks-placing
Amazon GameLift – ゲームサーバー/クライアントのやり取り
https://docs.aws.amazon.com/ja_jp/gamelift/latest/developerguide/gamelift-sdk-server-api-interaction-vsd.html
AWS再入門ブログリレー Amazon GameLift 編
https://dev.classmethod.jp/articles/re-introduction-2020-amazon-gamelift/
#GameLiftとは?
Amazon GameLift は、マルチプレイヤーゲーム用のクラウドサーバーをデプロイ、運用、スケーリングする、専用のゲームサーバーホスティングソリューションです。(公式サイトより転載)
GameLiftは簡単に言うと、マルチプレイに関する色々なことをいい感じに管理/運用してくれるすごいサービス。
主にマッチング、プレイヤー人数に合わせたサーバーのスケーリング、ログの収集などをやってくれる。
FlexMatchの仕組みを使えば、様々な条件を元に最適なマッチングをすることが可能で、待機時間により条件を段階的に緩和することも出来る。
例1:最初は遅延が少ないリージョンで対戦相手を探し、しばらく見つからなかった場合は遅延の上限を緩和して探す。
例2:最初はプレイヤーレベルが近い人を探し、しばらく見つからなかった場合はプレイヤーレベルの差の上限を緩和して探す。
#全体構成
ざっくりとしたイメージは以下の画像の通り。
クライアントからGameLiftにリクエストを送るフローに関しては、直接ClientSDKでGameLiftServiceに問い合わせる方法もあるが、今回の画像はAPI GatewayやLambdaを介しHttpリクエストで送る方法になっている。
このフローの方が、クライアントに直接リクエストの実装をするよりも安全で管理がしやすくなる。
#専用用語
画像の構成を理解する上で最低限必要な単語をまとめてみた。
・EC2
Amazon Elastic Compute Cloudの略
AWS上にスケーリング可能な仮想サーバーを構築出来るサービスのこと
・フリート
EC2インスタンス群形式のホスティングリソース
必要に応じて、インスタンス数を調節してくれる
・エイリアス
クライアントとフリートの中継地点
エイリアスに紐づけているフリートを変更することで、クライアントを変更せずに接続先のフリートを変更することが出来る
https://docs.aws.amazon.com/ja_jp/gamelift/latest/developerguide/aliases-creating.html
・キュー
新しいゲームセッションを作る場合に、複数のフリートから最適なものを選ぶ為の定義
リクエスト時にプレイヤーのpingを渡すと、最適なフリート(リージョン)を選んでくれる
ping情報が無い場合、キューに登録されているリストの順番で上から選ぶ
https://docs.aws.amazon.com/ja_jp/gamelift/latest/developerguide/queues-design.html
・マッチメイキングコンフィグレーション
マッチングする上での様々な設定をする
https://docs.aws.amazon.com/ja_jp/gamelift/latest/developerguide/match-configuration.html
最低限必要な設定は以下の3つ
・ルールセット
GameLiftのダッシュボード->マッチメーキングルールセットから見れる
最大人数など、マッチングに関するルールが色々設定してある
・ゲームセッションキュー
紐付けるキュー
・リクエストのタイムアウト
タイムアウトの時間
それ以外にもいくつか設定出来る項目がある
・プレイヤーの承諾(no-acceptance-required)
マッチングに参加する場合に、承諾を要求するかどうか
・プレイヤースロットの予約(additional-player-count)
・API Gateway
クライアントからhttpリクエストを受け取る為のエンドポイント
Lambda(ラムダ)と紐付いていて、リクエストを受け取るとラムダの関数を実行してくれる
・Lambda(ラムダ)
GameLiftを操作する為の関数
APIGatewayなどをトリガーにして実行することが出来る
クライアントとGameLiftの繋ぎの役目で、クライアントに直接リクエストなどを実装するより安全で管理がしやすくなる
#まとめ
今回は全体構成のざっくりしたイメージと、最低限の単語にだけ触れてみた。
AWSは公式ドキュメントや利用者の記事が多く調べやすい反面、出来ることが膨大なので、全てを理解するのは大変そうだと感じた。