Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Amazon GameLiftの 構成要素を整理する

Amazon GameLiftの 構成要素を整理する

AmazonGameLiftはフリートやキューなど様々なコンポーネントを組み合わせることでゲームサーバーの運用を行うことができますが、実際に構築しようとすると各コンポーネントでどのような設定をすれば良いのか混乱しがちです。このセッションでは、各コンポーネントの役割や標準的な設定内容について解説します。

入井 啓太

July 30, 2024
Tweet

More Decks by 入井 啓太

Other Decks in Technology

Transcript

  1. Amazon GameLiftの概要 補⾜: 専⽤ゲームサーバーについて • 専⽤ゲームサーバーの主な機能 ◦ リアルタイム通信 ◦ プレイヤーの位置情報同期

    ◦ ゲームロジック処理  • 上記以外の機能(マスターデータ管理等)は別途⽴てたWeb APIサー バーに任せるパターンが多い
  2. Amazon GameLiftのホスティングの種類 GameLift FleetIQ • ゲームサーバーEC2インスタンスを⾃分で管理しつつ、⼀部イ ンフラ管理をGameLiftに任せる形式 • ベースはEC2 Auto

    Scaling • 既存のオンプレミス環境をクラウドに拡張したり、ゲームサー バー管理をお任せしつつ⾃由度を維持したい場合に有⽤ ◦ フルマネージドよりSDKの対応⾔語が広く、サーバー内プ ロセスなどの使い⽅も⾃由
  3. Amazon GameLiftのホスティングの種類 ホスティングの種類のまとめ • ⽤途に応じて様々なホスティング⽅法を選択できる • GameLift FleetIQやGameLift Anywhereは応⽤的機能 •

    初学者はサービス側でやってくれことが多いリアルタ イムサーバーやカスタムサーバーから触っていくと⼊ りやすい
  4. リアルタイム(カスタム)サーバーの主なコンポーネント フリート • ゲームサーバーとなるインスタンスをとりまとめる存在 • 全てのインスタンスはスケーリングポリシーに基づいてフリート内に作成される • 以下のような設定内容がフリート内部で⽴ち上がるインスタンスに適⽤される ◦ ゲームサーバーとして使⽤するビルド‧スクリプト

    ◦ インスタンスタイプ ◦ ロケーション ◦ スケーリングポリシー ◦ インスタンスロール ◦ ゲームサーバーランタイムの起動パス、起動パラメータ、プロセス数 ◦ ポートごとのインバウンドアクセス制限 • マルチロケーションフリートという機能によりグローバル対応時も複数のリージョンにフリートを作成 する必要は無い
  5. リアルタイム(カスタム)サーバーの主なコンポーネント インスタンス • ゲームサーバービルドやスクリプトを実⾏するリソース • フリートで設定した内容を元に作成される • オンデマンドとスポットがある • AWS

    CLIのget-instance-accessコマンドで認証情報を取得 することで各インスタンスにSSH接続可能 • プレイヤーはインスタンスを介して他のプレイヤーとマル チプレイを⾏う
  6. リアルタイム(カスタム)サーバーの主なコンポーネント インスタンスの種類 • オンデマンド ◦ 必要なときに必要な期間使⽤可能 ◦ 単価は固定 • スポット

    ◦ AWS内の余剰コンピューティングリソースを利⽤する ◦ 利⽤中に中断されることがある ▪ インスタンス選定時は独⾃の仕組みによってできるだけ中断確率の低いインスタンスが選ば れる ▪ 中段の2分前に専⽤のコールバックが実⾏されるので、あらかじめ安全にゲームを終了させ る処理などを⼊れておく必要がある ▪ 料⾦はロケーションごとの対象インスタンスタイプの需要と共有によって決まるが、オンデ マンドよりは常に安い
  7. リアルタイム(カスタム)サーバーの主なコンポーネント FlexMatch • あらかじめ作成したルール設定を元にプレイヤー同⼠のマッチングを⾏う機能 • マッチングルール設定の主な内容 ◦ チームごとの最⼩最⼤⼈数 ◦ 独⾃の値(レベル等)に基づいた条件設定

    ◦ 時間の経過による条件の変更 • 1対1対戦から数百名規模の⼤規模なマッチングまで対応可能 • 以下の2つのモードがある ◦ マネージド: マッチング結果を指定したキューに渡す ◦ スタンドアロン: マッチング結果によるセッション配置の仕組は別途⾃前で構築する ▪ ⾃前のEC2やFleetIQでゲームサーバーを構築している場合も対応可能
  8. ビルドの設定例 各コンポーネントの設定例 項目 内容 備考 OS Windows Server 2016 ゲームサーバープログラムの対

    応OSに合わせる 他にAL2, AL2023を選択可能 サーバーSDKバージョン 4.0.2 ゲームサーバープログラムで使 用しているSDKのバージョンに合 わせる S3 URI S3経由でビルドパッケージをアッ プロードする場合は指定
  9. フリートの設定例 1 各コンポーネントの設定例 項目 内容 備考 バイナリ型 ビルド (他、ビルドという項目で対象の ビルドリソースも指定)

    ここでスクリプトを選択するとスク リプト用フリートが作成できる フリートタイプ オンデマンド コスト重視かつ中断対応が可能 であればスポットも選択可 EC2インスタンスタイプ c5.large ゲームサーバープログラムを動 作させるのに丁度良いものを選 択 インスタンスロール (なし) Cloudwatch Agentを入れたい場 合などは、ここで各インスタンス に必要なロールを指定する
  10. フリートの設定例 2 各コンポーネントの設定例 項目 内容 備考 ロケーション ap-northeast-1 (ホームリージョン) フリート作成先リージョンが自動

    的に指定される 他のリージョンにもインスタンスを 立てたい場合は追加 スケーリングポリシー 使用可能なゲームセッション割合 が残り15 API経由で他のメトリクスを参照 したポリシーも設定可能 スケーリング容量 最小サイズ: 0 目的のインスタンス: 1 最大サイズ: 3 目的のインスタンスは EC2 Auto Scalingの希望する容量と同じ で、最初に起動する数
  11. キューの設定例 各コンポーネントの設定例 項目 内容 備考 ゲームセッション配置優先順位 1.レイテンシー 2.コスト 3.送信先 4.ロケーション

    キューにゲーム参加リクエストが 来た際、何を優先してゲームセッ ションを配置するかの設定 送信先の順序 1:リージョン:ap-northeast-1 フリート:先ほど作成したもの 2以降:同リージョン別フリート ゲームセッション配置先フリート。 複数設置でき、同じ条件の時に どのフリートを優先するかも設定 可能 ロケーションの順序 1:ap-northeast-1 2以降:無し 同じ条件の時、どのロケーション への配置を優先するかの設定
  12. 各コンポーネントの設定例 FlexMatchの設定例1 { "name": "aliens_vs_cowboys" , "ruleLanguageVersion" : "1.0", "playerAttributes"

    : [{ "name": "skill", "type": "number", "default": 10 }], "teams": [{ "name": "cowboys", "maxPlayers": 8, "minPlayers": 4 }, { "name": "aliens", "maxPlayers": 8, "minPlayers": 4 }], チームについての設定  チーム名、最⼩最⼤⼈数 マッチングに使⽤する属性の宣⾔  属性名、型、デフォルト値
  13. 各コンポーネントの設定例 FlexMatchの設定例2 "rules": [{ "name": "FairTeamSkill" , "description": "The average

    skill of players in each team is within 10 points from the average skill of all players in the match" , "type": "distance", "measurements" : [ "avg(teams[*].players.attributes[skill])" ], "referenceValue" : "avg(flatten(teams[*].players.attributes[skill]))" , "maxDistance": 10 }   ], マッチングルールの設定  ⽐較元、⽐較先や⽐較条件の指定   このFireTeamSkillルールは、 セッション内の全プレイヤーとチーム毎のスキルレベル平均について、両者の差が10を超えないことが ルールとして設定されている
  14. 各コンポーネントの設定例 FlexMatchの設定例3 "expansions": [{ "target": "rules[FairTeamSkill].maxDistance" , "steps": [{ "waitTimeSeconds"

    : 5, "value": 50 }, { "waitTimeSeconds" : 15, "value": 100 }] }] } 時間によるマッチングルールの変化  この例ではFaireTeamSkillルールのスキルレ ベル差条件について、時間が経つごとに差が⼤ きくてもマッチングするようにしている 
  15. • Amazon GameLiftは専⽤ゲームサーバー機能を提供するマネージドサービス • 要素が多いので初めて触れる際は全体像を整理しないと混乱しがち • GameLiftには⼤きく4つのホスティング⽅法がある ◦ FleetIQ, Anywhereは応⽤的な機能

    ◦ 最初は構築‧運⽤の⼿間が少ないカスタムサーバーかリアルタイムサーバーが良い ◦ GameLiftの思想と合わない場合はEC2で⾃⼒で構築するしかない • リアルタイム(カスタム)サーバーの主なコンポーネント ◦ スクリプト(ビルド) ◦ キュー ◦ フリート(インスタンス) ◦ FlexMatch ◦ バックエンドサービス • 具体的な設定内容はマネジメントコンソールから作成できるサンプルゲームが参考になる まとめ