Slide 1

Slide 1 text

Amazon GameLiftの 構成要素を整理する 産業⽀援グループ ゲームソリューション部 ⼊井 啓太

Slide 2

Slide 2 text

Xへの投稿の際は、 ハッシュタグ #cm_odyssey でお願いいたします。 2 お願い

Slide 3

Slide 3 text

⾃⼰紹介 名前:⼊井啓太 所属:産業⽀援グループ ゲームソリューション部 拠点:名古屋 肩書:エンジニア ⼊社年⽉:2022年10⽉ 趣味:ゲーム、漫画、猫など

Slide 4

Slide 4 text

Amazon GameLiftの概要

Slide 5

Slide 5 text

Amazon GameLiftの概要 専⽤ゲームサーバー機能を提供するマネージドサービス

Slide 6

Slide 6 text

Amazon GameLiftの概要 補⾜: 専⽤ゲームサーバーについて ● サーバー側のゲームロジックのみを実⾏する専⽤リソース ○ 全てのプレイヤーがそこにアクセスすることでマルチプレイ ● Dedicated Serverと⾔う場合も多いかも ● オンラインゲームの通信⽅式は他にもあるが、GameLiftの対応範囲 ではない 

Slide 7

Slide 7 text

Amazon GameLiftの概要 補⾜: 専⽤ゲームサーバーについて P2P 格ゲー、レースゲーなど Listen Server 数人レベルの 少人数オンライン向け Dedicated Server 数十人レベルの 大規模オンライン向け GameLiftはコレ↓を担当

Slide 8

Slide 8 text

Amazon GameLiftの概要 補⾜: 専⽤ゲームサーバーについて ● 専⽤ゲームサーバーの主な機能 ○ リアルタイム通信 ○ プレイヤーの位置情報同期 ○ ゲームロジック処理  ● 上記以外の機能(マスターデータ管理等)は別途⽴てたWeb APIサー バーに任せるパターンが多い

Slide 9

Slide 9 text

Amazon GameLiftの概要 ゲームサーバー ルームA ルームB 開発による拡張で以下のような 便利機能も実現可能 プライベートルーム サーバーブラウザ GameLiftのセッション管理⽅式 ⼩規模だったり1回のゲーム時間が短いオンラインゲームで同様の⽅式がよく使われる

Slide 10

Slide 10 text

Amazon GameLiftを 使い始める時によくある課題

Slide 11

Slide 11 text

Amazon GameLiftを使い始める時によくある課題 オンラインゲームを作る ためのサービスか! 便利そうだな! 使ってみよう! あなた

Slide 12

Slide 12 text

Amazon GameLiftを使い始める時によくある課題 カスタムサーバー FlexMatch FlexMatch フリート FleetIQ GameLift Anywhere リアルタイムサーバー GameLift あなた ビルド キュー バックエンドサービス

Slide 13

Slide 13 text

要素が多くて混乱しがち

Slide 14

Slide 14 text

このセッションではこれらの GameLiftの構成要素をできるだけ かみ砕いて解説します

Slide 15

Slide 15 text

Amazon GameLiftの ホスティングの種類

Slide 16

Slide 16 text

Amazon GameLiftのホスティングの種類 ● ⼀⼝にゲームサーバーと⾔っても、GameLiftは様々なホ スティング⽅法を提供している ● ホスティング⽅法によって構成要素が微妙に異なる ● どのようなホスティング⽅法があるかというレベルから ⾒ていくと全体像が整理しやすい

Slide 17

Slide 17 text

Amazon GameLiftのホスティングの種類 右に⾏くほど構築‧運⽤の⼿間は少ないが⾃由度も下がる

Slide 18

Slide 18 text

Amazon GameLiftのホスティングの種類 右に⾏くほど構築‧運⽤の⼿間は少ないが⾃由度も下がる

Slide 19

Slide 19 text

Amazon GameLiftのホスティングの種類 セルフマネージドEC2インスタンス ● EC2インスタンス上に⾃分でゲームサーバーを⽴てる⽅法 ○ 要するにGameLiftを使わない⽅法 ● 最も⾃由度が⾼い反⾯あらゆることを⾃前でやらないと いけない ● MMO RPGなど、GameLiftの思想と噛み合わないオンライ ンゲームの場合はこの選択肢しかない

Slide 20

Slide 20 text

Amazon GameLiftのホスティングの種類 右に⾏くほど構築‧運⽤の⼿間は少ないが⾃由度も下がる

Slide 21

Slide 21 text

Amazon GameLiftのホスティングの種類 GameLift FleetIQ ● ゲームサーバーEC2インスタンスを⾃分で管理しつつ、⼀部イ ンフラ管理をGameLiftに任せる形式 ● ベースはEC2 Auto Scaling ● 既存のオンプレミス環境をクラウドに拡張したり、ゲームサー バー管理をお任せしつつ⾃由度を維持したい場合に有⽤ ○ フルマネージドよりSDKの対応⾔語が広く、サーバー内プ ロセスなどの使い⽅も⾃由

Slide 22

Slide 22 text

Amazon GameLiftのホスティングの種類 右に⾏くほど構築‧運⽤の⼿間は少ないが⾃由度も下がる

Slide 23

Slide 23 text

Amazon GameLiftのホスティングの種類 GameLift Anywhere ● ローカルPCやオンプレミスサーバーなどをGameLiftの サーバーリソースとして登録できる機能 ● 既存のオンプレミス環境をGameLift内に組み込み、 GameLiftから管理が可能になる ● テストサイクル時間を短縮可能 ○ AWS上のサーバーへのデプロイは時間がかかりがち

Slide 24

Slide 24 text

Amazon GameLiftのホスティングの種類 右に⾏くほど構築‧運⽤の⼿間は少ないが⾃由度も下がる

Slide 25

Slide 25 text

Amazon GameLiftのホスティングの種類 カスタムサーバー ● ビルドしたゲームサーバーをGameLiftが⽤意したインス タンス上で実⾏する形式 ● インスタンスの管理、ゲームセッション管理などは GameLiftでやってくれる ● ⾃由度をあまり求めていなかったり、最初からGameLift の利⽤が決まっているプロジェクトの場合の選択肢

Slide 26

Slide 26 text

Amazon GameLiftのホスティングの種類 右に⾏くほど構築‧運⽤の⼿間は少ないが⾃由度も下がる

Slide 27

Slide 27 text

Amazon GameLiftのホスティングの種類 リアルタイムサーバー ● Node.jsスクリプトをGameLiftが⽤意したインスタンス上 で実⾏する形式 ● スクリプトなのでデプロイが素早く簡単に可能 ● カードゲームやターンベースのストラテジーなど、あまり 複雑でなくデータ量が少ないゲーム向け

Slide 28

Slide 28 text

Amazon GameLiftのホスティングの種類 コンテナフリート(2024年7⽉現在プレビュー中) ● ゲームサーバーのコンテナイメージをGameLift上で実⾏ できる機能

Slide 29

Slide 29 text

Amazon GameLiftのホスティングの種類 ホスティングの種類のまとめ ● ⽤途に応じて様々なホスティング⽅法を選択できる ● GameLift FleetIQやGameLift Anywhereは応⽤的機能 ● 初学者はサービス側でやってくれことが多いリアルタ イムサーバーやカスタムサーバーから触っていくと⼊ りやすい

Slide 30

Slide 30 text

リアルタイム(カスタム) サーバーの主なコンポーネント

Slide 31

Slide 31 text

各コンポーネントの全体像 リアルタイム(カスタム)サーバーの主なコンポーネント

Slide 32

Slide 32 text

リアルタイム(カスタム)サーバーの主なコンポーネント ビルド ● カスタムサーバーにおけるゲームサーバーの実体 ● あらかじめアップロードしておくことが必要(Zip or S3) ● ゲームロジックとは別に、専⽤のSDKから以下のようなメソッドでGameLiftと通信する ○ InitSDK(): サーバープロセスの初期化 ○ ProcessReady(): ゲームセッション準備完了の報告 ● SDK対応環境 ○ OS: Windows, Linux ○ ⾔語: C++, C#, Go ○ ゲームエンジン: Unity, Unreal Engine

Slide 33

Slide 33 text

リアルタイム(カスタム)サーバーの主なコンポーネント スクリプト ● リアルタイムサーバーにおけるゲームサーバーの実体 ● あらかじめアップロードしておくことが必要(Zipのみ) ● ゲームロジックとは別に、専⽤のSDKから以下のようなメソッドで GameLiftと通信する ○ InitSDK(): サーバープロセスの初期化 ○ ProcessReady(): ゲームセッション準備完了の報告 ● JavaScriptコードがあれば動くので環境は考えなくて良い ○ クライアント側SDKはC#のみ対応

Slide 34

Slide 34 text

リアルタイム(カスタム)サーバーの主なコンポーネント ビルドとスクリプトの⽐較

Slide 35

Slide 35 text

リアルタイム(カスタム)サーバーの主なコンポーネント キュー ● リクエストを受けて適切な場所(フリート)にゲームセッションを配置する機 能 ● 何を優先して配置先を決めるかの順序を設定できる ○ レイテンシー ○ コスト ○ ロケーション ■ 別途ロケーションの優先順位も設定 ○ フリート‧エイリアス ■ 別途フリート‧エイリアスの優先順位も設定

Slide 36

Slide 36 text

リアルタイム(カスタム)サーバーの主なコンポーネント フリート ● ゲームサーバーとなるインスタンスをとりまとめる存在 ● 全てのインスタンスはスケーリングポリシーに基づいてフリート内に作成される ● 以下のような設定内容がフリート内部で⽴ち上がるインスタンスに適⽤される ○ ゲームサーバーとして使⽤するビルド‧スクリプト ○ インスタンスタイプ ○ ロケーション ○ スケーリングポリシー ○ インスタンスロール ○ ゲームサーバーランタイムの起動パス、起動パラメータ、プロセス数 ○ ポートごとのインバウンドアクセス制限 ● マルチロケーションフリートという機能によりグローバル対応時も複数のリージョンにフリートを作成 する必要は無い

Slide 37

Slide 37 text

リアルタイム(カスタム)サーバーの主なコンポーネント インスタンス ● ゲームサーバービルドやスクリプトを実⾏するリソース ● フリートで設定した内容を元に作成される ● オンデマンドとスポットがある ● AWS CLIのget-instance-accessコマンドで認証情報を取得 することで各インスタンスにSSH接続可能 ● プレイヤーはインスタンスを介して他のプレイヤーとマル チプレイを⾏う

Slide 38

Slide 38 text

リアルタイム(カスタム)サーバーの主なコンポーネント インスタンスの種類 ● オンデマンド ○ 必要なときに必要な期間使⽤可能 ○ 単価は固定 ● スポット ○ AWS内の余剰コンピューティングリソースを利⽤する ○ 利⽤中に中断されることがある ■ インスタンス選定時は独⾃の仕組みによってできるだけ中断確率の低いインスタンスが選ば れる ■ 中段の2分前に専⽤のコールバックが実⾏されるので、あらかじめ安全にゲームを終了させ る処理などを⼊れておく必要がある ■ 料⾦はロケーションごとの対象インスタンスタイプの需要と共有によって決まるが、オンデ マンドよりは常に安い

Slide 39

Slide 39 text

リアルタイム(カスタム)サーバーの主なコンポーネント FlexMatch ● あらかじめ作成したルール設定を元にプレイヤー同⼠のマッチングを⾏う機能 ● マッチングルール設定の主な内容 ○ チームごとの最⼩最⼤⼈数 ○ 独⾃の値(レベル等)に基づいた条件設定 ○ 時間の経過による条件の変更 ● 1対1対戦から数百名規模の⼤規模なマッチングまで対応可能 ● 以下の2つのモードがある ○ マネージド: マッチング結果を指定したキューに渡す ○ スタンドアロン: マッチング結果によるセッション配置の仕組は別途⾃前で構築する ■ ⾃前のEC2やFleetIQでゲームサーバーを構築している場合も対応可能

Slide 40

Slide 40 text

リアルタイム(カスタム)サーバーの主なコンポーネント バックエンドサービス ● ゲームクライアントとGameLiftのやりとりを仲介するサーバー ● クライアントがGameLift APIと直接通信をするとセキュリティ リスクがある ● 仲介するのは主にマッチングやセッション配置についての処理 ○ セッション配置後はゲームクライアントは直接インスタンス に接続する

Slide 41

Slide 41 text

改めて各コンポーネントの全体像 リアルタイム(カスタム)サーバーの主なコンポーネント

Slide 42

Slide 42 text

各コンポーネントの設定例

Slide 43

Slide 43 text

● 具体的な各コンポーネントでの設定内容の例を紹介 ○ 内容はAWS公式のサンプルゲームがベース ○ 重要な項⽬を優先して紹介 ○ 他にどのような設定が可能かも補⾜説明 ● 環境はカスタムサーバー 各コンポーネントの設定例

Slide 44

Slide 44 text

具体的な設定例全体像 各コンポーネントの設定例

Slide 45

Slide 45 text

ビルドの設定例 各コンポーネントの設定例 項目 内容 備考 OS Windows Server 2016 ゲームサーバープログラムの対 応OSに合わせる 他にAL2, AL2023を選択可能 サーバーSDKバージョン 4.0.2 ゲームサーバープログラムで使 用しているSDKのバージョンに合 わせる S3 URI S3経由でビルドパッケージをアッ プロードする場合は指定

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

フリートの設定例 2 各コンポーネントの設定例 項目 内容 備考 ロケーション ap-northeast-1 (ホームリージョン) フリート作成先リージョンが自動 的に指定される 他のリージョンにもインスタンスを 立てたい場合は追加 スケーリングポリシー 使用可能なゲームセッション割合 が残り15 API経由で他のメトリクスを参照 したポリシーも設定可能 スケーリング容量 最小サイズ: 0 目的のインスタンス: 1 最大サイズ: 3 目的のインスタンスは EC2 Auto Scalingの希望する容量と同じ で、最初に起動する数

Slide 48

Slide 48 text

キューの設定例 各コンポーネントの設定例 項目 内容 備考 ゲームセッション配置優先順位 1.レイテンシー 2.コスト 3.送信先 4.ロケーション キューにゲーム参加リクエストが 来た際、何を優先してゲームセッ ションを配置するかの設定 送信先の順序 1:リージョン:ap-northeast-1 フリート:先ほど作成したもの 2以降:同リージョン別フリート ゲームセッション配置先フリート。 複数設置でき、同じ条件の時に どのフリートを優先するかも設定 可能 ロケーションの順序 1:ap-northeast-1 2以降:無し 同じ条件の時、どのロケーション への配置を優先するかの設定

Slide 49

Slide 49 text

各コンポーネントの設定例 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 }], チームについての設定  チーム名、最⼩最⼤⼈数 マッチングに使⽤する属性の宣⾔  属性名、型、デフォルト値

Slide 50

Slide 50 text

各コンポーネントの設定例 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を超えないことが ルールとして設定されている

Slide 51

Slide 51 text

各コンポーネントの設定例 FlexMatchの設定例3 "expansions": [{ "target": "rules[FairTeamSkill].maxDistance" , "steps": [{ "waitTimeSeconds" : 5, "value": 50 }, { "waitTimeSeconds" : 15, "value": 100 }] }] } 時間によるマッチングルールの変化  この例ではFaireTeamSkillルールのスキルレ ベル差条件について、時間が経つごとに差が⼤ きくてもマッチングするようにしている 

Slide 52

Slide 52 text

改めて設定例全体像 各コンポーネントの設定例

Slide 53

Slide 53 text

まとめ

Slide 54

Slide 54 text

● Amazon GameLiftは専⽤ゲームサーバー機能を提供するマネージドサービス ● 要素が多いので初めて触れる際は全体像を整理しないと混乱しがち ● GameLiftには⼤きく4つのホスティング⽅法がある ○ FleetIQ, Anywhereは応⽤的な機能 ○ 最初は構築‧運⽤の⼿間が少ないカスタムサーバーかリアルタイムサーバーが良い ○ GameLiftの思想と合わない場合はEC2で⾃⼒で構築するしかない ● リアルタイム(カスタム)サーバーの主なコンポーネント ○ スクリプト(ビルド) ○ キュー ○ フリート(インスタンス) ○ FlexMatch ○ バックエンドサービス ● 具体的な設定内容はマネジメントコンソールから作成できるサンプルゲームが参考になる まとめ

Slide 55

Slide 55 text

No content