346
Amazon GameLift 開発者ガイド Version

Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift開発者ガイド

Version

Page 2: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

Amazon GameLift: 開発者ガイドCopyright © 2020 Amazon Web Services, Inc. and/or its affiliates. All rights reserved.

Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's,in any manner that is likely to cause confusion among customers, or in any manner that disparages or discreditsAmazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may notbe affiliated with, connected to, or sponsored by Amazon.

Page 3: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

Table of ContentsAmazon GameLift とは? ...................................................................................................................... 1

GameLift を利用する理由 ............................................................................................................. 1GameLift ソリューション ............................................................................................................. 1

マネージド GameLift ........................................................................................................... 1リアルタイムサーバー を使用したマネージド GameLift ............................................................ 2スタンドアロン GameLift FleetIQ [プレビュー] ........................................................................ 3

GameLift の詳細 ......................................................................................................................... 3主要コンポーネント ............................................................................................................ 3ゲームサーバーのホスティング ............................................................................................. 4ゲームセッションの実行 ...................................................................................................... 5フリートの容量のスケーリング ............................................................................................. 6フリートアクティビティのモニタリングとトラブルシューティング ............................................ 8AWS リソースでのネットワーキング ..................................................................................... 8

リアルタイムサーバー の仕組み .................................................................................................... 8Realtime サーバーとは ........................................................................................................ 8ゲームに合わせた リアルタイムサーバー の選択 ..................................................................... 9主要コンポーネント ............................................................................................................ 9リアルタイムサーバー でゲームセッションを管理する方法 ..................................................... 10Realtime Client と Realtime Server のやり取り方法 ............................................................... 10RealTime サーバーのカスタマイズ ...................................................................................... 11リアルタイムサーバー のデプロイと更新 .............................................................................. 12

プレイヤーがゲームに接続する方法 ............................................................................................. 12ゲームおよびプレイヤーセッションの機能 ............................................................................ 13

GameLift FlexMatch の仕組み ..................................................................................................... 14FlexMatch の主な特徴 ....................................................................................................... 14FlexMatch のコンポーネント .............................................................................................. 15マッチメーキングプロセス ................................................................................................. 15バックフィルプロセス ....................................................................................................... 17

マネージド GameLift を使用したゲームアーキテクチャ .................................................................. 18リアルタイムサーバー でのゲームのアーキテクチャ ...................................................................... 19

セットアップ .................................................................................................................................... 22AWS アカウントのセットアップ ................................................................................................. 22

IAM ポリシーの例 ............................................................................................................. 23Amazon GameLift アクセスのロールを設定する ............................................................................ 24GameLift SDK .......................................................................................................................... 25

カスタムゲームサーバーの場合 ........................................................................................... 25リアルタイムサーバー の場合 ............................................................................................. 26クライアントサービスの場合 .............................................................................................. 27SDK 互換性 ..................................................................................................................... 27

ツールとリソース ...................................................................................................................... 28コアツール ....................................................................................................................... 28追加のリソース ................................................................................................................. 29

請求アラート ............................................................................................................................ 30AWS リージョンでの GameLift の使用 ......................................................................................... 30

ご利用開始にあたって ....................................................................................................................... 31GameLift を試す ....................................................................................................................... 31

リアルタイムサーバー サンプルゲーム (フルソース) .............................................................. 31カスタムゲームサーバーのサンプル (コンソールの体験) ......................................................... 31

カスタムサーバーの使用を開始する ............................................................................................. 32リアルタイムサーバー の開始方法 ............................................................................................... 34

GameLift 用のゲームの準備 ................................................................................................................ 36カスタムゲームサーバーとゲームの統合 ....................................................................................... 36

ゲームエンジンと GameLift ................................................................................................ 36ゲームサーバーの統合 ....................................................................................................... 44

Versioniii

Page 4: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

ゲームクライアントの統合 ................................................................................................. 49GameLift とのやり取り ...................................................................................................... 54統合をテストする .............................................................................................................. 57

ゲームと リアルタイムサーバー の統合 ........................................................................................ 62ゲームクライアントの統合 ................................................................................................. 63RealTime スクリプトのカスタマイズ ................................................................................... 67

FlexMatch マッチメーキングの追加 ............................................................................................. 73FlexMatch 統合のロードマップ ........................................................................................... 73ゲームクライアントへの FlexMatch の追加 ........................................................................... 74ゲームサーバーへの FlexMatch の追加 ................................................................................. 78既存のゲームのバックフィル .............................................................................................. 80

ホスティングリソースを管理する ........................................................................................................ 88GameLift ホスティングリソースについて ...................................................................................... 88.............................................................................................................................................. 90

ベストプラクティス .......................................................................................................... 90AWS CloudFormation スタックの使用 .................................................................................. 91ビルドの更新 .................................................................................................................... 94

サーバービルドのアップロード ................................................................................................... 96カスタムサーバービルドをアップロードする ......................................................................... 96リアルタイムサーバー スクリプトをアップロードする .......................................................... 101

フリートの設定 ....................................................................................................................... 104ゲームのフリートを設計する ............................................................................................. 105カスタムゲームビルド用にフリートをデプロイする .............................................................. 110リアルタイムサーバー フリートをデプロイする ................................................................... 114フリートのレコードの管理 ................................................................................................ 117フリートにエイリアスを追加する ...................................................................................... 120フリートの問題をデバッグする ......................................................................................... 121フリートインスタンスにリモートでアクセス ....................................................................... 124

フリートの容量のスケーリング ................................................................................................. 126フリートの容量制限を設定する ......................................................................................... 127フリートの容量を手動で設定する ...................................................................................... 129Auto Scaling フリート容量 ............................................................................................... 130

マルチリージョンキューの使用 ................................................................................................. 135キューの設計 .................................................................................................................. 136キューの作成 .................................................................................................................. 141キューの表示 .................................................................................................................. 143

FlexMatch マッチメーカーの設定 .............................................................................................. 145マッチメーカーを設計する ................................................................................................ 146マッチメーキング設定の作成 ............................................................................................. 147ルールセットの作成 ......................................................................................................... 149イベント通知の設定 ......................................................................................................... 172

VPC ピア接続 ......................................................................................................................... 173既存のフリート用に VPC ピア接続を設定する ..................................................................... 174VPC ピア接続を使用して新しいフリートを作成する ............................................................. 175

ゲームデータの表示 ......................................................................................................................... 178現在の GameLift ステータスの表示 ............................................................................................ 178ビルドを表示する .................................................................................................................... 179

ビルドカタログ ............................................................................................................... 179ビルドの詳細 .................................................................................................................. 180

フリートの表示 ....................................................................................................................... 180フリートの詳細の表示 .............................................................................................................. 180

概要 .............................................................................................................................. 181メトリクス ..................................................................................................................... 181イベント ........................................................................................................................ 182スケーリング .................................................................................................................. 182ゲームセッション ............................................................................................................ 183ビルド ........................................................................................................................... 183

Versioniv

Page 5: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

容量の割り当て ............................................................................................................... 184ポート ........................................................................................................................... 184ARN .............................................................................................................................. 184

ゲームおよびプレイヤー情報の表示 ........................................................................................... 184ゲームセッション ............................................................................................................ 184プレイヤーセッション ...................................................................................................... 185プレイヤー情報 ............................................................................................................... 185

エイリアスを表示する .............................................................................................................. 185エイリアスカタログ ......................................................................................................... 185エイリアスの詳細 ............................................................................................................ 186

GameLift のモニタリング ................................................................................................................. 187CloudWatch によるモニタリング ............................................................................................... 187

フリートの Amazon GameLift メトリクス ........................................................................... 187キューの Amazon GameLift メトリクス .............................................................................. 192マッチメーキングの Amazon GameLift メトリクス ............................................................... 194Amazon GameLift メトリクスのディメンション ................................................................... 196

API コールのログ記録 .............................................................................................................. 197CloudTrail での Amazon GameLift 情報 .............................................................................. 197Amazon GameLift ログファイルエントリの概要 ................................................................... 198

GameLift FleetIQ ガイド [プレビュー] ................................................................................................ 200GameLift FleetIQ 機能 ............................................................................................................. 200............................................................................................................................................ 201

GameLift FleetIQ のロジック ............................................................................................ 201主なリソースとコンポーネント ......................................................................................... 204

ゲームアーキテクチャ .............................................................................................................. 205オンプレミスホスティングの補完 ...................................................................................... 205

ライフサイクルと状態 .............................................................................................................. 207スポットの再調整プロセス ................................................................................................ 207ゲームサーバーグループの寿命 ......................................................................................... 209ゲームサーバーの寿命 ...................................................................................................... 209

セットアップ .......................................................................................................................... 211SDK とプラットフォーム ................................................................................................. 211AWS アカウントの設定 .................................................................................................... 212

............................................................................................................................................ 215ゲームサーバーの統合 ...................................................................................................... 217ゲームクライアントの統合 ................................................................................................ 218ゲームサーバーグループの作成と更新 ................................................................................ 219

ベストプラクティス ................................................................................................................. 219CloudWatch によるモニタリング ............................................................................................... 221

セキュリティ .................................................................................................................................. 223データ保護 ............................................................................................................................. 223

保管時の暗号化 ............................................................................................................... 224転送中の暗号化 ............................................................................................................... 225インターネットトラフィックのプライバシー ....................................................................... 225

Identity and Access Management .............................................................................................. 225対象者 ........................................................................................................................... 225アイデンティティを使用した認証 ...................................................................................... 226ポリシーを使用したアクセスの管理 ................................................................................... 228Amazon GameLift と IAM の連携 ...................................................................................... 229アイデンティティベースのポリシーの例 ............................................................................. 232トラブルシューティング ................................................................................................... 235

GameLift を使用したログ記録とモニタリング .............................................................................. 237コンプライアンス検証 .............................................................................................................. 238耐障害性 ................................................................................................................................ 238インフラストラクチャセキュリティ ........................................................................................... 239設定と脆弱性の分析 ................................................................................................................. 240セキュリティのベストプラクティス ........................................................................................... 240

Versionv

Page 6: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

Amazon GameLift リファレンスガイド ............................................................................................... 241サービス API リファレンス (AWS SDK) ..................................................................................... 241

マネージド GameLift 向け API .......................................................................................... 241GameLift FleetIQ 向け API ............................................................................................... 244利用可能なプログラミング言語 ......................................................................................... 245

リアルタイムサーバー リファレンス .......................................................................................... 245リアルタイムクライアント API (C#) リファレンス ............................................................... 245リアルタイムサーバー スクリプトリファレンス ................................................................... 256

サーバー SDK リファレンス ..................................................................................................... 261サーバー API (C++) リファレンス ...................................................................................... 261サーバー API (C#) リファレンス ....................................................................................... 277サーバー API (Unreal Engine) リファレンス ........................................................................ 291

FlexMatch リファレンス ........................................................................................................... 299ルールセットスキーマ ...................................................................................................... 299ルール言語 ..................................................................................................................... 306マッチメイキングイベント ................................................................................................ 310

リリースノート ............................................................................................................................... 320リリースノートの概要 .............................................................................................................. 320

リリース: GameLift は Unity と Unreal Engine 用の Server SDK を更新 .................................. 320ドキュメント履歴 ............................................................................................................................ 321AWS の用語集 ................................................................................................................................ 340

Versionvi

Page 7: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドGameLift を利用する理由

Amazon GameLift とは?Amazon GameLift を使用すると、開発者はセッションベースのマルチプレイヤーゲームのため、クラウドに低コストの専用サーバーをデプロイ、運用、拡張できます。AWS グローバルコンピューティングインフラストラクチャ上に構築された GameLift を利用すると、高パフォーマンス、高信頼性のゲームサーバーを低コストで提供できるほか、世界中のプレイヤーの需要に合わせてリソースの使用を動的にスケーリングできます。

GameLift を利用する理由Amazon GameLift を使用するメリットは以下のとおりです。

• 完全にカスタマイズした独自のマルチプレイヤーゲームサーバーを持ち込むことができます。または、バックエンドの経験がほとんどまたはまったくなくても、最小限の設定で リアルタイムサーバー を使用できます。

• 高速アクションゲームプレイをサポートする低レイテンシーのプレーヤー体験を提供します。• インテリジェントなキューイング、ゲームセッションの配置、およびマッチバックフィルによりマッチ

メイキングサービスを拡張します。• ゲームサーバーのデプロイや操作のためのエンジニアリング、および運用作業を削減します。• 開始が迅速で従量課金制です。初期費用や長期契約は必要ありません。• スポットインスタンスを使用することで最大 90% のコストを削減します。• Amazon Elastic Compute Cloud (Amazon EC2) などの Amazon Web Services (AWS) に基づいて、ウェ

ブスケールクラウドコンピューティングリソースと Auto Scaling により、ホスト容量を管理します。

ヒント

リアルタイムサーバー サンプルゲーム使用などの Amazon GameLift 機能を検索する方法について確認する (p. 31)。

GameLift ソリューションGameLift は、ゲーム開発者向けの幅広いソリューションを提供しています。

• カスタムビルドのゲームサーバー用のマネージド GameLift ホスティング。• リアルタイムサーバー でのマネージド GameLift ホスティング• Amazon EC2 で直接ゲームをホストするための GameLift FleetIQ スタンドアロン機能 [プレビュー]

マネージド GameLiftAmazon GameLift は、セッションベースのマルチプレイヤーゲームサーバーをデプロイ、操作、スケーリングするための完全マネージド型サービスを提供します。GameLift は、ハードウェアの購入やセットアップ、進行中のアクティビティ、セキュリティ、ストレージの管理、パフォーマンスの追跡など、カスタムゲームサーバーのホストに必要な作業をお客様に代わって行います。Auto Scaling 機能を使用すると、必要以上にリソースに対する支払いを避け、新しいプレイヤーが最小限の待機時間で新しいゲームに常に参加できます。

マネージド GameLift ソリューションの詳しい仕組みについては、「Amazon GameLift の仕組み (p. 3)」を参照してください。

Version1

Page 8: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー を使用したマネージド GameLift

主な特徴

• 複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレーヤーに高品質ゲームホスティングを提供できます。

• Amazon Linux または Windows Server オペレーティングシステムで実行するゲームサーバーをデプロイできます。

• FleetIQ が低コストのスポットインスタンスの使用を最適化します。スポットインスタンス単独ではサービス中断の可能性があるため、ゲームホスティングに常に有効であるとは限りません。FleetIQ 予測アルゴリズムにより、新しいゲームセッションのホスティングに最も適したスポットインスタンスが特定されます。

• Auto Scaling ツールを使用して、実際のプレイヤー需要に合わせてゲームホスティング容量を調整できます。これらのツールを使用すると、新しいプレーヤーがゲームにすばやく参加できるよう十分な容量を維持しながら、ホスティング費用を抑えることができます。

• FlexMatch を使用してゲーム用のカスタムマッチメイキングサービスを構築できます。最大 200 人のプレイヤーに単一チームまたは複数チームマッチングを作成します。

• ゲームセッションとプレイヤーセッションを管理できます。許可するプレーヤーの最大数、参加ルール、ゲームの特定のプロパティのようなゲームセッションの特性を設定します。

• プレーヤーが適切なゲームセッションを見つけられるように、さまざまなオプションから選択できます。GameLift キューを使用して、複数のリージョンをまたいで新しいゲームセッションをインテリジェントに配置したり、利用可能なゲームセッションをフィルタリングおよびソートしたリストをプレイヤーに提供したり (「リスト&ピック」)、FlexMatch で完全なマッチメイキングシステムを実装したりできます。

• Amazon GameLift コンソールを使用して、ゲームのパフォーマンス分析、メトリクスの追跡、ゲームセッションログの表示、個々のゲームセッションやプレイヤーセッションのデータ表示を行います。

• サーバープロセス用の、カスタマイズされたヘルストラッキングを設定して、問題をすばやく検出し、低レベルのパフォーマンスプロセスを解決します。

• GameLift の AWS CloudFormation テンプレートを使用してゲームリソースを管理します。

リアルタイムサーバー を使用したマネージドGameLiftリアルタイムサーバー を使用すれば、カスタムビルドのゲームサーバーを必要としないゲームを立ち上げられます。この軽量サーバーソリューションは、ゲームに合わせて構成できる、すぐに使えるゲームサーバーを提供します。最小限の構成設定から、ゲームやプレイヤーに固有のカスタムロジックまで、あらゆる方法でゲームサーバーをデプロイできます。

リアルタイムサーバー ソリューションを使用したマネージド GameLift の詳しい仕組みについては、「リアルタイムサーバー の仕組み (p. 8)」を参照してください。

主な特徴

• Auto Scaling、マルチリージョンキュー、FleetIQ を使用したゲームセッションの配置、ゲームセッションのログ記録、メトリクスなど、GameLift 管理機能を使用できます。

• GameLift ホスティングリソースを使用し、フリートの AWS コンピューティングハードウェアのタイプを選択できます。スポットインスタンスまたはオンデマンドインスタンスのいずれかを使用できます。

• ゲームのクライアント/サーバー間のやり取りのための完全なネットワークスタックを活用できます。• カスタマイズ可能なサーバーロジックにより、ゲームサーバーのコア機能を利用できます。• RealTime 設定およびサーバーロジックに対してライブ更新を行えます。RealTime サーバー構成はいつ

でも更新できます。• FlexMatch マッチメイキングを実装できます。

Version2

Page 9: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドスタンドアロン GameLift FleetIQ [プレビュー]

スタンドアロン GameLift FleetIQ [プレビュー]GameLift FleetIQ は、クラウドベースのゲームホスティング向けに低コストのスポットインスタンスの使用を最適化します。この機能を使用すると、GameLift の最適化を活用しながら Amazon EC2 と AutoScaling のホスティングリソースを直接操作し、低コストで耐障害性の高いゲームホスティングを提供できます。このソリューションは、マネージド GameLift ソリューションで提供されるものよりも高い柔軟性を必要とするゲーム開発者向けに設計されています。

スタンドアロンの GameLift FleetIQ ソリューションの詳しい仕組みについては、「GameLift FleetIQ ガイド [パブリックプレビュー] (p. 200)」を参照してください。

主な特徴

• GameLift FleetIQ 予測アルゴリズムを使用して、スポット再分散を最適化できます。• プレーヤールーティング機能を使用して、プレーヤーに優れたユーザーエクスペリエンスを提供し、リ

ソース管理を最適化できます。• プレーヤーの使用状況に基づいて自動的にスケールできます。• 自分の AWS アカウントから Amazon EC2 インスタンスを直接管理できます。• Windows、Linux、コンテナ、Kubernetes など、サポートされている複数のゲームサーバー実行可能

ファイル形式のいずれかを使用できます。• 複数のタイプの Amazon EC2 コンピューティングリソースから選べます。• 中国を含む 15 のリージョンにデプロイすることで、世界中のプレイヤーにリーチできます。

Amazon GameLift の仕組みこのトピックでは、マネージド Amazon GameLift ソリューションの一般的な概要について説明します。ここでは、コアコンポーネントについて説明し、マルチプレイヤーゲームサーバーをプレイヤーに利用できるようにする方法について説明します。マネージド GameLift の動作とその仕組みについての詳細は、このトピックと次の関連トピックをを参照してください。その他の GameLift ソリューションについては、「Amazon GameLift とは? (p. 1)」を参照してください。

• プレイヤーがゲームに接続する方法 (p. 12)• ゲームエンジンと Amazon GameLift (p. 36)• キューを使用する理由 (p. 136)• Amazon GameLift FlexMatch の仕組み (p. 14)

GameLift でホストするゲームの準備を開始できる状態ですか? 統合ロードマップに関しては、AmazonGameLift の開始方法 (p. 31) トピックを参照してください。

主要コンポーネントAmazon GameLift を設定してゲームをホストするには、主要コンポーネント群を使用する必要があります。これらのコンポーネント間の関係を マネージド Amazon GameLift を使用したゲームアーキテクチャ (p. 18) に示します。

• ゲームサーバーは、クラウドで実行されるゲームのサーバーソフトウェアです。サーバー実行可能ファイル、サポートアセット、ライブラリ、依存関係を含む、完全にカスタム化されたゲームサーバービルドがあります。または、リアルタイムサーバー を使用している場合は、オプションのカスタムゲームロジックを備えた設定スクリプトがあります。ゲームサーバービルドまたはスクリプトを AmazonGameLift サービスにアップロードすると、GameLift によってホスティング用の仮想コンピューティングリソースにデプロイされます。

Version3

Page 10: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームサーバーのホスティング

• ゲームセッションは、Amazon GameLift リソースで実行されるゲームサーバーのインスタンスです。プレイヤーが接続して操作します。有効期間やプレイヤー数など、ゲームセッションの基本特性を定義します。

• Amazon GameLift サービスは、ゲームサーバーをホスティングするためのコンピューティングリソースを管理し、プレイヤーがゲームに接続できるようにします。このサービスは、プレイヤーの需要を満たすために必要なリソースを調整し、新しいゲームセッションを開始します。また、アクティブなゲームセッションでプレイヤースロットを見つけて予約することで、新しいプレイヤーのリクエストを処理します。さらに、このサービスでは、プレイヤーの使用状況とサーバーの状態に関するメトリクスを収集します。

• ゲームクライアントは、プレイヤーのデバイスで実行されるゲームのソフトウェアです。ゲームクライアントは、GameLift サービスに対して利用可能なゲームセッションに関するリクエストを行います。また、GameLift サービスから受信した情報を使用して、ゲームセッションに直接接続します。

• ゲームサービスは、GameLift に関連する特別なタスクを処理するために作成できる追加のカスタムサービスです。たとえば、ほとんどのゲームは、ゲームクライアントにサービスを直接呼び出させる代わりに、クライアントサービスを使用して GameLift サービスとの通信を処理します。

これらのコンポーネントの連携方法に関する詳細については、「Amazon GameLift とゲームクライアント/サーバーとのやり取り (p. 54)」を参照してください。

ゲームサーバーのホスティングアップロードされたゲームサーバーは、インスタンスと呼ばれる Amazon GameLift 仮想コンピューティングリソースでホスティングされます。ホスティングリソースを設定するには、インスタンスのフリートを作成し、それらをデプロイしてゲームサーバー (カスタムゲームサーバーまたは設定済みの リアルタイムサーバー) を実行します。フリートは、ゲームのニーズに合わせて設計できます。

フリートのアーキテクチャー

コア要件に合ったフリートを構築します。

• ゲームにはどのような種類のリソースが必要ですか? – GameLift は、さまざまなオペレーティングシステムとインスタンスタイプをサポートしています。インスタンスタイプは、処理能力、メモリ、ネットワーク容量など、使用されるコンピューティングハードウェアの種類を決定します。フリートのコストは、使用するインスタンスのタイプと数の両方に基づいている点に注意してください。ゲームの要件に応じて、小さなインスタンスを多数使用するか、少数の強力なインスタンスを使用することができます。コンピューティングリソースの選択 (p. 105) 方法の詳細情報。

• ゲームサーバーはどこで実行しますか? – ゲームへの参加を待機しているプレイヤーがいる場所にフリートをセットアップします。各フリートは単一の AWS リージョンにデプロイされますが、必要な数のリージョンでフリートを作成できます。Amazon GameLift で利用可能なリージョンについては、「AWS のリージョンとエンドポイント」を参照してください。

• ゲームサーバーの信頼性はどれほど重要ですか? – フリートでは、スポットインスタンスまたはオンデマンドインスタンスを使用します。スポットインスタンス (EC2 のスポットインスタンスに基づく) は通常は低コストですが、ゲームセッション中に中断される場合があります。ただし、GameLift にはゲームセッションの中断を大幅に抑える保護手段が追加されており、ほとんどのゲームにはスポットインスタンスを備えたフリートが適しています。一方、オンデマンドインスタンスは一貫した可用性を実現しますが、より高価になる可能性があります。このオプションは、ゲームセッションが中断された場合にプレイヤーに大きな影響を及ぼすようなゲームに適しています。スポットインスタンスおよびオンデマンドインスタンスの詳細

• 何人のプレイヤーをサポートする必要がありますか? – フリートには多数のインスタンスを含めることができ、インスタンスごとに複数の同時ゲームセッションをホストできます。必要に応じてフリートのインスタンスを追加または削除できます。また、Auto Scaling を使用して、プレイヤーの需要の変化に応じて自動的に調整できます。詳細情報 フリートの容量のスケーリング (p. 6).

サーバーランタイム設定

Version4

Page 11: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームセッションの実行

フリートインスタンスは複数のプロセスを同時に実行でき、ゲームサーバービルド内の実行可能ファイルを実行できます。インスタンスごとにプロセスを実行する方法を決定するには、ランタイム設定を作成します。この設定では、次の内容を指定します。(1) 実行する実行可能ファイル、(2) 同時に実行する実行可能ファイルごとのプロセス数、(3) 各実行可能ファイルの起動時に使用する起動パラメータ。インスタンスで同時に実行できるプロセスの数は、インスタンスのコンピューティング能力 (インスタンスタイプ) とゲームサーバービルドの要件によって異なります。フリートで複数のプロセスを実行する (p. 107)の詳細を確認してください。ランタイム設定は、フリートの存続期間を通して更新できます。

また、ランタイム設定は、インスタンスでの新しいゲームセッションの開始方法にも影響を及ぼす場合があります。ゲームによっては、起動段階で多くのリソースが必要になります。また、どの時点においても新しいゲームセッションをアクティブ化するためのインスタンスリソースを制限することをお勧めします。インスタンスあたりの同時ゲームセッションアクティベーションの最大数を指定できます。また、各ゲームセッションのアクティブ化に時間制限を設けて、アクティブ化に失敗したゲームセッションをすばやく検出してシャットダウンすることもできます。

サーバーセキュリティ

フリートの PKI リソース生成を有効にします。この機能をオンにすると、GameLift はフリートの TLS 証明書を生成し、フリート内の各インスタンスの DNS エントリを作成します。これらのリソースを使用して、ゲームでは、クライアントとサーバーの接続を認証でき、すべてのゲームクライアント/サーバー通信を暗号化できます。この機能は、モバイルマルチプレイヤーゲームをデプロイするときに特に役立ちます。これらのサービスは AWS Certificate Manager (ACM) を介して提供され、現在は追加コストなしで利用できます。

フリートのエイリアス

エイリアスは、実際のフリートから別のフリートに転送できる指定であり、フリートの場所を一般化する便利な方法です。たとえば、ゲームクライアントは、新しいゲームセッションを配置する場所 (フリート)を指定する必要があります。エイリアスを使用すると、ゲームクライアントを変更せずに、ゲームクライアントをあるフリートから別のフリートに切り替えることができます。フリートまたはエイリアスを指定するオプションがある GameLift 機能がいくつかあります。また、サーバーに接続する代わりにコンテンツ(URL など) をポイントできる「ターミナル」エイリアスを作成することもできます。たとえば、この機能は、プレイヤーにクライアントのアップグレードを促す場合に役立ちます。

ゲームセッションの実行ゲームサーバービルドがフリートに正常にデプロイされると、フリートでゲームセッションをホストできるようになります。1 人以上のプレイヤーの新しいゲームセッションを開始するには、ゲームクライアントが (ゲームサービスを介して) リクエストを GameLift サービスに送信します。リクエストを受信すると、GameLift は FleetIQ と呼ばれる機能を使用して、「可能な限り最適なフリート」に新しいゲームセッションを配置します。

「可能な限り最適なフリート」は、ゲームセッションキューを定義したときのゲームの優先順位に基づいて決まります。キューは、1 つまたは複数のフリートのグループを作成し、新しいゲームセッション用にグループ内で最適なフリートを選択する方法を定義します。キューには、異なるリージョンにあるフリートを含めることができます。新しいゲームセッションリクエストでは、使用するキューが指定されます。GameLift によって、キュー内の利用可能なフリートに新しいゲームセッションが配置されます。たとえば、5 つの北米リージョンのそれぞれでキュー内のフリートを使用できます。この種のマルチリージョンキューを使用することで、トラフィックが重くても GameLift が使用できるリソースを見つけて新しいゲームセッションをすばやく開始できる可能性が高くなります。フリートの可用性とは、フリートのどこかに、新しいゲームセッションを自由にホストできるゲームサーバープロセスを持つインスタンスが少なくとも 1 つあることを意味します。

新しいゲームセッションに可能な限り最適な配置を選択する場合、FleetIQ では以下の 2 つのいずれかの方法が使用されます。

• プレイヤーのレイテンシーの評価 – 新しいゲームセッションのリクエストには、各プレイヤーの ping 時間を含めることができます。このデータが渡された場合、FleetIQ はそのデータを評価して、プレイヤー

Version5

Page 12: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートの容量のスケーリング

のレイテンシーが可能な限り短くなるリージョンを決定します。GameLift はこの情報を使用して新しいゲームセッションを配置します。また、レイテンシーポリシーを定義して、プレイヤーが許容できないレイテンシーでゲームセッションに配置されないようにすることもできます。

• 優先順位付きフリートリストの使用 – プレイヤーのレイテンシデータを含まないリクエストの場合、FleetIQ は、フリートがキューにリストされている順序に基づいて新しいゲームセッションを配置します。キュー内のフリートに優先順位を付けるには、フリートリストの順序の一番上に配置します。通常、この方法では、リストされている最初のフリートですべてのゲームセッションが配置され、残りのフリートは最初のフリートがいっぱいになるとバックアップとして機能します。

キューは、さまざまな容量や可用性の問題を解決するために使用できる強力な概念です。キューを使用して、リソースの使用量をリージョン間で分散し、予期しない需要の急増時のプレイヤーの待機時間を短縮して、リージョンのスローダウンまたは停止を緩和できます。また、キューを使用して、複数のリージョンにまたがるプレイヤープールを作成し、異なるリージョンのプレイヤーが一緒にプレイできるようにすることもできます。FlexMatch マッチメイキングまたは GameLift スポットフリートを使用する場合は、キューが必要です。ゲームセッションキューの設計 (p. 136) 方法の詳細情報。

フリートインスタンスでゲームセッションが開始されると、GameLift サービスによって、接続情報がIP アドレスまたは DNS 名とポートの形式でゲームクライアントに配信されます。ゲームクライアントはこの情報を使用してゲームサーバーに接続します。ゲームサーバーの設定方法によっては、接続時にGameLift サービスと通信してプレイヤーを確認し、プレイヤーの接続ステータスが報告される場合があります。

TLS 証明書の生成を有効にしてフリートを作成した場合、ゲームクライアントとサーバーはその証明書を使用して、セキュリティ保護ありの接続を確立できます。

フリートの容量のスケーリングフリートがアクティブになりゲームセッションをホスティングできるようになると、プレイヤーの需要に合わせてフリート容量を調整できます。ホスティングのコストは使用する容量に基づいているため、すべての着信プレイヤーがゲームを見つけられるようにすることと、アイドル状態のリソースを使い果たすことの間で、バランスを取る必要があります。

フリートをスケーリングするには、フリート内のインスタンスの数を調整します。ランタイム設定により、各インスタンスがホスティングできるゲームセッションとプレイヤーの数が決まります。そのため、インスタンスをスケーリングして、ゲームセッションとプレイヤーの可用性を調整します。GameLift では、非常に効果的な Auto Scaling ツールが用意されています。または、フリート容量を手動で設定することもできます。Amazon GameLift フリートの容量のスケーリング (p. 126) 方法の詳細情報。

Auto ScalingAuto Scaling を有効にすると、GameLift はフリートのホスティングメトリクスを追跡し、定義された一連のガイドラインに基づいてインスタンスを追加または削除するタイミングを決定します。適切な AutoScaling ポリシーが設定されていれば、GameLift はプレイヤーの需要の変化に応じて容量を直接調整できます。自動スケーリングでコスト効率を改善するの詳細を確認してください。

Auto Scaling には 2 つの方法があります。

• ターゲットベースのスケーリング – この方法では、目的の結果を指定すると、GameLift によってフリートがスケールアップまたはダウンされて、その結果が達成されます。ターゲット追跡では、「利用可能なゲームセッションの割合」、つまりゲームセッションを現在ホスティングしていない正常なサーバープロセスの割合が使用されます。使用可能なゲームセッションはバッファであり、最短の待機時間でゲームに参加できる新しいゲームセッションと新しいプレイヤーの数を表します。ターゲット追跡では、ゲームに適したバッファサイズを選択します。たとえば、需要が非常に不安定なゲームでは、より大きなバッファサイズが必要になる場合があります。この方法は、多くのゲームでよりシンプルで効果的であるため、選択することをお勧めします。「ターゲット追跡の仕組み」の詳細について参照してください。

Version6

Page 13: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートの容量のスケーリング

• ルールベースのスケーリング – この方法では、スケーリングアクションをよりきめ細かく制御できます。ただし、設定と管理がより複雑になり、予期しない結果になる可能性が高くなります。各ポリシーでは、スケーリングイベントをトリガーするタイミングと、それに応じて実行するアクションを指定します。たとえば、ポリシーで「アイドル状態のインスタンスの数が 10 分間連続して 20 を下回った場合、容量を 10% 増やす」ように指定できます。 ほとんどのフリートでは、フリート容量を効果的に管理するために複数のポリシーが必要ですが、それにより予期しない複合的な影響が生じる可能性があり、複雑さが増します。「ルールベースのポリシーによる自動スケール (p. 132)」ではその方法を説明しています。

フリートスケーリングの動作フリートのスケーリングイベントは複数の方法でトリガーすることができます。Auto Scaling あるいは手動のスケーリングを介して希望する容量に変更することやヘルスやその他の理由によりインスタンスがシャットダウンにたときなどです。基本的に、すべてのスケーリングイベントはフリートの「希望する」インスタンス数が「アクティブな」インスタンス数に合わない場合にトリガーされます。この状況は、アクティブなインスタンス数が希望するインスタンス数と合うように Amazon GameLift が必要なだけインスタンスを追加または削減するようにします。

• 希望するインスタンス数がアクティブなインスタンス数を超えると、Amazon GameLift は追加のインスタンスをリクエストし、これがアクティブになるとゲームサーバービルドを新しいインスタンスにインストールするプロセスを開始して、ゲームサーバープロセスを起動します。インスタンスで 1つのサーバープロセスがアクティブになるとすぐに、アクティブなインスタンスの数が 1 つ増加します。Amazon GameLift は、2 つの数値が一致するまでインスタンスの増加を続けます。

• アクティブなインスタンス数が希望するインスタンス数を超える場合、Amazon GameLift は削除できるインスタンスの検索を開始します。使用可能なすべてのインスタンス (これは、どのゲームセッションもホストしていないこと) は終了でき、また、アクティブなゲームセッションをホストしていても、保護されていないいずれのインスタンスも同様に終了できます。削除できるインスタンスがない場合、スケールダウンイベントは失敗します。この状況では、希望するインスタンス数とアクティブなインスタンス数に差がある限り、スケールダウンイベントがトリガーされます。これは、削除できるインスタンスが見つかるまで続きます。その後、Amazon GameLift は、インスタンス上のすべてのサーバープロセスへの正常なシャットダウンの開始通知を含め、終了プロセスを開始します。インスタンスが終了すると、アクティブなインスタンスの数が 1 つ減ります。Amazon GameLift は、2 つの数値が一致するまでインスタンスの削除を続けます。

追加のスケーリング機能フリート容量およびスケーリングに関連する追加の機能には以下が含まれます。

• ゲームセッション保護 – アクティブなプレイヤーをホストしているゲームセッションが、スケールダウン中に終了することを防ぎます。ゲームセッションの保護はフリート全体で有効にすることも、個別のゲームセッションで有効にすることもできます。インスタンスは、保護されたゲームセッションをホストしているサーバープロセスがない場合には終了できません。ゲームセッションは、ヘルスあるいはスポットインスタンス関連の中断による終了から保護されません (「オンデマンドインスタンスとスポットインスタンス (p. 106)」を参照してください)。

• スケーリング制限 – フリートのインスタンス数に下限と上限を設定することで全体的なインスタンスの使用量を制御します。この制限は、Auto Scaling あるいは手動による容量設定に適用されます。

• Auto Scaling の有効化/無効化 – Auto Scaling ポリシーを変更または削除せずに、フリートレベルで AutoScaling のオンとオフを切り替えます。この機能では、必要に応じて手動でフリートを一時的にスケールすることができます。

• スケーリングメトリクス – フリートの容量履歴とスケーリングイベントをグラフ形式で追跡します。容量をフリートの使用率メトリクスと連携させて表示することで、スケーリング方法の効率性を評価します。次のグラフは、ターゲット追跡が 15% バッファに設定されたフリートを示しています。利用可能なゲームセッションスロットの割合 (緑色) は、フリートの容量 (青色とオレンジ色) が変化すると自動的に調整します。

Version7

Page 14: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートアクティビティのモニタリングとトラブルシューティング

フリートアクティビティのモニタリングとトラブルシューティングフリートが起動すると、Amazon GameLift は、デプロイしたゲームサーバーのパフォーマンスをモニタリングするに役立つさまざまな情報を収集します。この情報を使って、リソースの使用の最適化、問題のトラブルシューティング、プレイヤーのゲーム内での行動の仕方の確認を行います。

• フリート、ゲームセッション、プレイヤーセッションの詳細 – このデータには、状態の問題を識別するのに役立つステータスや、ゲームセッションの長さやプレイヤーの接続時間といった詳細が含まれます。

• 使用状況メトリクス – Amazon GameLift は、時間経過にともなうフリートメトリクスの変化を追跡します。• インスタンスの場合: ネットワークアクティビティや CPU 使用率• サーバープロセスの場合: アクティブなプロセス、新しいアクティベーションおよび終了の数• ゲーム、プレイヤーの場合: アクティブなゲームセッション、プレイヤーセッションの数

• サーバープロセスの状態 – Amazon GameLift は、正常なプロセス数、アクティブなプロセスのうち正常なものの割合、異常な終了の数など、フリートで実行されている各サーバーの状態を追跡します。

• ゲームセッションログ – ゲームサーバーにセッションデータを記録させ、ゲームセッション終了時にAmazon GameLift がログを収集および保存するように設定できます。その後、ログはサービスからダウンロードできます。

このすべてのデータは、Amazon GameLift コンソールで使用できます。コンソールダッシュボードは、ビルドとフリート全体のアクティビティの概要と、詳細情報を調べるオプションを示します。

AWS リソースでのネットワーキング多くの場合、ホストされたゲームサーバーやアプリケーションと他の AWS リソースとの通信が必要になります。たとえば、プレイヤーの認証やソーシャルネットワーキングなどの目的で、ゲームをサポートする一連のウェブサービスを使用する場合があります。このタイプの通信は、所有権に関連した問題をもたらします。Amazon GameLift を使用してゲームサーバーをデプロイすると、フリートやインスタンスはアカウントに割り当てられますが、これらは Amazon GameLift サービスによって所有および管理されます。そのため、AWS アカウントで管理されている AWS リソースにアクセスするには、Amazon GameLiftサービスによるアクセスを明示的に許可する必要があります。

Amazon GameLift には、このタイプのアクセスを管理するためのオプションがいくつかあります。フリートからの AWS リソースへのアクセス (p. 48) 方法の詳細情報。

リアルタイムサーバー の仕組みこのトピックでは、マネージド Amazon GameLift および リアルタイムサーバー ソリューションの概要に関して説明します。ここでは、どのような場合にゲームに適しているか、リアルタイムサーバー がどのようにマルチプレイヤーゲームをサポートしているかについて説明します。その他の GameLift ソリューションの詳細については、「Amazon GameLift とは? (p. 1)」を参照してください。

Realtime サーバーとはリアルタイムサーバー は、マルチプレイヤーゲームで使用するために GameLift が提供する軽量ですぐに使用できるゲームサーバーです。多くのゲームは複雑な物理と計算を処理するためにカスタムゲームサーバーを必要としますが、ゲームによってはこれは過度な要件となることがよくあります。リアルタイムサーバー によりカスタムゲームサーバーの開発、テスト、デプロイが不要になるため、このソリューションを選択すると、ゲームの完成までにかかる時間と労力を最小限に抑えることができます。

Version8

Page 15: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームに合わせた リアルタイムサーバー の選択

主な特徴は以下のとおりです。

• ゲームクライアントとサーバーのやり取りへのフルネットワークスタックの使用。リアルタイムサーバー では、メッセージングに TCP および UDP チャネルが使用されます。GameLift による TLS 証明書の生成を有効にすることで、組み込みのサーバー認証とデータパケット暗号化の使用を選択することもできます。

• ゲームサーバーの主な機能。 RealTime サーバーは、ゲームセッションを開始 (および停止) し、ゲームとマッチデータを管理し、クライアント接続を受け入れます。ゲームサーバーは、各クライアントからゲーム状態情報を受信し、それをゲームセッションの他のクライアントに中継することで、同期されたゲームセッション状態を維持します。

• GameLift サービスとの統合。 RealTime サーバーは、GameLift サービスと通信するように設定されます。このサービスは、RealTime サーバーをトリガーしてゲームセッションを開始し、プレイヤーを接続時に検証し、ゲームサーバーからプレイヤーの接続状態とゲームのヘルス状態を収集します。対照的に、この機能はカスタムゲームサーバーに実装する必要があります。

• カスタマイズ可能なサーバーロジック。 RealTime サーバーを設定し、ゲームに最適なサーバー側のゲームロジックでカスタマイズできます。または、最小限の設定によりシンプルな中継サーバーとして使用します。詳細情報 RealTime サーバーのカスタマイズ (p. 11).

• RealTime 設定およびサーバーロジックへのライブ更新。 RealTime サーバー設定は任意のタイミングで更新します。GameLift は更新された設定スクリプトを定期的にチェックするため、新しいバージョンをアップロードすると、すぐにフリートにデプロイされ、すべての新しいゲームセッションで使用されます。

• FlexMatch マッチメーキング。 リアルタイムサーバー を使用するゲームクライアントは、大規模なマッチを含むすべての FlexMatch マッチメーキング機能を利用できます。

• ホスティングリソースの柔軟な制御。 リアルタイムサーバー を使用してデプロイされるゲームの場合、Auto Scaling、マルチリージョンキュー、FleetIQ を使用したゲームセッションの配置、ゲームセッションのログ記録、メトリクスなど、GameLift のすべての管理機能を使用できます。ホスティングリソースの使用方法を決定します。

• コンピューティングリソースのさまざまなオプション。RealTime サーバーは Linux で実行されます。フリートのコンピューティングハードウェアのタイプを選択し、スポットインスタンスまたはオンデマンドインスタンスのどちらを使用するかも選択します。

• AWS の信頼性。 すべての GameLift と同様、リアルタイムサーバー でのホスティングリソースは、AWS の高レベルの品質、セキュリティ、信頼性をもたらします。

ホスティングリソースのフリートを作成し、設定スクリプトを提供することで、RealTime サーバーを設定します。RealTime サーバーの作成とゲームクライアントの準備方法の詳細については、「リアルタイムサーバー の開始方法 (p. 34)」で説明しています。

ゲームに合わせた リアルタイムサーバー の選択カスタムゲームサーバーを構築する代わりに リアルタイムサーバー を選択するかどうかは主に、サーバーの複雑さに対するゲームのニーズによって決まります。ゲームに、複雑なサーバー側のゲームロジック、ゲームプレイの瞬時の物理演算など、カスタム機能が必要でない限り、リアルタイムサーバー がゲームに適したソリューションです。最も効果的に リアルタイムサーバー を使用するゲームには、より軽量のゲームやゲームクライアントでの計算処理のより大部分を管理するゲームが含まれます。例には、メッセージングゲーム、ターン制の戦略ゲーム、多くの種類のモバイルゲームが含まれます。リアルタイムサーバーのツールは、FleetIQ と共に使用されて、ほぼすべての種類のゲーム向けに効果的に、プレイヤーのレイテンシーを最短に抑えます。

主要コンポーネントリアルタイムサーバー を使用するときは、以下のコンポーネントを使用します。これらのコンポーネントの詳細と、「リアルタイムサーバー でのゲームのアーキテクチャ (p. 19)」でそれらがどのように連携するかについて確認してください。

Version9

Page 16: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー でゲームセッションを管理する方法

• RealTime サーバーは、ゲームにクライアント/サーバーネットワーキングを提供します。また、GameLift サービスによってトリガーされたときにゲームセッションを開始し、接続時にプレイヤーの検証をリクエストして、プレイヤーの接続ステータスとゲームのヘルスステータスをレポートします。サーバーは、接続されているすべてのプレイヤー間でゲーム状態データを中継し、提供されていればカスタムゲームロジックを実行します。

• ゲームクライアントは、プレイヤーのデバイスで実行されるゲームのソフトウェアです。ゲームクライアントは (クライアントサービスを介して) GameLift サービスに、参加するゲームセッションを見つけるか新しいセッションを開始するためのリクエストを行い、RealTime サーバーに接続してゲームに参加します。接続されると、ゲームクライアントは RealTime サーバーを介して、ゲーム内の他のプレイヤーとデータを送受信できます。

• RealTime スクリプトは、ゲームの構成設定とオプションのカスタムゲームロジックを提供します。スクリプトには、最小限の構成設定またはより複雑なゲームロジックが含まれる場合があります。RealTimeスクリプトは、新しいホスティングリソースを起動するときに RealTime サーバーと共にデプロイされます。スクリプトは Node.js ベースの JavaScript で記述されます。

• GameLift サービスは、RealTime サーバーをホストするのに必要なコンピューティングリソースを管理し、プレイヤーがゲームに接続できるようにします。また、このサービスは、プレイヤーの需要に応じてリソースの数を調整します。アクティブなゲームセッションでプレイヤースロットを見つけて予約することで、プレイヤー参加リクエストを処理します。RealTime サーバーをトリガーしてゲームセッションを開始します。プレイヤーがゲームサーバーに接続するときにプレイヤーを検証します。さらに、このサービスは、RealTime サーバーのヘルスとプレイヤーの使用状況に関するメトリクスを収集します。

• ゲームセッションは、RealTime で実行されるゲームのインスタンスです。プレイヤーは、ゲームセッションに接続して、ゲームのプレイや、他のプレイヤーとのやり取りを行います。

リアルタイムサーバー でゲームセッションを管理する方法GameLift は、完全にカスタマイズされたゲームサーバーで処理するのと同じ方法で リアルタイムサーバーでゲームセッションを管理します。プレイヤーは、ゲームクライアントを使用して、新しいゲームセッションを作成したり、既存のゲームセッションを見つけて参加したりするリクエストを送信します。ゲームセッションの配置や FlexMatch のマッチメーキングなど、ゲームセッションを作成するほとんどの方法は、リアルタイムサーバー で使用することができます (マッチバックフィルは現時点では使用できません)。

RealTime サーバーは、ホストインスタンスのフリートにデプロイされると、GameLift サービスとの通信を維持します。RealTime サーバーは、GameLift サービスからリクエストされるとゲームセッションを開始し、サービスからマッチメーキングデータなどの利用可能なゲームセッションデータとプレイヤーデータを受信します。ゲームがプレイヤースロットを使用して、ゲームスロットを予約するか、プレイヤー接続を認証する場合、RealTime サーバーはプレイヤーの接続時に検証リクエストを GameLift サービスに送信できます。RealTime サーバーは、そのヘルスステータスを GameLift サービスにレポートし、プレイヤーが接続/切断したとき、およびゲームセッションが終了したときに、サービスに通知します。また、GameLift からのリクエストに応じてゲームセッションを強制終了します。GameLift サービスとのこのやり取りは、すべての リアルタイムサーバー に完全に組み込まれています。

RealTime スクリプトに組み込んで、ゲームセッション管理用のカスタムロジックを追加するというオプションもあります。サーバー固有のオブジェクトへのアクセスや、コールバックを使用したイベント駆動型ロジックの追加、イベント以外のシナリオ (タイマーやステータスチェックなど) に基づくロジックの追加を行うコードを記述できます。たとえば、ゲームセッションオブジェクトにアクセスしたり、ゲームセッションの開始または終了時にアクションをトリガーしたりできます。

Realtime Client と Realtime Server のやり取り方法ゲームセッション中、ゲーム内でのゲームクライアント間のやり取りは、メッセージングによって行われます。ゲームクライアントはメッセージを使用して、アクティビティ、ゲーム状態、関連するゲームデータを交換します。ゲームクライアントはメッセージを RealTime サーバーに送信し、そのサーバーはゲー

Version10

Page 17: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドRealTime サーバーのカスタマイズ

ムクライアント間でメッセージを中継します。ゲームクライアントは RealTime クライアント SDK を使用してサーバーと通信します。この SDK はゲームクライアントに統合されている必要があります。ClientSDK は、クライアントがゲームに接続し、メッセージを送受信し、ゲームから切断することを可能にする、一連の同期 API コールを定義しています。また、ゲームクライアントで特定のイベントに応答するために実装可能な、一連の非同期コールバックを定義しています。

さらに、ゲームロジックを RealTime スクリプトに追加することで、クライアントとサーバーのやり取り方法をカスタマイズできます。カスタムゲームロジックにより、RealTime でイベント駆動型レスポンスをトリガーするコールバックを実装できます。たとえば、ゲームクライアントが特定のアチーブメントに到達したことをサーバーに通知すると、サーバーはメッセージを他のゲームクライアントに送信して、アナウンスを表示します。

通信プロトコル

RealTime サーバーと接続されたゲームクライアントとの通信では、2 つのチャネルとして、確実な配信のための TCP 接続と迅速な配信のための UDP チャネルが使用されます。メッセージを作成するときは、メッセージのタイプに応じて使用するプロトコルを選択します。メッセージ配信はデフォルトで UDP に設定されています。UDP チャンネルが設定されていないか使用できない場合は、すべてのメッセージがフォールバックとして TCP を使用して送信されます。

メッセージの内容

メッセージの内容は、必須のオペレーションコード (opCode) とオプションのペイロードの 2 つの要素で構成されています。必要に応じて、ペイロードがオペレーションコードに関連する追加のデータを提供している間、メッセージの opCode は特定のプレイヤーの活動やゲームイベントを識別します。これらの要素はいずれも開発者によって定義されます。つまり、どのアクションをどの opCode にマッピングするか、メッセージペイロードが必要かどうかを定義します。ゲームクライアントは、受信したメッセージ内の opCode に基づいてアクションを実行します。

プレイヤーグループ

リアルタイムサーバー はプレイヤーのグループを管理する機能を提供します。デフォルトでは、ゲームに接続しているすべてのプレイヤーは「すべてのプレイヤー」グループに配置されます。さらに、開発者は自分のゲームに他のグループを設定でき、プレイヤーは同時に複数のグループのメンバーになることができます。グループメンバーは、グループ内のすべてのプレイヤーにメッセージを送信したり、グループとゲームデータを共有したりできます。グループの用途の 1 つは、プレイヤーチームを設定し、チームのコミュニケーションを管理することです。

リアルタイムサーバー での TLS 証明書の使用

TLS 証明書の生成を有効にして リアルタイムサーバー フリートを作成することを選択できます。この場合、GameLift によってフリートの TLS 証明書が生成され、フリートの各インスタンスの DNS エントリが作成されます。ゲームでは、クライアント/サーバー接続を認証し、すべてのゲームクライアント/サーバー通信を暗号化できます。この機能により、セキュリティの強化と通信の暗号化を必要とするモバイルなどのさまざまなプラットフォームで、ゲームを公開できます。この機能は、サーバーのスプーフィング攻撃からゲームクライアント (およびプレイヤー) を保護し、悪意のあるアクターがデータ送信をハッキングまたはモニタリングすることを防ぎます。これらのサービスは AWS Certificate Manager (ACM) を介して提供され、現在は追加コストなしで利用できます。

リアルタイムサーバー では、サーバー認証とデータパケット暗号化がすでにサービスに組み込まれており、TLS 証明書の生成をオンにすると有効になります。ゲームクライアントが Realtime サーバーに接続しようとすると、サーバーは TLS 証明書で自動的に応答します。この証明書はクライアントが検証します。暗号化は、TCP (Websocket) 通信の場合は TLS によって、UDP トラフィックの場合は DTLS によって処理されます。

RealTime サーバーのカスタマイズ最も基本的な形式では、RealTime サーバーはステートレスな中継サーバーとして機能します。RealTimeサーバーは、ゲームに接続されているゲームクライアント間でメッセージとゲームデータのパケットを中

Version11

Page 18: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー のデプロイと更新

継しますが、メッセージの評価、データの処理、ゲームプレイロジックの実行は行いません。このように使用されると、各ゲームクライアントはゲーム状態の独自のビューを維持し、リレーサーバーを介して他のプレイヤーに更新情報を提供します。各ゲームクライアントは、これらの更新を組み込み、独自のゲーム状態を調整します。

また、RealTime スクリプト機能を構築することによって、サーバーをカスタマイズすることもできます。リアルタイムサーバー の機能のシンプルさを活用しながら、実装することを選択できるサーバー側のプロセスは多数あります。たとえば、ゲームロジックでは、サーバー権限によるゲームの状態の表示により、ステートフルなゲームを構築することを選択できます。

一連のサーバー側のコールバックが RealTime スクリプト用に定義されています。これらのコールバックを実装して、イベント駆動型の機能をサーバーに追加します。たとえば、以下のようになります。

• ゲームクライアントがサーバーに接続を試みるときにプレイヤーを認証します。• リクエスト時にプレイヤーがグループに参加できるかどうかを確認します。• 特定のプレイヤーからのメッセージまたはターゲットプレイヤーへのメッセージの配信タイミングを評

価するか、それに応じて追加の処理を実行します。• プレイヤーがグループを離れるか、サーバーから切断されたときに、すべてのプレイヤーに通知する、

などのアクションを実行します。• ゲームセッションオブジェクトまたはメッセージオブジェクトの内容を評価してデータを使用します。

リアルタイムサーバー のデプロイと更新リアルタイムサーバー は、GameLift の専用サーバーリソースを使用しています。提供される安定性とセキュリティに違いはありません。すべてのサーバーと同様に、GameLift のマッチメーキングおよびキューを Fleet IQ で使用して、プレイヤーの位置に基づいてゲームセッションの配置を最適化することで、レイテンシーを最小限に抑えることができます。

GameLift を使用して リアルタイムサーバー ゲームをデプロイするときのプロセスは、GameLift に従来のゲームサーバーをデプロイする場合とほとんど同じです。コンピューティングリソースのフリートを作成し、設定の詳細とオプションのカスタムロジックを含む RealTime スクリプトと共にデプロイします。GameLift により、使用するフリートのタイプを選択し、フリート容量を管理します。また、フリートでゲームサーバープロセスを開始および実行する方法を制御します。「Amazon GameLift の仕組み (p. 3)」でのゲームホスティングの詳細な説明は、リアルタイムサーバー およびカスタムゲームサーバーでのゲームホスティングを表しています。

リアルタイムサーバー の主な利点は、いつでもスクリプトを更新できることです。更新されたスクリプトをデプロイするために新しいフリートを作成する必要はありません。スクリプトを更新すると、新しいバージョンは数分以内にすべてのホスティングリソースに反映されます。新しいスクリプトがデプロイされると、それ以降に作成されたすべての新しいゲームセッションでは新しいスクリプトバージョンが使用されます (既存のゲームセッションでは引き続き元のバージョンが使用されます)。

プレイヤーがゲームに接続する方法ゲームセッションは Amazon GameLift で実行するゲームのインスタンスです。ゲームをプレイするには、既存のゲームセッションを見つけて参加するか、新しいゲームセッションを作成して参加します。プレイヤーはゲームセッションのプレイヤーセッションを作成することで参加します。ゲームセッションがプレイヤーに対して開いている場合、つまり新規プレイヤーを受け入れていて、空きプレイヤースロットがある場合、Amazon GameLift はプレイヤーのためにスロットを予約し、接続情報をプレイヤーに提供します。——その後、プレイヤーはゲームセッションに接続して、予約されたスロットを要求できます。

ゲームセッションとプレイヤーセッションの作成と管理の詳細については、「ゲームクライアントへのAmazon GameLift の追加 (p. 50)」を参照してください。

Version12

Page 19: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームおよびプレイヤーセッションの機能

ゲームおよびプレイヤーセッションの機能Amazon GameLift には、ゲームセッションとプレイヤーセッションに関連するさまざまな機能があります。

複数のリージョン間で使用可能なリソースのうち、最適なリソースでゲームセッションをホストするAmazon GameLift が新しいゲームセッションをホストするためのリソースを選択する方法を設定する際、複数のオプションから選択できます。複数のリージョンで複数のフリートを実行している場合、リージョンに関係なく任意のフリートに新しいゲームセッションを配置できるゲームセッションキューをセットアップできます。この機能により、Amazon GameLift サービスがリソースの使用状況を効率的にバランスさせ、プレイヤーの要求の変更、容量の減少、停止イベント、他の問題に対応する能力が大幅に向上します。このため、キューを使用すると、リソースを監視してバランスを取るのに必要な手動オーバーヘッドが減少します。Amazon GameLift コンソールで、キューの管理やキューパフォーマンスメトリクスの追跡を行うことができます。

キュー機能を使用する場合、プレイヤーレイテンシー情報に基づいてゲームセッションの配置オプションを選択できます。この機能は、特にマッチメーキングサービスをサポートする場合に有効です。新しいゲームセッションのリクエストでは、1 人以上のプレイヤーの新しいプレイヤーセッションもリクエストされます。各プレイヤーのリージョンごとのレイテンシーデータを含めた場合、Amazon GameLift はすべてのプレイヤーに対して可能な限り最適なエクスペリエンスを提供するリージョンのフリートを選択できます。

ゲームセッションに対するプレイヤーのアクセスコントロール現在接続しているプレイヤーの数に関係なく、新しいプレイヤーからの参加リクエストを許可または拒否するようにゲームセッションを設定します。この機能を使用すると、プライベートセッションを有効にし、トラブルシューティングや他の問題解決などのためにアクセスを制限することができます。

カスタムゲームとプレイヤーデータの追加カスタムデータをゲームセッションオブジェクトとプレイヤーセッションオブジェクトに追加できます。これらのオブジェクトにはセッションのすべての設定とメタデータが含まれます。カスタムデータはAmazon GameLift に保存され、他のコンポーネントが必要に応じて取得できます。Amazon GameLift サービスは、新しいゲームを開始するときゲームセッションデータをゲームサーバーに渡します。また、プレイヤーがゲームセッションに接続すると、プレイヤーセッションデータをゲームサーバーに渡します。カスタムゲームおよびプレイヤーデータは Amazon GameLift によっては使用されません。ゲームクライアント、ゲームサーバー、他のゲームサービスが使用できるように、必要に応じてフォーマットできます。

ゲームデータはさまざまな理由から役立つことがあります。たとえば、将来のプレイヤーとゲームセッションをマッチングするときに、ゲームがゲームプロパティを使用して、最適なアルゴリズムを知らせたり、プレイヤーがリストからゲームセッションを選択できるように支援したりします。あるいは、ゲームプロパティを使用して、ゲームサーバーが新しいゲームセッションを設定する際に必要になる情報 (ゲームモードやマップなど) を渡すことができます。

プレイヤーデータにもさまざまな用途があります。たとえば、マッチメーキングサービスではプレイヤーデータを使用して、最適なマッチまたはチーム配置を選択できます。ゲームサーバーはギルドメンバーシップに基づいてプレイヤーのエクスペリエンスをカスタマイズする場合があります。

使用可能なゲームセッションのフィルタとソートセッションの検索とソートを使用して、将来のプレイヤーに最適なマッチングを探したり、使用可能なゲームセッションのリストをプレイヤーが参照できるようにしたりします。この機能により、優れたゲー

Version13

Page 20: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドGameLift FlexMatch の仕組み

ムエクスペリエンスを提供できる可能性が高いセッションにプレイヤーを効率的に導くことができます。たとえば、ゲームで最小数のプレイヤーを必要とする場合、新しいプレイヤーをほとんど埋められたゲームに誘導すると、すべてのプレイヤーの待機時間を最小化することができます。または、ほぼ終了したセッションを非表示にできます。セッション検索は「今すぐ参加」機能を実装するためにきわめて有効です。この機能は、よく考えられた検索およびソート式に支えられ、プレイヤーに優れたゲームエクスペリエンスを迅速に提供することができます。セッションの検索とソートを使用し、セッションの経過時間、空きプレイヤースロット、現在のプレイヤー数、許可される最大プレイヤー数、カスタムゲームセッションデータなどの特徴に基づいて、ゲームセッションを探します。独自のカスタムゲームデータに基づいて検索およびソートすることもできます。

ゲームおよびプレイヤー使用状況データの追跡Amazon GameLift が完了したゲームセッションのログを自動的に保存するようにします。ゲームサーバーに Amazon GameLift を統合するときに、ログストレージをセットアップします。保存されたログにアクセスするには、Amazon GameLift コンソールを使用するか、AWS SDK for Amazon GameLift を使用してプログラムによりログをダウンロードします。

セッションのメタデータと設定、プレイヤーセッションデータなど、ゲームセッションの詳細情報を表示するには、Amazon GameLift コンソールを使用します。ゲームセッションごとに、プレイヤーセッションのリストと合計プレイ時間を表示できます。時間の経過とともにアクティブな中ゲームセッションとプレイヤーセッションの数を追跡するメトリクスデータとグラフを表示することもできます。詳細については、「ゲームおよびプレイヤーセッションのデータの表示 (p. 184)」および「メトリクス (p. 181)」を参照してください。

Amazon GameLift FlexMatch の仕組みこのトピックでは、マネージド GameLift ソリューションの一部として利用できる FlexMatch マッチメーキングシステムの概要について説明します。このトピックでは、主要な機能、コンポーネント、およびマッチメーキングプロセスの仕組みについて説明します。マッチメーカーのセットアップやプレイヤーのマッチングのカスタマイズなど、FlexMatch をゲームに追加する方法の詳細については、「FlexMatchマッチメーキングの追加 (p. 73)」を参照してください。

GameLift FlexMatch はカスタマイズ可能なマッチメーキングサービスです。ゲームに最適な方法でマッチメーキングエクスペリエンス全体を管理できる、柔軟性の高いツールが用意されています。FlexMatch では、ゲームマッチングのためのチームの構築、互換プレイヤーの選択、および利用可能な最高のホスティングリソースの手配を通じて最善のプレイヤーエクスペリエンスを実現できます。FlexMatch バックフィルを使用すると、既存のゲームの新しいプレイヤーを検索できます。これにより、ゲームはゲームセッション中に互換プレイヤーで満たされ、最善のプレイヤーエクスペリエンスが実現します。

FlexMatch では、ゲームモードとプレイヤーに合わせて、複数のマッチメーカーを作成し実行できます。たとえば、自由に参加できるケージマッチのチーム構築には、別のマッチメーカーを使用できます。

FlexMatch の主な特徴• プレイヤーマッチングのカスタマイズ。 プレイヤーにとって最も魅力的なタイプのマルチプレイヤー

エクスペリエンスを設計して構築します。ゲームモードごとにチーム構造を定義し、他のゲーム属性を定義します。プレイヤー属性 (スキルレベルやロールなど) を評価するためのカスタムルールを構築し、ゲームの最善のプレイヤーマッチングを作成します。これらのルールを使用して、新しいマッチングのプレイヤーをグループ化したり、既存のマッチングで開いているスロットを埋めたりできます (「マッチバックフィル」)。

• 大規模なマッチングを作成します。 FlexMatch は非常に大規模なマッチング (41~200 人のプレイヤー)の作成に使用でき、マッチングプロセスを効率化する大規模なマッチアルゴリズムが使用されます。大規模なマッチングを作成するときは、より類似性の高いプレイヤーとのより大規模なマッチングの

Version14

Page 21: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドFlexMatch のコンポーネント

作成、またはすべてのプレイヤーが最善のプレイヤーレイテンシーエクスペリエンスを得ることがきるマッチングの作成のいずれかから、優先度を高く設定するものを選択できます。

• プレイヤーの承諾の取得。 すべてのプレイヤーがマッチング案を承諾した上で開始することを要求します。この機能を有効にすると、FlexMatch では、マッチングに割り当てられたすべてのプレイヤーが承諾するまで待ってからマッチングを開始します。

プレイヤーパーティのサポート。同じチームでプレイすることを希望するプレイヤーのグループに対してマッチングを生成します。必要に応じてマッチングを満たす追加のプレイヤーを見つけます。

• レイテンシーに基づくプレイヤーのマッチング。プレイヤーのレイテンシー情報を使用して、マッチングされたプレイヤー間の応答時間を近づけます。この機能を使用すると、一部のプレイヤーが不当に有利になるような格差をゲームプレイで回避できます。これは、複数の地理的な領域にまたがるマッチングを作成するときに特に有益です。

• プレイヤーのマッチングルールの段階的な緩和。 最適なプレイヤーマッチングを作成することと、優れたマッチングを高速にプレイヤーに提供することのバランスを取ります。プレイヤーを最小の待機時間でゲームに参加させるために、厳密なマッチングルールを緩和する場所と時期は、ユーザーが決定します。

• 最適なホスティングリソースの検索。 ゲームとプレイヤー情報を使用して、最適なゲームプレイエクスペリエンスのためのマッチングをホストするために利用できる最適なリソースを選択します。

• マッチングされたプレイヤーでゲームを満たし続ける。 FlexMatch バックフィルを使用して、ゲームセッションの有効期間中、空のプレイヤースロットを適切にマッチングした新しいプレイヤーで満たします。自動バックフィルを有効にするか、コードをゲームに追加してバックフィルを手動で管理するか選択できます。

FlexMatch のコンポーネントAmazon GameLift FlexMatch では、以下の 3 つの主要コンポーネントの連携が必要です。

• プレイヤーマッチングをトリガーするメカニズム。 1 つのメカニズムにより、プレイヤーのマッチメーキングをいつ開始するか決定されます。2 番目の (オプション) メカニズムにより、既存のマッチング(バックフィル) で空のスロットに対していつ新しいプレイヤーを見つけるかが決定されます。マッチメーキングおよびマッチングバックフィルリクエストは、処理のためにマッチメーカーに渡されます。

• プレイヤーを評価し、マッチングを作成する FlexMatch マッチメーカー。 マッチメーカーにより、受け取られるリクエストから可能な最善のプレイヤーマッチングが構築されます。これには、マッチングのチーム構造を定義し、マッチングのプレイヤーを評価するときに使用する条件を設定するルールセットがあります。ゲームには複数のマッチメーカーがあり、それぞれが異なるタイプのマッチングを構築します。

• 新しいマッチングを配置するゲームセッションキュー。 ゲームセッションキューは、マッチングをホストするために使用可能なコンピューティングリソースを検索します。リソースを探す場所 (リージョン)と、各マッチングに利用できる最適なホストを選択する方法を決定します。

以下のセクションでは、マッチングで新しいゲームマッチングを作成する方法、または既存のゲームマッチングの新しいプレイヤーを検索する方法の詳細を説明します。

マッチメーキングプロセスFlexMatch で新しいゲームマッチングのリクエストを処理する方法は以下のとおりです。この説明では、クライアント側のゲームサービスがマッチメーキングリクエストを作成し、マッチメーキングチケットのステータスを追跡していることを前提としています。

1. リクエストのマッチメーキング。プレイヤーが、[Join Now] ボタンをクリックする、プレイヤーのグループがパーティーを形成するなど、マッチメーキングをトリガーするアクションをゲームで実行します。ゲームで、使用するマッチメーカーを識別し、マッチングする 1 人以上のプレイヤーを含めて、

Version15

Page 22: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマッチメーキングプロセス

マッチメーキングリクエストを開始します。このリクエストには、スキルレベルや設定など、マッチメーカーがマッチングを構築するために必要なプレイヤー情報が含まれます。各リクエストは、ゲームがリクエストのステータスを追跡し、必要に応じてアクションを実行するために使用するマッチメーキングチケット ID を取得します。

2. マッチング候補の検出。 すべてのマッチメーキングチケットは指定されたマッチメーカーに渡され、処理のためにチケットプールに配置されます。チケットはマッチングされるまで、またはマッチメーカーの最大制限時間に達するまで、チケットプールに残ります。

マッチメーカーは通常 (大規模ではない) マッチングのプレイヤーマッチングを検索するために、チケットプールを通じて連続的に引き渡しを行います。各パスで、マッチメーカーはプールの最も古いチケットから開始し、それに対する他のチケットを評価して、最適なマッチングを探します。マッチメーカーのルールセットにより、(1) マッチング用に作成するチームの数、(2) 各チームに割り当てるプレイヤーの数、(3) 各プレイヤー候補を評価する方法が決定されます。ルールにより、個別のプレイヤー、チーム、またはマッチングの要件が設定される場合があります。たとえば、ルールでは、マッチングしたすべてのプレイヤーに特定の力を与えることや、チームの少なくとも 1 人のプレイヤーが特定のキャラクターを演じることを要求する場合があります。一般的に使用されるルールでは、マッチングのすべてのプレイヤーが、類似したスキル評価を持つことが要求されます。

大規模なマッチングのプロセスは少し異なります。FlexMatch は、各プレイヤーを一連のルールに対して評価する代わりに、1 つのキーバランス属性に対して利用可能なマッチメイキングチケットを比較検討し、類似した属性値を持つプレイヤーをグループ化します。これはレイテンシー要件にも適用されます。プレイヤー間でより類似性が高い大規模なマッチングを作成するか、プレイヤーに最善のレイテンシーエクスペリエンスを提供するマッチングにプレイヤーを配置するかのいずれかを選択できます。最初のマッチングが見つかると、FlexMatch は最終マッチングが利用可能な最善のソリューションであることを確認するために一連のテストを実施します。

マッチメーカーがチケットを評価する際は、チケット全体を合格にするか不合格にします。複数のプレイヤーが存在するチケットの場合、マッチメーカーはこれらのプレイヤーが一緒にプレイすることを希望していると想定して、すべてのプレイヤーを同じマッチングに配置することを試みます。つまり、すべてのマッチング候補で、チケットのすべてのプレイヤーが受け入れ可能である必要があります。いずれかのプレイヤーがルールに不合格となった場合、チケット全体がマッチングではないと見なされます。不合格となったチケットにはチケットプールに残り、次の引き渡しで再度評価されます。マッチング候補が満たされると、マッチングのすべてのチケットのステータスが更新されます。

3. プレイヤーの承諾の取得。プレイヤーによるマッチング候補の承諾がマッチメーカーから要求された場合、FlexMatch は各プレイヤーが承諾するまでマッチングを続行できません。マッチメーキングチケットのステータスが変更され、承認が必要なことを示します。これにより、ゲームに対して、一致した各チケットのすべてのプレイヤーからの承諾が要求されます。

プレイヤーは、潜在的なマッチングを承諾するか拒否するかを選択できます。ゲームでは、プレイヤーからレスポンスを収集して FlexMatch に報告します。マッチング候補のすべてのプレイヤーは、続行するには特定の時間制限内にマッチングを受諾する必要があります。いずれかのプレイヤーがマッチングを却下するか、時間制限までに返答しないと、マッチメーカーはマッチング案を破棄します。マッチングを承諾したプレイヤーのチケットは、マッチメーカーのリクエストプールに戻されます。マッチングを承諾しなかったプレイヤーのチケットは失敗ステータスになり、処理が中断されます。

4. マッチングをホストするリソースの検索。マッチング案が作成されて承諾されると、FlexMatch は利用可能なホスティングリソースを手配し、マッチングの配置を試みます。マッチメーカーは特定のゲームセッションキューを使用するように設定され、マッチング候補を配置のためにそのキューに渡します。キューは、一連のルールを使用して、マッチングをホストするために利用可能な最善のサーバープロセスのリージョンとフリートを検索します。元のマッチメーキングリクエストにプレイヤーのレイテンシーデータが含まれている場合、キューはこの情報を使用して、マッチングのプレイヤーに対して最小のレイテンシーと最も一貫性が高いゲームプレイエクスペリエンスを提供するリソースを検索します。

Amazon GameLift は、利用可能なサーバープロセスが確認されると、チーム構造とサイズ、プレイヤーの割り当て、関連するプレイヤー属性を含むゲームプロパティとマッチメーカーデータでゲームセッションレコードを作成します。

5. 新しいゲームセッションを開始します。 新しいゲームセッションを開始するときに、Amazon GameLiftはゲームセッションおよびマッチメーカー情報と共に、開始リクエストをサーバープロセスに送信し

Version16

Page 23: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドバックフィルプロセス

ます。サーバープロセスには、この情報を使用して、マッチングされたゲーム用に新しいゲームセッションを開始します。ゲームセッションでプレイヤーを受け入れる準備が整うと、サーバープロセスがAmazon GameLift に通知します。

6. プレイヤーを新しいゲームセッションに接続します。 プレイヤーに対してゲームセッションの準備が整うと、Amazon GameLift はマッチングのすべてのプレイヤー用に新しいプレイヤーセッションを作成します。次に、すべてのマッチメーキングチケットを更新し、チケットのステータスを変更して成功を示して、すべてのプレイヤーの接続情報を追加します。チケットステータスのこの変更により、ゲームクライアントへの接続情報の中継がゲームに求められます。これにより、プレイヤーはゲームに参加し、マッチングで自分のスロットとチームの割り当てを要求できます。

バックフィルプロセスFlexMatch で既存のマッチング用の新しいプレイヤーを見つける方法は次のとおりです。マッチメーキングのバックフィルでは、ゲームセッションでプレイヤースロットの可用性に関する最新情報を必要とするため、ゲームサーバーからマッチングバックフィルリクエストを開始することをお勧めします。もう 1 つのオプションは、ゲームセッションとプレイヤーアクティビティを追跡する、セッションディレクトリサービスなどのクライアント側のゲームサービスを使用することです。ゲームへのマッチングバックフィル機能の追加の詳細については、「FlexMatch を使用した既存のゲームのバックフィル (p. 80)」を参照してください。

マッチメイキング設定で自動バックフィルが有効になっている場合のプロセスは類似しています。唯一の違いは、最初のバックフィルリクエストはユーザーのコードではなく GameLift によって生成されることです。自動バックフィルリクエストは、ゲームセッションにプレイヤースロットの空きがある場合にトリガーされます。

1. バックフィルマッチメーキングをリクエストします。 マッチングしたゲームには、埋める必要がある空のプレイヤースロットがあります。ゲームがバックフィルリクエストを開始し、使用するマッチメーカーを識別して、ゲームセッションの現在のプレイヤーを示します。各リクエストには、ゲームがリクエストのステータスを追跡し、必要に応じてアクションを実行するために使用するマッチメーキングチケット ID があります。自動バックフィルでは、このチケット ID はゲームセッションのマッチメイキングデータに追加されます。

2. マッチング候補の検出。 バックフィル用のマッチメーキングチケットは、指定されたマッチメーカーに渡され、新しいマッチング用のチケットと同じプールに配置されます。大規模なマッチングの場合のみ、バックフィルチケットは新しいマッチングのチケットよりも優先されます。

マッチメーカーは、チケットが新しいプレイヤー用であるか、バックフィルリクエスト用であるかを問わず、チケットとプレイヤーを均等に評価します。1 つの例外として、潜在的なマッチングで複数のバックフィルチケットを持つことはできません。バックフィルチケットは、マッチメーカーのルールで、空のプレイヤースロットをマッチングに備えることを許可する場合でも、正常に完了するには、少なくとも、もう 1 つのチケットでマッチングされる必要があります。マッチング候補が満たされると、マッチングのすべてのチケットのステータスが更新されます。

3. プレイヤーの承諾の取得。 承諾が必要な場合、新しいプレイヤーのみがバックフィルマッチを受け入れる必要があり、このステップはマッチメーキングリクエストで説明しているように処理されます。現在のプレイヤーは、既にプレイしているマッチングを受諾する必要はありません。その結果、バックフィルリクエストのチケットステータスで承諾が必要であることが示されていても、ゲームでアクションを実行する必要はありません。

制限時間内に、提案された新しいプレイヤーがマッチングを受諾しなかった場合、マッチング候補は削除され、新しいプレイヤーは既存のマッチングに追加されません。これが発生すると、バックフィルリクエストのチケットは処理のためチケットプールに戻されます。

4. 新しいマッチングデータで既存のゲームセッションを更新します。 バックフィルマッチが正常に行われた場合、新しいゲームセッションを配置する必要はありません。代わりに、Amazon GameLift は既存のゲームセッションのマッチングデータを更新し、新しいプレイヤーとチームの割り当てを追加します。Amazon GameLift は更新されたゲームセッション情報を、既存のゲームをホストしているサーバープロセスに送信します。

Version17

Page 24: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマネージド GameLift を使用したゲームアーキテクチャ

5. 新しいプレイヤーを既存のゲームセッションに接続します。Amazon GameLift は新しいプレイヤー用のプレイヤーセッションを作成し、現在のステータス、プレイヤーセッション、および接続情報でマッチメーキングチケットを更新します。新しいプレイヤーのチケットステータスを追跡しているクライアントゲームサービスは、接続情報をゲームクライアントに中継します。これで、プレイヤーは既存のゲームに参加し、プレイヤースロットを要求できます。

マネージド Amazon GameLift を使用したゲームアーキテクチャ

次の図は、マネージド GameLift ソリューションを使ってホストされるゲームアーキテクチャの主要なコンポーネントを示しています。

主要コンポーネントは次のとおりです。

ゲームクライアント

GameLift でホストされているゲームに参加するには、ゲームクライアントはまず利用可能なゲームセッションを見つける必要があります。ゲームクライアントは、既存のゲームセッションを検索し、マッチメイキングをリクエストするか、または GameLift サービスと通信することによって新しいゲームセッションを開始します。この通信は、ゲームの所有者がゲームサーバーとホスティングリソースを安全に管理できるようにするために、バックエンドのクライアントサービスを介して行われます。クライアントサービス

Version18

Page 25: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー でのゲームのアーキテクチャ

は GameLift サービスにリクエストを送信し、応答として接続の詳細を含むゲームセッション情報を受信します。この情報はゲームクライアントに送り返されます。その後、ゲームクライアントはこの情報を使用してゲームサーバーに直接接続し、ゲームに参加します。緑の矢印は、ゲームプレイ中のゲームクライアントとゲームサーバー間の直接接続を表します。

クライアントサービス

バックエンドクライアントサービスは、AWS SDK の GameLift サービス API を呼び出すことによって、ゲームクライアントと GameLift サービス間の通信を処理します。クライアントサービスは、プレイヤーの認証と認可、在庫管理、通貨管理など、ゲーム固有の他のタスクにも使用される可能性があります。たとえば、プレイヤーがゲームに参加すると、ゲームクライアントは最初に認証サービスを呼び出して最初にプレイヤーの ID を確認し、次に GameLift サービスにプレイヤースロットリクエストを送信することがあります。接続の詳細などの関連情報は、ゲームクライアントに送り返されます。

外部サービス

ゲームがサブスクリプションメンバーシップの確認などの目的で外部サービスに依存している場合があります。アーキテクチャ図で示されているとおり、外部サービスからの情報は、ゲームクライアントを通さずに (クライアントサービスおよび GameLift サービスを使用して) ゲームサーバーに渡すことができます。

ゲームサーバー

ゲームサーバーソフトウェアは GameLift サービスにアップロードされ、ゲームセッションをホストし、プレイヤー接続を受け入れるためにホストマシンにデプロイされます。ゲームサーバーは、GameLift ServerSDK を使用して GameLift サービスと通信し、新しいゲームセッションの開始、新しく接続されたプレイヤーの検証、さらにゲームセッションの状態、プレイヤーの接続、利用可能なリソースのレポートをリクエストします。ゲームクライアントは、GameLift サービスから接続の詳細を受け取った後、ゲームサーバーに直接接続します。

GameLift サービス

GameLift サービスは、ゲームサーバーをホストするための一連のリソースをデプロイおよび管理するコアサービスであり、利用可能なリソース全体にゲームセッションがどのように配置されるかを調整します。またプレイヤーのトラフィックが変動してもゲームの可用性を維持するために、ゲームセッションを開始および停止し、ゲームサーバーの正常性とアクティビティを追跡します。ホスティングリソースを設定および管理する場合、ゲームの所有者は AWS SDK および CLI の GameLift サービス API を使用して、ゲームサーバービルドのアップロード、フリートの作成と設定、フリート容量の管理を行います。クライアントサービスは、AWS SDK の GameLift サービス API を呼び出すことによって、新しいゲームセッションを開始し、マッチメイキングをリクエストして、プレイヤーをゲームセッションにスロットします。GameLift フリートにデプロイされているゲームサーバーは、GameLift Server SDK を使用してGameLift サービスとの通信を維持し、ゲームセッションの開始と停止、サーバーの正常性の報告、必要に応じてゲームとプレイヤーのデータの交換などを行います。

管理ツールのホスティング

AWS SDK の GameLift 開発者用ツールセットには、ゲームホスティングリソースの設定、プレイヤーの需要に応じたキャパシティのスケーリング、リソースの現在のステータスのモニタリングを行う複数の方法が用意されています。また、ゲームサーバーのパフォーマンスおよびゲームとプレイヤーのアクティビティに関するメトリクスも追跡できます。さらに、個別のゲームサーバーにリモートでアクセスしてトラブルシューティングを行うこともできます。

リアルタイムサーバー でのゲームのアーキテクチャ

次の図は、マネージド GameLift と リアルタイムサーバー ソリューションを使用してホストされるゲームアーキテクチャの主要コンポーネントを示しています。

Version19

Page 26: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー でのゲームのアーキテクチャ

主要コンポーネントは次のように定義されます。

ゲームクライアント

GameLift でホストされているゲームに参加するには、ゲームクライアントはまず利用可能なゲームセッションを見つける必要があります。ゲームクライアントは、既存のゲームセッションを検索し、マッチメイキングをリクエストするか、または GameLift サービスと通信することによって新しいゲームセッションを開始します。この通信は、ゲームの所有者がゲームサーバーとホスティングリソースを安全に管理できるようにするために、バックエンドのクライアントサービスを介して行われます。クライアントサービスは GameLift サービスにリクエストを送信し、その応答として、接続の詳細を含むゲームセッション情報を受信して、クライアントサービスはゲームクライアントに送り返されます。その後、ゲームクライアントはリアルタイムクライアント SDK で、この情報を使用してゲームサーバーに直接接続します。接続されると、ゲームクライアントはゲームに参加し、ゲームの状態の更新をゲーム内の他のプレイヤーと交換することができます。緑の矢印は、ゲームプレイ中のゲームクライアントとゲームサーバー間の直接接続を表します。

クライアントサービス

バックエンドクライアントサービスは、AWS SDK の GameLift サービス API を呼び出すことによって、ゲームクライアントと GameLift サービス間の通信を処理します。クライアントサービスは、プレイヤーの認証と認可、在庫管理、通貨管理など、ゲーム固有の他のタスクにも使用される可能性があります。たとえば、プレイヤーがゲームに参加すると、ゲームクライアントは最初に認証クライアントサービスを呼び出してプレイヤーの ID を確認し、次に GameLift サービスにゲームセッションリク

Version20

Page 27: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー でのゲームのアーキテクチャ

エストを送信することがあります。接続の詳細など、クライアントサービスが GameLift サービスから受け取る関連情報は、ゲームクライアントに送り返されます。

外部サービス

ゲームがサブスクリプションメンバーシップの確認などの目的で外部サービスに依存している場合があります。アーキテクチャ図で示されているとおり、外部サービスからの情報は、ゲームクライアントを通さずに (クライアントサービスおよび GameLift サービスを使用して) ゲームサーバーに渡すことができます。

リアルタイムサーバー

ゲームセッションをホストするには、ゲーム用に設定した リアルタイムサーバー フリートを作成します。RealTime サーバーは、統合された本格的なゲームサーバーに代わって、スクリプトを実行します。このスクリプトは、自分のゲーム用にカスタマイズし、GameLift にアップロードします。RealTime サーバーは、ゲームセッションへのプレイヤーの接続を追跡し、プレイヤー間でゲームデータを中継して、各プレイヤーのゲーム状態を同期させます。それらのサーバーは、GameLiftサービスと通信して新しいゲームセッションを開始し、新しく接続したプレイヤーを検証します。また、ゲームセッション、プレイヤーの接続、および使用可能なリソースのステータスをレポートします。ゲームに参加するとき、ゲームクライアントは GameLift サービスから接続詳細を受信した後にRealTime サーバーに直接接続します。

GameLift サービス

GameLift サービスは、RealTime サーバーをホストするための一連のリソースをデプロイおよび管理するコアサービスであり、利用可能なリソース全体にゲームセッションがどのように配置されるかを調整します。またプレイヤーのトラフィックが変動してもゲームの可用性を維持するために、ゲームセッションを開始および停止し、ゲームサーバーの正常性とアクティビティを追跡します。ホスティングリソースを設定および管理する場合、ゲームの所有者は AWS SDK および CLI の GameLift サービス API を使用して、ゲームサーバービルドとスクリプトのアップロード、フリートの作成と設定、フリート容量の管理を行います。クライアントサービスは、AWS SDK の GameLift サービス API を呼び出すことによって、新しいゲームセッションを開始し、マッチメイキングをリクエストして、プレイヤーをゲームセッションにスロットします。

管理ツールのホスティング

AWS SDK の GameLift 開発者用ツールセットには、ゲームホスティングリソースの設定、プレイヤーの需要に応じたキャパシティのスケーリング、リソースの現在のステータスのモニタリングを行う複数の方法が用意されています。また、ゲームサーバーのパフォーマンスおよびゲームとプレイヤーのアクティビティに関するメトリクスも追跡できます。さらに、個別のゲームサーバーにリモートでアクセスしてトラブルシューティングを行うこともできます。

Version21

Page 28: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAWS アカウントのセットアップ

セットアップこのセクションのトピックを参照して、GameLift サービス用に AWS アカウントを設定できます。また、GameLift でマルチプレイヤーゲームをホストするための必要なツールを入手できます。

ヒント

リアルタイムサーバー サンプルゲーム使用などの Amazon GameLift 機能を検索する方法について確認する (p. 31)。

トピック• AWS アカウントのセットアップ (p. 22)• Amazon GameLift アクセスのロールを設定する (p. 24)• Amazon GameLift SDK (p. 25)• ツールとリソース (p. 28)• 請求アラート (p. 30)• AWS リージョンでの Amazon GameLift の使用 (p. 30)

AWS アカウントのセットアップAmazon GameLift は AWS サービスであり、Amazon GameLift を使用するには AWS アカウントが必要です。AWS アカウントの作成は無料です。

AWS アカウントで何ができるかの詳細については、「AWS の開始方法」を参照してください。

Amazon GameLift アカウントのセットアップ

1. アカウントを取得します。 Amazon Web Services を開き、[Sign In to the Console (コンソールにサインイン)] を選択します。プロンプトに従って新しいアカウントを作成するか、既存のアカウントにサインインします。

2. ユーザーグループとアクセス許可を設定します。 AWS Identity and Access Management (IAM) サービスコンソールを開き、以下の手順に従って、ユーザーまたはユーザーグループのセットを定義してアクセス権限を割り当てます。アクセス権限は、IAM ポリシーをアタッチすることによりユーザーまたはユーザーグループに拡張されます。このポリシーは、ユーザーがアクセスできる一連の AWS のサービスおよびアクションを指定します。コンソール (または AWS CLI やその他のツール) を使用してユーザーグループをセットアップする方法の詳細については、「IAM ユーザーの作成」を参照してください。

a. 管理者ユーザーまたはユーザーグループを作成します。管理者ユーザーには、Amazon GameLiftのコアリソース (ビルドやフリートなど) を管理するユーザーです。アクセス許可を設定するには、独自のポリシーをゼロから作成する必要があります。この例 (p. 23)は、Amazon GameLiftサービスの管理者ポリシーを示しています。

b. プレイヤーユーザーを作成します。プレイヤーユーザーはゲームクライアントを表します。プレイヤーユーザーは、Amazon GameLift クライアント機能 (ゲームセッション情報の取得やゲームへのプレイヤーの参加など) にアクセスできます。ゲームクライアントが AmazonGameLift サービスと通信するときは、プレイヤーユーザーの認証情報を使用する必要がありま

Version22

Page 29: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドIAM ポリシーの例

す。アクセス許可を設定するには、独自のポリシーをゼロから作成する必要があります。この例 (p. 23)は、Amazon GameLift サービスのプレイヤーポリシーを示しています。

Amazon GameLift の IAM ポリシーの例次の例を使用してインラインポリシーを作成し、IAM ユーザーまたはユーザーグループに適切なアクセス許可を追加できます。

GameLift FleetIQ をスタンドアロンソリューションとして使用する場合は、「GameLift FleetIQ 用の AWSアカウントの設定 (p. 212)」を参照してください。

管理者用の簡単なポリシーこのポリシーは、ユーザーにフル管理アクセス権を提供します。ユーザーまたはユーザーグループにアタッチして、すべての Amazon GameLift リソース (フリート、エイリアス、ゲームセッション、プレイヤーセッションなど) に対するすべての Amazon GameLift アクションを許可します。

{"Version": "2012-10-17","Statement": { "Effect": "Allow", "Action": "gamelift:*", "Resource": "*" }}

プレイヤー向けの簡単なポリシー例以下のポリシー例では、プレイヤーをゲームセッションに参加させる機能を持つゲームクライアントまたはゲームクライアントサービスを有効にする方法を示しています。これらの例では、新しいゲームセッションを開始したり、利用可能なプレイヤースロットにプレーヤーを割り当てたりするためにゲームが使用する主なシナリオについて説明します。

ゲームセッションの配置に関するポリシー

このポリシー例は、ゲームセッションキューと配置を使用して新しいゲームセッションを開始するゲームクライアントサービスを対象としています。プレイヤーは、最初の配置リクエストでゲームセッションに追加することも、既存のゲームセッションに新しいプレイヤーセッションを作成することによって追加することもできます。

{"Version": "2012-10-17","Statement": { "SID": "PlayerPermissionsForGameSessionPlacements", "Effect": "Allow", "Action": [ "gamelift:StartGameSessionPlacement", "gamelift:DescribeGameSessionPlacement", "gamelift:StopGameSessionPlacement", "gamelift:CreatePlayerSession", "gamelift:CreatePlayerSessions", "gamelift:DescribeGameSessions" ], "Resource": "*" }}

Version23

Page 30: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAmazon GameLift アクセスのロールを設定する

マッチメイキングに関するポリシー

このポリシー例は、GameLift FlexMatch マッチメイキングを使用するゲームクライアントまたはクライアントサービスを対象としています。プレイヤーは、マッチして新しいゲームセッションに配置されるか、バックフィルプロセスによって既存のゲームセッションに追加されることがあります。

{"Version": "2012-10-17","Statement": { "SID": "PlayerPermissionsForGameSessionMatchmaking", "Effect": "Allow", "Action": [ "gamelift:StartMatchmaking", "gamelift:DescribeMatchmaking", "gamelift:StopMatchmaking", "gamelift:AcceptMatch", "gamelift:StartMatchBackfill", "gamelift:DescribeGameSessions" ], "Resource": "*" }}

ゲームセッションの手動配置に関するポリシー

このポリシー例は、特定のフリートで新しいゲームセッションを作成し、特定のゲームセッションで新しいプレイヤーセッションを作成するゲームクライアントまたはクライアントサービスを対象としています。このシナリオでは、「リストアンドピック」メソッドを使用して、利用可能なゲームセッションのリストからプレイヤーが選択できるようにするゲームをサポートしています。

{"Version": "2012-10-17","Statement": { "SID": "PlayerPermissionsForManualGameSessions", "Effect": "Allow", "Action": [ "gamelift:CreateGameSession", "gamelift:DescribeGameSessions", "gamelift:SearchGameSessions", "gamelift:CreatePlayerSession", "gamelift:CreatePlayerSessions", "gamelift:DescribePlayerSessions" ], "Resource": "*" }}

Amazon GameLift アクセスのロールを設定するこのトピックでは、マネージド GameLift ソリューションの使用方法について説明します。GameLiftFleetIQ をスタンドアロン機能として使用する場合は、「GameLift FleetIQ 用の AWS アカウントの設定 (p. 212)」を参照してください。

一部の GameLift 機能では、AWS リソースへの制限付きアクセスを拡張する必要があります。そのためには、AWS Identity and Access Management (IAM) ロールを作成します。ロールには、(1) だれがそのロールを引き受けることができるか、(2) そのロールを使用している間にどのリソースをコントロールできるかを指定します。このトピックでは、Amazon GameLift サービスへのアクセスを拡張するためのロールを設定する方法についてのガイダンスを提供します。

Version24

Page 31: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドGameLift SDK

GameLift サービスの IAM ロールを設定するには

GameLift 専用のロールを作成することで、GameLift サービスから、または GameLift で実行されているアプリケーション (ゲームサーバーなど) からアクセスできる AWS リソースを定義します。

現在、Amazon GameLift のサービス固有のロールは、インラインのアクセス許可と信頼ポリシーを使用して手動で作成する必要があります。ロールは、コンソールまたは AWS CLI で IAM サービスを使用して、いつでも更新できます。

1. AWS CLI を使用して IAM ロールを作成します (IAM コンソールでは現在、一般的なサービスロールを作成したり、ポリシーを追加または編集したりすることはできません)。 具体的な手順については、IAM ユーザーガイドの「サービスのロールの作成 (AWS CLI)」トピックを参照してください。ロールは GameLift の管理に使用する AWS アカウントで作成する必要があります。そのため、適切なAWS アカウントの認証情報を使用していることを確認してください。

2. インラインのアクセス許可ポリシーを作成してロールにアタッチします。アクセス許可ポリシーでは、ロールが影響するアクセスのレベルを指定します。サービスやリソース (Amazon S3 バケットなど) へのアクセスを指定し、特定のアクションに対するアクセス許可を制限できます。脆弱性を制限するために、一連のアクセス許可別に IAM ロールを作成することを選択できます。これらの「アクセス権を委任するポリシーの例」を参照してください。ポリシーの構文を定義したら、ステップ 1 にリンクされている手順の説明に従ってポリシーをサービスにアタッチします。

3. 信頼ポリシーを作成してロールにアタッチします。信頼ポリシーは、このロールを引き受けることができる AWS のサービスを指定します。以下の構文を使用します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "gamelift.amazonaws.com" }, "Action": "sts:AssumeRole" } ]}

4. ロールを作成したら、IAM コンソールで表示できます。GameLift 機能の設定時に必要になる場合があるため、新しいロールの ARN をメモしておきます。

Amazon GameLift SDKこのトピックでは、マネージド GameLift ソリューションと、リアルタイムサーバー でのマネージドGameLift ソリューションについて説明します。その他の GameLift ソリューションの詳細については、「Amazon GameLift とは? (p. 1)」を参照してください。

GameLift ソフトウェア開発キット (SDK) を使用し、GameLift 対応のマルチプレイヤーゲームサーバー、ゲームクライアント、GameLift サービスとの通信が必要なゲームサービスを開発します。

ゲームエンジンで GameLift SDK を使用する方法の詳細については、「ゲームエンジンと AmazonGameLift (p. 36)」を参照してください。

カスタムゲームサーバーの場合GameLift Server SDK で、64 ビットのカスタムゲームサーバーを作成してデプロイします。この SDK により、GameLift サービスで GameLift ホスティングリソースにゲームサーバープロセスをデプロイして管理できます。Server SDK をダウンロードし、ゲームサーバーへの Amazon GameLift の追加 (p. 44) プ

Version25

Page 32: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー の場合

ロジェクトの方法を学びます。バージョン固有の情報については、GameLift のリリースノートを参照してください。

SDK サポート

GameLift Server SDK のダウンロードには、以下のバージョンのソースが含まれています。ゲームに必要なバージョンを構築します。構築手順および最小要件については、各バージョンの README ファイルを参照してください。

• C++• C++ for Unreal Engine (プラグイン)• C# (.NET)

開発環境

サポートされているこれらの開発オペレーティングシステムおよびゲームエンジンに必要なソースからSDK を構築します。

• オペレーティングシステム – Windows、Linux• ゲームエンジン – Amazon Lumberyard、Unreal Engine、Unity、C++ または C# ライブラリをサポート

するエンジン

ゲームサーバーオペレーティングシステム

GameLift Server SDK を使用して、次のプラットフォームで実行されるゲームサーバーを作成します。

• Windows Server 2012 R2• Amazon Linux• Amazon Linux 2

リアルタイムサーバー の場合RealTime サーバーを設定してデプロイし、マルチプレイヤーのゲームをホストすると、ゲームクライアントは、GameLift 用リアルタイムクライアント SDK を使用してそれらのゲームをホストできるようになります。ゲームクライアントは、この SDK を使用して、RealTime サーバー、およびサーバーに接続されている他のゲームクライアントとメッセージを交換します。RealTime クライアント SDK をダウンロードし、ゲームクライアントで使用する方法 (p. 63)について説明します。

SDK サポート

RealTime クライアント SDK には、以下の言語のソースが含まれています。

• C# (.NET)

開発環境

サポートされているこれらの開発オペレーティングシステムおよびゲームエンジンに必要なソースからSDK を構築します。

• オペレーティングシステム – Windows、Linux、Android、iOS。• ゲームエンジン – Unity。C# ライブラリをサポートするエンジン。

ゲームサーバーオペレーティングシステム

Version26

Page 33: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドクライアントサービスの場合

RealTime サーバーは、以下のプラットフォームを実行するホストリソースにデプロイされます。

• Amazon Linux• Amazon Linux 2

クライアントサービスの場合GameLift API と AWS SDK を使用して 64 ビットのクライアントサービスを作成します。クライアントサービスでこの SDK を使用することで、ゲームセッションを検索または作成し、GameLift でホストされているゲームにプレイヤーを参加させることができます。AWS SDK をダウンロードするか、GameLiftAPI リファレンスドキュメントを参照してください。

SDK サポート

Amazon GameLift の AWS SDK は以下の言語で利用可能です。開発環境のサポートの詳細については、各言語のドキュメントを参照してください。

• C++ (SDK ドキュメント) (Amazon GameLift)• Java (SDK ドキュメント) (Amazon GameLift)• .NET (SDK ドキュメント) (Amazon GameLift)• Go (SDK ドキュメント) (Amazon GameLift)• Python (SDK ドキュメント) (Amazon GameLift)• Ruby (SDK ドキュメント) (Amazon GameLift)• PHP (SDK ドキュメント) (Amazon GameLift)• JavaScript/Node.js (SDK ドキュメント) (Amazon GameLift)

SDK 互換性GameLift SDK のリリース履歴は次のとおりです。ゲームサーバーとクライアント統合に同等の SDK を使用することは必須ではありませんが、古いバージョンでは最新の機能を完全にサポートしていない場合があります。

リリース: AWS SDK バージョン: Server SDK バージョン: RealTime クライアントSDK バージョン:

2019-10-24 1.7.210 (コミット) 以降 3.4.0 1.1.0

2019-09-03 1.7.175 (コミット) 以降 3.4.0 1.1.0

2019-07-09 1.7.140 (コミット) 以降 3.3.0 1.0.0

2019-04-25 1.3.58 (コミット) 以降 3.3.0 1.0.0

2018-12-14 1.3.58 (コミット) 以降 3.3.0

2018-02-15 1.3.58 (コミット) 以降 3.2.1

2018-02-08 1.3.52 (コミット) 以降 3.2.0

2017-08-16 1.1.31 (コミット) 以降 3.1.7

2017-02-21 1.0.72 (コミット) 以降 3.1.5

2016-09-01 0.14.9 (コミット) 以降 3.1.0 (C++ のみ)

Version27

Page 34: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドツールとリソース

リリース: AWS SDK バージョン: Server SDK バージョン: RealTime クライアントSDK バージョン:

2016-08-04 0.12.16 (コミット) 以降 3.0.7 (C++ のみ)

(AWS SDK for C++ のバージョン情報はこのファイル aws-sdk-cpp/aws-cpp-sdk-core/include/aws/core/VersionConfig.h にあります。)

Amazon Lumberyard ユーザー向けに、Lumberyard ゲームエンジンにバンドルされている、または互換性のある GameLift SDK バージョンの一覧を次の表に示します。

Amazon Lumberyard バージョン: GameLift SDK バージョンにバンドル:

1.4 から 1.5 (ベータ) • Server SDK: 3.0.7• AWS SDK: 0.12.16

1.6 から 1.7 (ベータ) • Server SDK: 3.1.0• AWS SDK: 0.14.9

1.8 から 1.14 (ベータ) • Server SDK: 3.1.5• AWS SDK: 1.0.72 から 1.1.13

1.15 以降 (ベータ) • Server SDK: 3.2.1• AWS SDK: 1.4.34 以降

ツールとリソースAmazon GameLift では、ツールとリソースのコレクションを使用できます。

コアツールこれらのツールは Amazon GameLift で使用します。

Amazon GameLift SDK

Amazon GameLift SDK には、ゲームクライアント、ゲームサーバー、ゲームサービスから AmazonGameLift サービスと通信するために必要なライブラリが用意されています。これらの SDK のバージョンは Lumberyard で使用できます。または、最新バージョンを別個にダウンロードできます。詳細については、「Amazon GameLift SDK (p. 25)」を参照してください。

Amazon GameLift 用リアルタイムクライアント SDK

リアルタイムサーバー を使用したゲームで、リアルタイムクライアント SDK を使用すると、ゲームクライアントは、デプロイされた RealTime サーバーに接続し、ゲームセッションに参加して、そのゲームの状態をゲーム内の他のプレイヤーと同期することができます。SDK をダウンロードして、リアルタイムサーバー Client API (C#) リファレンス (p. 245) を使用した API コールの詳細について確認します。

Amazon GameLift の AWS コンソール

ゲームのデプロイの管理、リソースの設定、プレイヤーの使用状況とパフォーマンスメトリクスの追跡を行うには、Amazon GameLift の AWS マネジメントコンソール を使用します。Amazon GameLiftコンソールには、AWS SDK でプログラムによりリソースを管理する代替 GUI が用意されています。

Version28

Page 35: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド追加のリソース

AWS CLI for Amazon GameLift

Amazon GameLift API など、AWS SDK への呼び出しを行うには、このコマンドラインツールを使用します。AWS Command Line Interface ダウンロードを入手して、これらの指示に従ってインストールしてください。すべての AWS サービス (例: Amazon GameLift) の詳細な AWS CLI コマンドリファレンスも参照してください。

Amazon GameLift Local

このクライアント側デバッグツールは、ローカル開発マシンで Amazon GameLift API のサブセットをエミュレートします。ゲームサーバーをアップロードして Amazon GameLift インスタンスで実行しなくても、反復コードの変更をテストできます。Amazon GameLift Local は、Amazon GameLift SDK を使用するゲームクライアントおよびサーバーをテストするために Windows デバイスと Linux デバイスで使用できます。Amazon GameLift Local は、Server SDK のダウンロードで使用できます。詳細については、「統合をテストする (p. 57)」を参照してください。

追加のリソースマルチプレイヤーゲームでの Amazon GameLift の使用について学習し、テストするには、以下のリソースを使用します。

5 クリックサンプル

サンプルマルチプレイヤーゲーム (クライアントとカスタムゲームサーバー) を取得して AmazonGameLift で稼働させるまでに 1 時間もかかりません。このサンプルを使用することで、すぐにAmazon GameLift ツールの使用開始、フリートの設定、ホスティングを目的としたゲームサーバーのデプロイを行うことができます。このサンプルは、Amazon GameLift コンソール、GameLift のはじめにページから「Amazon GameLift のテスト」をクリックするか、その他のコンソーページで AmazonGameLift ナビゲーションメニューで「サンプルゲーム」を選択します。

Amazon GameLift フォーラム

Amazon GameLift フォーラムで、アイデアや知識を交わしたり、ヒントを見つけたり、問題に関するヘルプを受けたりできます。

GameTech ブログ

このゲーム開発ブログで、Amazon GameLift や Amazon Lumberyard の新機能をチェックし、AWSでのゲーム開発の詳細を学び、チームから専門的なヒントを入手してください。

GitHub の AWS Samples

AWS Samples には、AWS のすべてのサービスに関する多数のコードサンプルのコレクションがあります。

入門チュートリアル

これらのチュートリアルでは、サンプルマルチプレイヤーゲームを Amazon GameLift で稼働させる手順を紹介します。シリーズを完了したら、そのゲームを使用して、Auto Scaling やパフォーマンスメトリクスなどの、Amazon GameLift の他の機能やツールを試すことができます。

Amazon GameLift 製品情報

サービスの概要、よくある質問、および料金詳細を含む Amazon GameLift の詳細については、こちらのページを参照してください。

Amazon Lumberyard ゲームエンジン

Amazon Lumberyard には、Amazon GameLift SDK が組み込まれています。統合は自動的に処理されます。これには、Lumberyard を使用してゲームを Amazon GameLift に統合する方法を示すサンプルマルチプレイヤーゲームがバンドルされています。このサンプルプロジェクトの詳細については、Lumberyard ユーザーガイドを参照してください。

Version29

Page 36: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド請求アラート

請求アラート請求イベントの通知を受け取ることができるように、請求アラートを設定できます。詳細については、「請求アラームの作成」を参照してください。

請求アラートの受信に加えて、請求およびコスト管理コンソール (https://console.aws.amazon.com/billing/)では、Amazon GameLift の現在の推定請求額を確認できます。これにより、リソース消費の確認、将来の使用状況に関する決定、およびスケーリングニーズの判断に役立ちます。

不必要な料金が発生しないように、使用していないときにフリートを縮小 (p. 129)できます。

AWS リージョンでの Amazon GameLift の使用Amazon GameLift は複数の AWS リージョンで利用可能です。AWS のリージョンとエンドポイントの完全なリストについては、「AWS のリージョンとエンドポイント」を参照してください。グローバル AWSアカウントがあれば、ほとんどのリージョンのリソースで使用できます。

Sinnet が運用している 中国 (北京) リージョン のリソースで Amazon GameLift を使用する場合は、AWS(中国) アカウントが別途必要になります。また、リージョン間のやり取りをどのように処理するかなど、Amazon GameLift の実装方法にいくつか異なる点があります。中国 (北京) リージョン での AmazonGameLift の使用の詳細については、以下のリソースを参照してください。

• AWS (中国)• Amazon GameLift (中国)

Version30

Page 37: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドGameLift を試す

Amazon GameLift の開始方法このセクションのリソースは、カスタムゲームサーバーおよび リアルタイムサーバー のマネージドGameLift ソリューションの使用を開始するのに役立ちます。

トピック• Amazon GameLift を試す (p. 31)• カスタムサーバーの使用を開始する (p. 32)• リアルタイムサーバー の開始方法 (p. 34)

Amazon GameLift を試す独自のゲームを運用する前に、Amazon GameLift の機能を試してみたいとお考えですか? これらのサンプルエクスペリエンスをお試しください。コンソールのサンプルは、GameLift コンソールでゲームホスティングの実践的な使用体験を提供します。ソースコード例とチュートリアルでは、リアルタイムサーバー を使用してホスティングできるようにゲームを準備する方法がわかります。

リアルタイムサーバー サンプルゲーム (フルソース)Mega Frog Race は、ソースコード付きの完全なマルチプレイヤーゲームのサンプルです。GameLift リアルタイムサーバー を使用してサンプルをオンラインで実行する準備方法を説明する実践的なチュートリアルに従ってください。このサンプルは、ゲームクライアントを GameLift リアルタイムサーバー に対応させる方法を理解するのに適しています。また、FlexMatch などの他の GameLift の機能を試す開始点として使用することもできます。

実践的なチュートリアルを確認するには、GameTech ブログ記事 Creating Servers for Multiplayer MobileGames with Just a Few Lines of JavaScript を参照してください。

ソースコードを取得するには、GitHub リポジトリに移動します。

MegaFrogRace サンプルのソースマテリアルには、リアルタイムサーバー を使用してホストされるマルチプレイヤーゲームをデプロイするためのすべての要素が含まれています。

• ゲームクライアント – Unity が作成した C++ ゲームクライアントのソースコード。GameLift からゲームセッション接続情報を取得し、RealTime サーバーに接続して、RealTime サーバー経由で他のプレイヤーとゲーム更新情報を交換する方法が示されています。

• クライアントサービス – GameLift サービスに対する API の直接呼び出しを管理する AWS Lambda 関数のソース (Node ベースの JavaScript) 。このサービスは、ゲームクライアントによって呼び出されると、ゲームセッションの検索または新しいゲームセッションの開始をリクエストし、プレイヤーを割り当て、その後ゲームクライアントに接続の詳細を返します。

• RealTime スクリプト – ゲームの RealTime サーバーのフリートを設定するソーススクリプトファイル(Node ベースの JavaScript)。このスクリプトには、RealTime サーバーが GameLift サービスと通信し、ゲームセッションを開始および停止するための最小限の構成が含まれています。また、サンプルゲームのカスタムロジックもいくつか含まれています。

カスタムゲームサーバーのサンプル (コンソールの体験)このサンプルでは、GameLift でライブゲームをすぐに使用できます。サンプルゲームビルドをアップロードし、ゲームサーバーを実行するフリートを作成して、サンプルのゲームクライアントからそこに接続

Version31

Page 38: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドカスタムサーバーの使用を開始する

します。複数のゲームクライアントを立ち上げてプレイし、ホスティングデータを生成します。いくつかデータを取得したら、GameLift コンソールで、ホスティングリソースを表示したり、メトリックスを追跡したり、ホスティング容量をスケーリングする方法を試してみたりしてください。

サンプルウィザードにアクセスするには、GameLift コンソールにサインインし、Amazon GameLift メニューを開いて [カスタムゲームサーバーのサンプル] を選択します。

サンプルゲームについて

サンプルゲームは、Amazon Lumberyard ゲームエンジンを使用して開発されています。ゲームクライアントを実行するには、Windows 7 64 ビットシステムおよび 300 MB のスペースが必要です。追加の要件を参照してください。

カスタムサーバーの使用を開始するこのロードマップは、カスタムゲームサーバーを使用するマルチプレイヤーゲームを、カスタムゲームサーバー用のマネージド GameLift ソリューションで稼働させるための主要なステップの概要を説明します。すぐにデプロイできるゲームサーバーを使用してゲームクライアントをデプロイできる GameLift リアルタイムサーバー の使用を検討している場合は、「リアルタイムサーバー の開始方法 (p. 34)」を参照してください。その他の GameLift ソリューションについては、「Amazon GameLift とは? (p. 1)」を参照してください。

ヒント

リアルタイムサーバー サンプルゲーム使用などの Amazon GameLift 機能を検索する方法について確認する (p. 31)。

GameLift を使用するのは初めてですか? 「Amazon GameLift とは? (p. 1)」を読むことをお勧めします。GameLift でオペレーティングシステムと開発環境がサポートされているかどうかわからない場合は、「Amazon GameLift SDK (p. 25)」と「ゲームエンジンと Amazon GameLift (p. 36)」を参照してください。

統合を開始する前に、AWS アカウントを取得して Amazon GameLift 用に設定する必要があります。詳細については、AWS アカウントのセットアップ (p. 22) を参照してください。ゲームサーバーの作成と管理に関連する重要なタスクはすべて、Amazon GameLift コンソールを使用して実行できますが、AWSCommand Line Interface ツールを取得してインストールします。 も必要になる場合があります。

1. Amazon GameLift でホストするためのカスタムゲームサーバーを準備します。

• Amazon GameLift サーバー SDK を取得して、任意のプログラム言語とゲームエンジンを使用して構築します。Amazon Lumberyard ゲームエンジンを使用している場合、SDK のバージョンは組み込まれています。Amazon GameLift SDK の「カスタムゲームサーバーの場合 (p. 25)」および「ゲームエンジンと Amazon GameLift (p. 36)」を参照してください。

• ゲームサーバープロジェクトにコードを追加して、Amazon GameLift サービスとの通信を可能にします。ゲームサーバーは、ステータス、ゲームセッションの開始/停止 (プロンプトが表示された場合)、およびその他のタスクについて Amazon GameLift に通知可能である必要があります。「ゲームサーバーへの Amazon GameLift の追加 (p. 44)」を参照してください。

2. Amazon GameLift によってホストされるゲームセッションに接続するゲームクライアントを準備します。

• ゲームセッションを開始し、ゲームクライアントから要求されたらゲームにプレイヤーを参加できるように、Amazon GameLift サービスと通信するようにクライアントサービスを設定します。• AWS SDK をクライアントサービスプロジェクトに追加します。Amazon GameLift SDK の「クラ

イアントサービスの場合 (p. 27)」を参照してください。• ゲームセッションで情報を取得する機能を追加して新しいゲームセッションを配置し、ゲー

ムセッションのプレイヤー用の容量を予約します (オプション)。「ゲームクライアントへ

Version32

Page 39: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドカスタムサーバーの使用を開始する

の Amazon GameLift の追加 (p. 50)」を参照してください。推奨: ゲームセッション配置で FleetIQ を活用し、リソースの使用状況とプレイヤーのエクスペリエンスを最適化します。FlexMatchを使用している場合、このオプションは必須です。

• (オプション) FlexMatch を使用してクライアントサービスでプレイヤーのマッチメーキングをリクエストできるようにします。詳細は「FlexMatch 統合のロードマップ (p. 73)」をご覧ください。

• ゲームクライアントがホストされるゲームセッションに直接接続できるようにします。ゲームセッションと (オプション) 予約されたプレイヤーセッションの接続情報を取得するためのコードを追加します。この接続情報と一意のプレイヤー ID を使用してゲームサーバーと通信し、ゲームに参加します。「ゲームセッションへのプレイヤーの参加 (p. 52)」を参照してください。

3. Amazon GameLift 統合をテストします。

• Amazon GameLift Local を使用して、ローカルで実行されている Amazon GameLift サービスのバージョンでゲームクライアントおよびゲームサーバー統合をテストします。このツールを使用すると、ゲームビルドをアップロードしてフリートをセットアップしなくても、統合をテストできます。ゲームコンポーネントが Amazon GameLift サービスと通信していることを確認し、コア機能をテストできます。「統合をテストする (p. 57)」を参照してください。

4. ゲームをホストするための複数の仮想コンピューティングリソースを構築します。

• カスタムゲームサーバービルドをパッケージ化して、Amazon GameLift サービスにアップロードします。必ず、ゲームをデプロイする予定の各リージョンにビルドをアップロードしてください。「カスタムサーバービルドを GameLift にアップロードする (p. 96)」を参照してください。

• ゲーム用のフリート設定を設計します。たとえば、使用するコンピューティングリソースの種類、デプロイ先のリージョン、キューの使用有無などのオプションを決めます。「ゲームの AmazonGameLift フリートを設計します。 (p. 105)」を参照してください。

• フリートを作成し、カスタムゲームサーバーでデプロイします。フリートがアクティブになると、ゲームセッションをホストしプレイヤーを受け入れる準備は完了です。「Amazon GameLift フリートの設定 (p. 104)」を参照してください。

• Amazon GameLift フリートの設定をいろいろ試してみて、必要に応じて調整しフリートリソースの使用率を最適化します。各インスタンスで同時に実行するゲームセッション数を調整したり、ゲームセッションアクティベーションの制限を設定したりします。「ゲームの Amazon GameLift フリートを設計します。 (p. 105)」を参照してください。また、「フリートインスタンスにリモートでアクセス (p. 124)」方法も参照してください。

• 新しいゲームセッションを利用可能なホスティングリソースに配置する方法を管理するようにキューを作成します。「ゲームセッションキューの設計 (p. 136)」を参照してください。

• Auto Scaling を有効にして、予測されるユーザーの需要に対してフリートのホスティングキャパシティーを管理します。「Amazon GameLift フリートの容量のスケーリング (p. 126)」を参照してください。

• (オプション) ゲーム用のカスタムマッチメーキングルールのセットで FlexMatch マッチメーカーを設定します。詳細は「FlexMatch 統合のロードマップ (p. 73)」をご覧ください。

Note

キューを作成したら、リクエストゲームセッションの配置やマッチメーキングの際に正しいキュー ID が使用されるようにクライアントサービスを更新する必要があります。

Amazon GameLift とゲームコンポーネントとの統合が完了した後では、長期的に最適な可用性とパフォーマンスを維持できるようにゲームサーバーフリートを管理することが問題になります。Amazon GameLiftツールを使用して、プレイヤーがゲームセッションを見つけて接続するまでの時間と効率、ゲームサーバーの長期的かつ全体的なパフォーマンス、プレイヤーの使用パターンなど、さまざまな情報を追跡します。「コンソールでのゲームデータの表示 (p. 178)」を参照してください。

Version33

Page 40: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー の開始方法

リアルタイムサーバー の開始方法このロードマップは、マルチプレイヤーゲームクライアントを リアルタイムサーバー を使用するマネージド GameLift ソリューションで稼働させるための主要なステップの概要を説明しています。カスタムゲームサーバーを使用するゲームの場合は、「カスタムサーバーの使用を開始する (p. 32)」を参照してください。その他の GameLift ソリューションについては、「Amazon GameLift とは? (p. 1)」を参照してください。

リアルタイムサーバー を初めて使用する場合、またはこの機能が自分のゲームに適しているか不明の場合「リアルタイムサーバー の仕組み (p. 8)」を読むことをお勧めします。

Note

GameLift とゲームを統合してデプロイする方法に精通している場合は、リアルタイムサーバー の違いについて簡単に説明します。

• オプションのゲームロジックを含む RealTime スクリプトを作成してアップロードし、リアルタイムサーバー インスタンスでゲームセッションを実行します。カスタムゲームサーバーを開発し、そのサーバーを GameLift Server SDK と統合する必要はなくなりました。

• ゲームセッションをホストするフリートを作成するときは、ゲームサーバービルドではなくRealTime スクリプトを使用して、そのフリートをデプロイします。

• ゲームクライアントを RealTime Client SDK と統合して、ゲームセッションへの接続を管理します。

統合を開始する前に、AWS アカウントを取得して GameLift 用に設定する必要があります。詳細については、AWS アカウントのセットアップ (p. 22) を参照してください。ゲームサーバーの作成と管理に関連する重要なタスクはすべて、GameLift コンソールを使用して実行できますが、AWS Command LineInterface ツールを取得してインストールします。 も必要になる場合があります。

1. GameLift でホスティングするための RealTime スクリプトを作成します。

• サーバー設定とオプションのカスタムゲームロジックを使用して RealTime スクリプトを作成します。リアルタイムサーバー は、ゲームセッションを開始および停止し、プレイヤーの接続を受け入れ、GameLift サービスとの通信と、ゲーム内のプレイヤー間の通信を管理するように設計されています。ゲーム用にカスタムサーバーロジックを追加するためのフックもあります。リアルタイムサーバー は Node.js に基づいており、サーバースクリプトは JavaScript で記述されています。「RealTime スクリプトの作成 (p. 67)」を参照してください。

2. ゲームをホストするための複数の仮想コンピューティングリソースを構築します。

• RealTime スクリプトを GameLift サービスにアップロードします。必ず、ゲームをデプロイする予定の各リージョンにスクリプトをアップロードしてください。「リアルタイムサーバー スクリプトを Amazon GameLift にアップロードする (p. 101)」を参照してください。

ゲーム用のフリート設定を設計します。たとえば、使用するコンピューティングリソースの種類、デプロイ先のリージョン、キューの使用有無などのオプションを決めます。「ゲームの AmazonGameLift フリートを設計します。 (p. 105)」を参照してください。

• リアルタイムサーバー フリートを作成し、RealTime スクリプトでそれらをデプロイします。フリートがアクティブになると、ゲームセッションをホストしプレイヤーを受け入れる準備は完了です。「Amazon GameLift フリートの設定 (p. 104)」を参照してください。

• GameLift フリートの設定をいろいろ試してみて、必要に応じて調整しフリートリソースの使用率を最適化します。各インスタンスで同時に実行するゲームセッション数を調整したり、ゲームセッションアクティベーションの制限を設定したりします。「ゲームの Amazon GameLift フリートを設計します。 (p. 105)」を参照してください。また、「フリートインスタンスにリモートでアクセス (p. 124)」方法も参照してください。

• 新しいゲームセッションを利用可能なホスティングリソースに配置する方法を管理するようにキューを作成します。「ゲームセッションキューの設計 (p. 136)」を参照してください。

Version34

Page 41: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー の開始方法

• Auto Scaling を有効にして、予測されるユーザーの需要に対してフリートのホスティングキャパシティーを管理します。「Amazon GameLift フリートの容量のスケーリング (p. 126)」を参照してください。

• (オプション) ゲーム用のカスタムマッチメーキングルールのセットで FlexMatch マッチメーカーを設定します。詳細は「FlexMatch 統合のロードマップ (p. 73)」をご覧ください。

3. GameLift によってホストされるゲームセッションに参加するゲームクライアントを準備します。

• GameLift で使用するための一意のプレイヤー ID を割り当てるためのメカニズムを作成します。• 新しいゲームセッションのリクエストを GameLift に送信し、既存のゲームセッションのプレイヤー

用にスペースを予約するようにクライアントサービスを設定します。「ゲームクライアントへのAmazon GameLift の追加 (p. 50)」を参照してください。

• (オプション) FlexMatch を使用してクライアントサービスでプレイヤーのマッチメーキングをリクエストできるようにします。詳細は「FlexMatch 統合のロードマップ (p. 73)」をご覧ください。

• ゲームクライアントが RealTime サーバー上で実行されているホスト型ゲームセッションに直接接続したり、メッセージングを介して情報を交換したりできるようにします。「リアルタイムサーバー のゲームクライアントの統合 (p. 63)」を参照してください。

GameLift と リアルタイムサーバー をゲームコンポーネントに完全に統合したら、長期にわたって最適な可用性とパフォーマンスが得られるようにゲームサーバー群を管理することが問題になります。GameLiftツールを使用して、プレイヤーがゲームセッションを見つけて接続するまでの時間と効率、ゲームサーバーの長期的かつ全体的なパフォーマンス、プレイヤーの使用パターンなど、さまざまな情報を追跡します。「コンソールでのゲームデータの表示 (p. 178)」を参照してください。

Version35

Page 42: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドカスタムゲームサーバーとゲームの統合

Amazon GameLift 用のゲームの準備マルチプレイヤーゲームをマネージド GameLift サービスで実行するには、ゲームと GameLift サービス間の通信を確立するための作業が必要です。このセクションのガイドは、カスタムゲームサーバーをデプロイするか、GameLift の既製の リアルタイムサーバー を使用するかにかかわらず、GameLift とのゲームの統合、FlexMatch を使用したマッチメイキングサービスの追加について詳しく説明しています。

ヒント

リアルタイムサーバー サンプルゲーム使用などの Amazon GameLift 機能を検索する方法について確認する (p. 31)。

トピック• カスタムゲームサーバーとゲームの統合 (p. 36)• ゲームと Amazon GameLift リアルタイムサーバー の統合 (p. 62)• FlexMatch マッチメーキングの追加 (p. 73)

カスタムゲームサーバーとゲームの統合Amazon GameLift には、マルチプレイヤーゲームとカスタムゲームサーバーをマネージド GameLift サービスで動作するように準備するために必要なツールがすべて用意されています。GameLift SDK には、ゲームクライアントとサーバーが GameLift サービスと通信できるようにするために必要なライブラリが含まれています。SDK は直接ダウンロードできます。また、Amazon Lumberyard ゲームエンジンにも含まれています。SDK の詳細、および入手できる場所については、「Amazon GameLift SDK (p. 25)」を参照してください。

このセクションのトピックでは、GameLift へのデプロイ前にゲームクライアントとゲームサーバーに必要な GameLift 機能を追加する方法について詳しく説明しています。ゲームを GameLift で稼働させるための完全なロードマップについては、「カスタムサーバーの使用を開始する (p. 32)」を参照してください。

トピック• ゲームエンジンと Amazon GameLift (p. 36)• Amazon GameLift のゲームサーバーの統合 (p. 44)• Amazon GameLift に対してゲームクライアントを統合する (p. 49)• Amazon GameLift とゲームクライアント/サーバーとのやり取り (p. 54)• 統合をテストする (p. 57)

ゲームエンジンと Amazon GameLiftC++ または C# ライブラリをサポートするほとんどの主要なゲームエンジン (AmazonLumberyard、Unreal Engine、Unity など) でマネージド GameLift サービスを使用することができます。ゲームに必要なバージョンを構築します。構築手順および最小要件については、各バージョンの READMEファイルを参照してください。利用可能な GameLift SDK、サポートされている開発プラットフォームおよびオペレーティングシステムの詳細に関しては、ゲームサーバー用の「Amazon GameLift SDK (p. 25)」を参照してください。

このトピックに記載されているエンジン固有の情報に加えて、GameLift をゲームサーバー、クライアント、サービスと統合する際に役立つその他のヘルプは、以下のトピックを参照してください。

Version36

Page 43: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームエンジンと GameLift

• カスタムサーバーの使用を開始する (p. 32) – GameLift を正常にゲームに統合してホスティングリソースをセットアップするための 6 つのステップのワークフローです。

• ゲームサーバーへの Amazon GameLift の追加 (p. 44) – GameLift をゲームサーバーに統合する詳しい手順です。

• ゲームクライアントへの Amazon GameLift の追加 (p. 50) – ゲームセッションの作成やプレイヤーのゲームへの参加の手順など、ゲームクライアントまたはサービスに統合する詳しい手順です。

Amazon LumberyardGameLift SDK と機能は Lumberyard 製品に完全に組み込まれています。

ゲームサーバー

GameLift Server SDK for C++ (p. 261) を使用して GameLift でホストできるようにゲームサーバーを準備します。必要な機能をゲームサーバーに統合する方法については、「ゲームサーバーへの AmazonGameLift の追加 (p. 44)」を参照してください。

ゲームクライアントとゲームサービス

使用可能なゲームセッションの検索、新しいゲームセッションの作成、プレイヤーのゲームへの追加など、ゲームクライアントやゲームサービスが GameLift サービスとやり取りできるようにします。コアクライアント機能については、AWS SDK for C++ で説明されています。GameLift を Lumberyard ゲームプロジェクトに統合するには、「Amazon Lumberyard でのゲームクライアントの準備 (p. 38)」と「ゲームクライアントへの Amazon GameLift の追加 (p. 50)」を参照してください。

Unreal Engineゲームサーバー

GameLift でホストするゲームサーバーを準備するために、GameLift Server SDK for UnrealEngine (p. 291) をプロジェクトに追加し、必要なサーバー機能を実装します。Unreal Engine プラグインのセットアップと GameLift コードの追加については、「Amazon GameLift を Unreal Engine ゲームサーバープロジェクトに追加 (p. 38)」を参照してください。

ゲームクライアントとゲームサービス

使用可能なゲームセッションの検索、新しいゲームセッションの作成、プレイヤーのゲームへの追加など、ゲームクライアントやゲームサービスが GameLift サービスとやり取りできるようにします。コアクライアント機能については、AWS SDK for C++ で説明されています。GameLift を Unreal Engine ゲームプロジェクトを統合するには、「ゲームクライアントへの Amazon GameLift の追加 (p. 50)」を参照してください。

Unityゲームサーバー

GameLift でホストするゲームサーバーを準備するために、GameLift Server SDK for C# (p. 277) をプロジェクトに追加し、必要なサーバー機能を実装します。Unity の設定と GameLift コードの追加については、「Amazon GameLift を Unity ゲームサーバープロジェクトに追加 (p. 42)」を参照してください。

ゲームクライアントとゲームサービス

使用可能なゲームセッションの検索、新しいゲームセッションの作成、プレイヤーのゲームへの追加など、ゲームクライアントやゲームサービスが GameLift サービスとやり取りできるようにします。コアクライアント機能については、AWS SDK for .NET で説明されています。GameLift を Unity ゲームプロジェクトに統合するには、「ゲームクライアントへの Amazon GameLift の追加 (p. 50)」を参照してください。

Version37

Page 44: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームエンジンと GameLift

他のエンジンゲームサーバーとクライアントで利用可能な GameLift SDK リストについては、「the section called“GameLift SDK” (p. 25)」を参照してください。

Amazon Lumberyard でのゲームクライアントの準備すべてのゲームクライアントは、使用するフリートの指定、アクセス認証情報、接続方法など、マネージド GameLift サービスと通信できるように設定する必要があります。最も簡単な方法は、以下に示すコンソール変数を設定するバッチファイルを作成する方法です。

ヒント

リアルタイムサーバー サンプルゲーム使用などの Amazon GameLift 機能を検索する方法について確認する (p. 31)。

ゲームクライアントを準備するには

1. バッチファイルで、以下のコンソールの変数を設定してゲームクライアントを起動します。これらの変数は \dev\Code\CryEngine\CryNetwork\Lobby\LobbyCvars に追加済みです。

• gamelift_aws_access_key = AWS アカウントで「プレイヤー」アクセス権を持つユーザーのIAM セキュリティ認証情報 (p. 22)の一部

• gamelift_aws_secret_key = AWS アカウントで「プレイヤー」アクセス権を持つユーザーのIAM セキュリティ認証情報 (p. 22)の一部

• gamelift_fleet_id = 接続先のアクティブなフリートの一意の ID• gamelift_alias_id = 接続先のフリートをポイントするエイリアスの一意の ID• (オプション) gamelift_endpoint = GameLift サーバーエンドポイント。デフォルト値はgamelift.us-west-2.amazonaws.com

• (オプション) gamelift_aws_region = AWS リージョン名。デフォルト値は us-west-2• (オプション) gamelift_player_id = プレイヤーを一位に識別する (p. 54)ために生成する ID

2. サーバーブラウザを起動するには、次のコマンドを追加します。

GameLift フリート ID (gamelift_fleet_id) を使用するときは次のパターンに従います。

.\Bin64\[your game executable] +gamelift_fleet_id [your fleet ID] +gamelift_aws_region us-west-2 +gamelift_aws_access_key [your AWS access key] +gamelift_aws_secret_key [your AWS secret key] +sv_port 64091 +map [map name]

GameLift エイリアス ID (gamelift_alias_id) を使用するときは次のパターンに従います。

.\Bin64\[your game executable] +gamelift_alias_id [your alias ID] +gamelift_aws_region us-west-2 +gamelift_aws_access_key [your AWS access key] +gamelift_aws_secret_key [your AWS secret key] +sv_port 64091 +map [map name]

Amazon GameLift を Unreal Engine ゲームサーバープロジェクトに追加このトピックでは、ゲームサーバープロジェクトで GameLift Server SDK plugin for Unreal Engine をセットアップして使用する方法を説明します。使用しているオペレーティングシステムが GameLift サービスでサポートされるかどうか不明な場合は、「カスタムゲームサーバーの場合 (p. 25)」を参照してください。

Version38

Page 45: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームエンジンと GameLift

Unreal Engine Server SDK プラグインのセットアップ

次の手順に従って、ゲームサーバープロジェクトに対して GameLift Server SDK plugin for Unreal Engineを準備します。

GameLift SDK plugin for Unreal Engine をセットアップするには

1. GameLift Server SDK をダウンロードします。 ゲームシステム要件がサポートされていることを確認するには、「Amazon GameLift SDK (p. 25)」を参照してください。

2. C++ サーバー SDK ライブラリ for Unreal を構築します。 SDK のダウンロードには C++ のソースコードが含まれます (GameLift_<release date>\GameLift-SDK-Release-<version>\GameLift-cpp-ServerSDK-<version> を参照)。SDK を構築する前に、このディレクトリにある README ファイルで最小要件と追加情報を確認します。

SDK ライブラリを構築するには、ディレクトリ GameLift-cpp-ServerSDK-<version> に移動し、フラグ -DBUILD_FOR_UNREAL を true に設定してコンパイルします。次の手順では、cmake を使用してコンパイルする方法を示します。

Linux ユーザーの場合:

mkdir outcd outcmake -DBUILD_FOR_UNREAL=1 ..make

次バイナリファイルが生成されます。

• out/prefix/lib/libaws-cpp-sdk-gamelift-server.so

Windows ユーザーの場合:

mkdir outcd outcmake -G "Visual Studio 15 2017 Win64" -DBUILD_FOR_UNREAL=1 ..msbuild ALL_BUILD.vcxproj /p:Configuration=Release

次バイナリファイルが生成されます。

• out\prefix\bin\aws-cpp-sdk-gamelift-server.dll

• out\prefix\lib\aws-cpp-sdk-gamelift-server.lib

C++ SDK の最小要件や構築オプションなどの詳細については、ダウンロードに含まれる README.mdファイルを参照してください。

3. バイナリをGameLift プラグインファイルに追加します。 使用している UE4 のプラグインバージョンのディレクトリを開きます (例: GameLift-SDK-Release-3.3.0\GameLift-Unreal-plugin-3.3.0\UE4.21.1\GameLiftServerSDK)。ステップ 2 で作成されたバイナリファイルをUnreal プラグインの ThirdParty ディレクトリにコピーします。

Linux の場合は以下のパスを使用します。

• .../ThirdParty/GameLiftServerSDK/Linux/x86_64-unknown-linux-gnu/aws-cpp-sdk-gamelift-server.so

Windows の場合は以下のパスを使用します。

Version39

Page 46: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームエンジンと GameLift

• ...\ThirdParty\GameLiftServerSDK\Win64\aws-cpp-sdk-gamelift-server.dll

• ...\ThirdParty\GameLiftServerSDK\Win64\aws-cpp-sdk-gamelift-server.lib

4. GameLift プラグインをプロジェクトにインポートします。 Unreal Engine にプラグインをインポートする方法は複数あります。次の方法では、Unreal Editor は不要です。

a. プラグインをゲームプロジェクトに追加します。プラグインファイルは、生成されたバイナリファイルを含め、プラグインの GameLiftServerSDK ディレクトリ内のすべてを含む必要があります。

b. プラグインをゲームの .uproject ファイルに追加します。

"Plugins": [ { "Name": "GameLiftServerSDK", "Enabled": true }]

c. プラグイン名をゲームの ModuleRules リストに依存関係として追加します。以下は、GameLiftプラグインが追加されたモジュール名のサンプルリストの例です。

using UnrealBuildTool;

public class MyAwesomeGame : ModuleRules{ public MyAwesomeGame(TargetInfo Target) { PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "GameLiftServerSDK" }); }}

GameLift コードの追加

GameLift 機能を追加する方法の詳細については、以下のトピックを参照してください。

• ゲームサーバーへの Amazon GameLift の追加 (p. 44)• Unreal Engine の Amazon GameLift サーバー API リファレンス (p. 291)

GameLift 固有のコードを Unreal Engine ゲームプロジェクトに追加するときは、プリプロセッサフラグWITH_GAMELIFT=1 を使用してコードを囲みます。このフラグによって、サーバービルドのみが GameLiftバックプレーン API を呼び出すことと、ユーザーが作成するビルドターゲットタイプにかかわらず正しく実行されるコードを作成できることが保証されます。

WITH_GAMELIFT=1 フラグに囲まれたコードは、次に該当する場合のみ処理されます。

• プラグインが GameLift サーバー SDK バイナリファイルを検出した場合• ビルドがゲームサーバーである場合 (Target.Type == TargetRules.TargetType.Server)

次のコードスニペットは、GameLift を使用して Unreal Engine ゲームサーバーを初期化する方法を示しています。

//This is an example of a simple integration with GameLift server SDK that makes game server

Version40

Page 47: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームエンジンと GameLift

//processes go active on Amazon GameLift

// Include game project files. "GameLiftFPS" is a sample game name, replace with file names from your own game project#include "GameLiftFPSGameMode.h"#include "GameLiftFPS.h"#include "Engine.h"#include "EngineGlobals.h"#include "GameLiftFPSHUD.h"#include "GameLiftFPSCharacter.h"#include "GameLiftServerSDK.h"

AGameLiftFPSGameMode::AGameLiftFPSGameMode() : Super(){

//Let's run this code only if GAMELIFT is enabled. Only with Server targets!#if WITH_GAMELIFT

//Getting the module first. FGameLiftServerSDKModule* gameLiftSdkModule = &FModuleManager::LoadModuleChecked<FGameLiftServerSDKModule>(FName("GameLiftServerSDK"));

//InitSDK establishes a local connection with GameLift's agent to enable communication. gameLiftSdkModule->InitSDK();

//Respond to new game session activation request. GameLift sends activation request //to the game server along with a game session object containing game properties //and other settings. Once the game server is ready to receive player connections, //invoke GameLiftServerAPI.ActivateGameSession() auto onGameSession = [=](Aws::GameLift::Server::Model::GameSession gameSession) { gameLiftSdkModule->ActivateGameSession(); }; FProcessParameters* params = new FProcessParameters(); params->OnStartGameSession.BindLambda(onGameSession);

//OnProcessTerminate callback. GameLift invokes this before shutting down the instance //that is hosting this game server to give it time to gracefully shut down on its own. //In this example, we simply tell GameLift we are indeed going to shut down. params->OnTerminate.BindLambda([=](){gameLiftSdkModule->ProcessEnding();});

//HealthCheck callback. GameLift invokes this callback about every 60 seconds. By default, //GameLift API automatically responds 'true'. A game can optionally perform checks on //dependencies and such and report status based on this info. If no response is received //within 60 seconds, health status is recorded as 'false'. //In this example, we're always healthy! params->OnHealthCheck.BindLambda([](){return true; });

//Here, the game server tells GameLift what port it is listening on for incoming player //connections. In this example, the port is hardcoded for simplicity. Since active game //that are on the same instance must have unique ports, you may want to assign port values //from a range, such as: //const int32 port = FURL::UrlConfig.DefaultPort; //params->port; params->port = 7777;

//Here, the game server tells GameLift what set of files to upload when the game session //ends. GameLift uploads everything specified here for the developers to fetch later. TArray<FString> logfiles;

Version41

Page 48: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームエンジンと GameLift

logfiles.Add(TEXT("aLogFile.txt")); params->logParameters = logfiles;

//Call ProcessReady to tell GameLift this game server is ready to receive game sessions! gameLiftSdkModule->ProcessReady(*params);#endif}

Amazon GameLift を Unity ゲームサーバープロジェクトに追加このトピックでは、Unity ゲームサーバープロジェクトで GameLift C# Server SDK をセットアップする方法について説明します。使用しているオペレーティングシステムがマネージド GameLift サービスでサポートされるかどうか不明な場合は、「カスタムゲームサーバーの場合 (p. 25)」を参照してください。

C# Server SDK for Unity のセットアップ

次の手順に従って、GameLift Server SDK for C# を構築し、ご使用の Unity ゲームサーバープロジェクトに追加します。

GameLift Server SDK for Unity をセットアップするには

1. GameLift Server SDK をダウンロードします。 ゲームシステム要件がサポートされていることを確認するには、「Amazon GameLift SDK (p. 25)」を参照してください。

2. C# SDK ライブラリを構築します。 C# Server SDK の最小要件と追加のビルドオプションについては、README.md ファイルを参照してください。IDE で、使用するソリューションファイルをロードします。SDK ライブラリを生成するには、NuGet パッケージを復元し、ソリューションを構築します。

3. 構成設定を確認します。 Unity エディタで、[File]、[Build Settings]、[Player Settings] の順に選択します。[Other Settings (その他の設定)]、[Configuration (設定)] の下で、次の設定を確認します。

• [Scripting Runtime Version (スクリプトのランタイムバージョン)]: 使用している .NET ソリューションに設定します。

4. GameLift ライブラリを Unity に追加します。 Unity エディタで、ビルドによって生成されたライブラリを、プロジェクトの Assets/Plugins ディレクトリにインポートします。使用している SDK バージョンのライブラリの一覧については、 README.md ファイルを参照してください。

GameLift サーバーコードの追加

GameLift 機能を追加する方法の詳細については、以下のトピックを参照してください。

• ゲームサーバーへの Amazon GameLift の追加 (p. 44)• Amazon GameLiftサーバー API (C#) リファレンス (p. 277)

以下のコード例では、MonoBehavior を使用して GameLift でシンプルなゲームサーバーを初期化する方法を示します。

using UnityEngine;using Aws.GameLift.Server;using System.Collections.Generic;

public class GameLiftServerExampleBehavior : MonoBehaviour{ //This is an example of a simple integration with GameLift server SDK that makes game server

Version42

Page 49: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームエンジンと GameLift

//processes go active on Amazon GameLift public void Start() { //Set the port that your game service is listening on for incoming player connections (hard-coded here for simplicity) var listeningPort = 7777;

//InitSDK establishes a local connection with the Amazon GameLift agent to enable //further communication. var initSDKOutcome = GameLiftServerAPI.InitSDK(); if (initSDKOutcome.Success) { ProcessParameters processParameters = new ProcessParameters( (gameSession) => { //Respond to new game session activation request. GameLift sends activation request //to the game server along with a game session object containing game properties //and other settings. Once the game server is ready to receive player connections, //invoke GameLiftServerAPI.ActivateGameSession() GameLiftServerAPI.ActivateGameSession(); }, () => { //OnProcessTerminate callback. GameLift invokes this callback before shutting down //an instance hosting this game server. It gives this game server a chance to save //its state, communicate with services, etc., before being shut down. //In this case, we simply tell GameLift we are indeed going to shut down. GameLiftServerAPI.ProcessEnding(); }, () => { //This is the HealthCheck callback. //GameLift invokes this callback every 60 seconds or so. //Here, a game server might want to check the health of dependencies and such. //Simply return true if healthy, false otherwise. //The game server has 60 seconds to respond with its health status. //GameLift will default to 'false' if the game server doesn't respond in time. //In this case, we're always healthy! return true; }, //Here, the game server tells GameLift what port it is listening on for incoming player //connections. In this example, the port is hardcoded for simplicity. Active game //that are on the same instance must have unique ports. listeningPort, new LogParameters(new List<string>() { //Here, the game server tells GameLift what set of files to upload when the game session ends. //GameLift uploads everything specified here for the developers to fetch later. "/local/game/logs/myserver.log" }));

//Calling ProcessReady tells GameLift this game server is ready to receive incoming game sessions! var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParameters); if (processReadyOutcome.Success) { print("ProcessReady success.");

Version43

Page 50: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームサーバーの統合

} else { print("ProcessReady failure : " + processReadyOutcome.Error.ToString()); } } else { print("InitSDK failure : " + initSDKOutcome.Error.ToString()); } }

void OnApplicationQuit() { //Make sure to call GameLiftServerAPI.Destroy() when the application quits. //This resets the local connection with GameLift's agent. GameLiftServerAPI.Destroy(); }}

Amazon GameLift のゲームサーバーの統合このセクションのトピックでは、マネージド GameLift をマルチプレイヤーゲームサーバーに統合する方法について説明します。

ゲームサーバーへの GameLift の追加は、「カスタムサーバーの使用を開始する (p. 32)」ロードマップのステップ 2 です。このセクションの統合トピックでは、AWS アカウントを作成しており、既存のゲームサーバープロジェクトがあることを前提としています。

トピック

• ゲームサーバーへの Amazon GameLift の追加 (p. 44)• Amazon GameLiftサーバー API (C++) リファレンス (p. 261)• Amazon GameLiftサーバー API (C#) リファレンス (p. 277)• Unreal Engine の Amazon GameLift サーバー API リファレンス (p. 291)

ゲームサーバーへの Amazon GameLift の追加カスタムゲームサーバーは、GameLift インスタンスにデプロイされて実行されると、マネージドGameLift サービスと通信する必要があります。各ゲームサーバープロセスは、GameLift サービスによってトリガーされたときにイベントに応答できる必要があります。また、サーバープロセスのステータスと(必要に応じて) プレイヤーの接続について、GameLift に最新の情報を提供する必要があります。詳細については、「Amazon GameLift とゲームクライアント/サーバーとのやり取り (p. 54)」を参照してください。

GameLift Server SDK をゲームサーバーに統合します。Server SDK の詳細と最新バージョンのダウンロード方法については、「Amazon GameLift SDK (p. 25)」を参照してください。Server SDK は複数の言語で使用できます。詳細については、以下の API リファレンスを参照してください。

• C++ サーバー API リファレンス (p. 261)• C# サーバー API リファレンス (p. 277)• Unreal Engine プラグイン API リファレンス (p. 291)

GameLift をゲームサーバーに統合するには、ゲームサーバープロジェクトに GameLift Server SDK を追加し、このトピックで説明されている基本的な機能を構築します。

Version44

Page 51: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームサーバーの統合

サーバープロセスを準備する

GameLift クライアントを初期化するコードを追加し、サーバーがゲームセッションをホストする準備ができたことを GameLift サービスに通知します。このコードは、GameLift 依存のコードの前 (起動時) に自動的に実行されます。

Note

サーバー API アクション名は、すべての使用できる言語で同じです。

1. Server SDK を初期化します。InitSdk() を呼び出します。2. ゲームサーバープロセスがゲームセッションをホストする準備ができたことを GameLift に

通知します。GameLift インスタンスで開始する各サーバープロセスは、以下の情報を渡してProcessReady() を呼び出す必要があります。

• サーバープロセスが使用するポート番号。このポート番号は、IP アドレスとともにゲームセッションオブジェクトに保存され、ゲームクライアントがアクティブなゲームセッションに接続するときに使用されます。

• アクティブなゲームセッション中に生成され、GameLift で保持するファイル (ゲームセッションログなど) の場所。ゲームセッションをホストするときにサーバープロセスで生成されるファイルは、GameLift インスタンスに保存されますが、インスタンスがシャットダウンすると失われます。GameLift は、これらのファイルのうち、ユーザーがリクエストしたファイルをアップロードします。アップロード後のファイルには、GameLift コンソールからアクセスするか、GameLift APIGetGameSessionLogUrl() を呼び出してアクセスできます。フリートが 1 インスタンスあたり複数の並行サーバープロセスを実行するように設定されている場合は、ゲームセッションを一意に識別するファイル命名スキームを使用することを検討してください。

• サーバープロセスで特定のアクションをトリガーするために GameLift が使用するコールバック関数の名前。これらの関数の実装の詳細については、以降のセクションおよび「ProcessParameters (p. 274)」で説明します。• onHealthCheck (必須) は、サーバープロセスからヘルスステータスレポートをリクエストする

ために定期的に呼び出されます。• onStartGameSession (必須) は、GameLift サービスが新しいゲームセッション開始のリクエス

ト (CreateGameSession()) を受け取ったときに呼び出されます。• onProcessTerminate (必須) は、GameLift サービスがサーバープロセスを強制的に終了し、

サーバープロセスを適切にシャットダウンできるようにする必要があるときに呼び出されます。• onUpdateGameSession (オプション) は GameLift サービスが、更新されたゲームセッション

オブジェクトをゲームサーバーに提供するか、マッチバックフィルリクエストでステータスの更新を提供するときに呼び出されます。このコールバックは、FlexMatch のバックフィル (p. 17)機能を使用する場合にのみ必要です。このコールバック関数を実装する方法の詳細については、「ゲームサーバー上のマッチデータの更新 (p. 86)」を参照してください。

フリートをどのように設定したかによって、1 つのフリートインスタンスで複数のサーバープロセスが同時に実行される場合があります。1 つのインスタンスで 1 つのサーバープロセスがProcessReady() を呼び出すと、GameLift サービスはインスタンスのステータスを ACTIVE に設定します。

他の AWS のサービスのリソースに安全にアクセスするようにゲームサーバーをセットアップできます。これを行う方法の詳細については、「フリートからの AWS リソースへのアクセス (p. 48)」を参照してください。

サーバープロセスの状態を報告する

コールバック関数 onHealthCheck() を実装するコードを追加します。この関数は、サーバープロセスから状態メトリクスを収集するために GameLift サービスにより定期的に呼び出されます。ヘルスチェックに

Version45

Page 52: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームサーバーの統合

対するサーバープロセスの応答はバイナリ (正常または異常) です。このコールバック関数を実装する場合は、以下を実行します。

• どのような方法でもゲームにとって意味のある方法を使用して、サーバープロセスのステータスを評価します。たとえば、外部の依存関係でエラーが発生した場合や、メモリ容量などのメトリクスが定義された制限を超えた場合にサーバープロセスを異常と報告できます。

• 状態評価を完了し、60 秒以内にコールバックに応答します。GameLift サービスがその時間内に応答を受け取らない場合、自動的にサーバープロセスを異常とみなします。

• ブール値を返します (正常の場合は true、異常の場合は false)。

ヘルスチェックコールバックを実装しない場合、プロセスが応答しない場合 (異常とみなされます) を除き、GameLift サービスはサーバープロセスを正常とみなします。

サーバープロセスの状態は、GameLift が異常なプロセスを効率的に終了し、リソースを解放するために使用されます。サーバープロセスが異常と報告され続ける場合や、ヘルスチェックに 3 回連続して応答しない場合、GameLift サービスはプロセスをシャットダウンして新しいプロセスを開始することがあります。フリートのサーバープロセスの状態に関するメトリクスは、GameLift コンソールで収集して表示できます。

ゲームセッションを開始するコールバック関数 onStartGameSession を実装するコードを追加します。この関数は、ゲームセッションの新規作成時に GameLift サービスから呼び出されます。ゲームセッションの新規作成は、CreateGameSession() リクエストに応じて発生するか、ゲームセッションの配置またはマッチメーキングアクティビティに伴って発生する場合があります。

onStartGameSession 関数は、GameLift サービスにより提供される GameSession オブジェクトを入力パラメーターとして取得します。このオブジェクトには、ゲームセッション ID と、リクエストされたゲームセッションを定義する他の情報が含まれています。この関数は、以下のタスクを実行します。

• 新しいゲームセッションの作成に必要なアクションを実行します。新しいゲームセッションには、指定された最大プレイヤー数用のスロットの作成、ゲームセッション名と ID の参照など、GameSession オブジェクトが反映されている必要があります。GameLift サービスは、ゲームクライアントに同じゲームセッション情報を提供します。

• そのリクエストでゲームクライアントにより指定されたゲームプロパティ値を処理します。ゲームプロパティは、GameSession オブジェクトに含まれています。

• 新しいゲームセッションがプレイヤーを受け入れる準備ができたある時点で、サーバープロセスはサーバー API アクション ActivateGameSession() を呼び出す必要があります。呼び出しの成功に応じて、GameLift サービスはゲームセッションのステータスを ACTIVE に変更します。

TLS 証明書を取得するTLS 証明書の生成が有効になっているフリートでゲームサーバーが実行されている場合は、TLS 証明書を取得し、それを使用してゲームクライアントとのセキュリティ保護ありの接続を確立し、クライアント/サーバー通信を暗号化できます。証明書のコピーがインスタンスに保存されます。ファイルの場所を取得するには、the section called “GetInstanceCertificate()” (p. 264) を呼び出します。

新しいプレイヤーを確認するGameLift サービスによりプレイヤーの接続リクエストを確認するコードを追加します。このコードは、新しいプレイヤーがサーバープロセスへの接続を試みるたびに、接続を受け入れる前に実行する必要があります。

ゲームクライアントからの接続リクエストは、プレイヤーセッション ID を参照する必要があります。このID は、GameLift サービスにより発行され、ゲームセッションでプレイヤースロットを予約するために使用されます (CreatePlayerSession() への AWS SDK 呼び出しに対する応答)。ゲームサーバーは、参照される

Version46

Page 53: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームサーバーの統合

プレイヤーセッション ID を使用して AcceptPlayerSession() を呼び出し、承認されたプレイヤーから接続リクエストが送信されていることを確認する必要があります。

プレイヤーセッション ID が GameLift サービスにより検証されると、サーバープロセスが接続を許可し、プレイヤーがゲームセッションに参加できるようになります。プレイヤーセッション ID が GameLift サービスにより検証されていない場合、サーバープロセスは接続を拒否する必要があります。

ゲームセッションに関連付けられたプレイヤーデータを取得するには、DescribePlayerSessions()を呼び出します。

プレイヤーセッションの終了を報告するプレイヤーがゲームセッションから切断したときに GameLift サービスに通知するコードを追加します。このコードは、サーバープロセスが接続中断を検出するたびに実行する必要があります。

接続中断を処理するコードに、中断した接続に関連付けられたプレイヤーセッション ID を使用して、サーバー API アクション RemovePlayerSession() への呼び出しを追加します。この通知により、GameLiftサービスがゲームセッションにおける現在のプレイヤーと使用可能なスロットの数を正確に追跡できるようになります。

ゲームセッションを停止するゲームセッションが終了したときに GameLift サービスに通知するコードを追加します。通知により、GameLift サービスが新しいゲームセッションのサーバープロセスの可用性を正確に追跡できるようになります。このコードは、通常のゲームセッション終了プロセスに追加してください。

ゲームセッションを停止するコードの末尾に、サーバー API アクション TerminateGameSession() の呼び出しを追加します。通知を正常に受け取ると、GameLift サービスはゲームセッションステータスをTERMINATED に変更し、すぐに新しいゲームセッションを開始できます。

Note

ゲームセッションを停止したすぐ後にサーバープロセスをシャットダウンする場合、ゲームセッションとサーバープロセスの両方を終了するサーバー API アクション ProcessEnding() を呼び出すことができます。

サーバープロセスをシャットダウンするシャットダウンはサーバープロセスまたは GameLift サービスによって開始されます。いずれかのシナリオを処理するにはゲームサーバーコードに次の変更を加えます。

• コールバック関数 onProcessTerminate() を実装します。この関数は、ゲームサーバーをシャットダウンするコードを呼び出します。GameLift サービスは、通常はサーバープロセスを実行しているインスタンスの終了前に、この関数を呼び出してサーバープロセスのシャットダウンを開始します。この呼び出しが呼び出されるのは、GameLift が正常でないサーバープロセスをシャットダウンする場合、スポットインスタンスが中断された場合、インスタンス容量が縮小される場合です。この呼び出しを受信すると、サーバープロセスは、通常は数分 (スポットインスタンスの終了の場合は 2 分) の間に、適切にプレイヤーを切断し、ゲーム状態のデータを保存して、その他のクリーンアップタスクを実行します。

• ゲームサーバーシャットダウンコードからサーバー API アクション GetTerminationTime() (p. 265)を呼び出します。GameLift がサーバープロセスを終了する呼び出しを発行した場合、GetTerminationTime() は予想終了時間 (可能な場合) を返します。この情報を使用して、残り時間内に実行できるシャットダウンアクティビティ (ゲーム状態データの保存やプレイヤーの新規ゲームセッションへの移行など) を決定できます。

• ゲームサーバーシャットダウンコードの開始時に、サーバー API アクション ProcessEnding() (p. 266)を呼び出します。この呼び出しは、サーバープロセスがシャットダウンしていることを GameLift サービスに通知します。この通知を受け取ると、GameLift サービスはサーバープロセスのステータスを終了済みに変更し、必要に応じてインスタンスのリソースを即時リサイクルします。また、これにより新しいゲームセッションが確実にプロセスに送信されません。一度 ProcessEnding() が呼び出されると、プロセスが安全にシャットダウンされます。

Version47

Page 54: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームサーバーの統合

フリートからの AWS リソースへのアクセスこのトピックでは、マネージド GameLift インスタンスで実行されているゲームサーバーや他のアプリケーションを、他の AWS リソースと直接かつ安全に通信できるように設定する方法について説明します。ゲームの構造に応じて、ゲームビルドのアプリケーションやスクリプトと他の AWS サービスのリソースとの通信が必要になる場合があります。たとえば、以下のことが必要になります。

• インスタンスログデータを Amazon CloudWatch ログに送信する。• インスタンスのパフォーマンスをより詳しく把握できるように CloudWatch メトリクスを収集する。• Amazon S3 アカウントにリモート保存されている機密情報 (パスワードなど) を取得する。• Amazon DynamoDB などのデータ保存サービス (ゲームモードやインベントリなど) に保存されている

ゲームデータを動的に読み書きする。• Amazon SQS を使用してインスタンスに直接シグナルを送信する。• Amazon EC2 にデプロイされて実行されているカスタムリソースにアクセスする。

GameLift を使用してゲームサーバーをデプロイすると、フリートとインスタンスはアカウントに割り当てられますが、それらは GameLift サービスによって所有されます。そのため、AWS アカウントが所有するAWS リソースへのアクセスを有効にするには、リソースに対するアクセス許可を Amazon GameLift サービスまで明示的に拡張する必要があります。さらに、拡張されたアクセス許可の範囲を限定する必要があります。

ホストされているアプリケーションから AWS リソースに安全にアクセスできる方法は 2 つあります。

• AWS Identity and Access Management (IAM) ロールを使用して、リソースに対するアクセス許可をAmazon GameLift まで拡張します。このオプションは、AWS のサービスに直接関連付けられているリソース (Amazon S3 バケット、Amazon CloudWatch メトリクス、AWS Lambda スクリプトなど) にアクセスする場合に役立ちます。これは最もシンプルかつ推奨される方法です。

• Amazon Virtual Private Cloud (VPC) ピア接続を使用して、AWS リソースとの安全なやり取りをAmazon GameLift フリートに許可します。これは高度な機能であり、一般的な解決策ではありません。

ロールを使用してアクセスを GameLift まで拡張する

GameLift インスタンスで実行されているゲームサーバーや他のアプリケーションから AWS リソースにアクセスするには、以下のタスクを実行する必要があります。

1. GameLift サービスの IAM ロールを設定する。 Amazon GameLift アクセスのロールを設定する (p. 24)の手順に従って、IAM ロールを作成します。ロールでは、AWS リソースへの制限付きアクセスのための一連のアクセス許可を設定し、ロールを引き受けることができるエンティティ (この場合はGameLift サービス) を指定します。ロールを作成したら、新しいロールの Amazon リソースネーム(ARN) をメモしておきます。これはフリートを作成するときに必要になります。

2. サービスロールを GameLift フリートに関連付ける。 サービスロールを作成したら、このサービスロールを GameLift インスタンスで実行されているゲームサーバーや他のアプリケーションで引き受けることができるようにします。これを行うには、サービスロールの ARN をフリートに指定する必要があります。これにより、フリートの任意のインスタンスで実行されているアプリケーションでロールを引き受け、アクセスに必要な認証情報を取得できます。

サービスロールは、フリートの作成時にのみ指定できます。フリートの作成後は、ロールの ARN の追加や変更はできません。1 つの ARN のみをフリートに指定できます。

サービスロールの ARN をフリートに指定する方法については、「カスタムゲームビルド用にGameLift フリートをデプロイする (p. 110)」を参照してください。

3. サービスロールを引き受けるためのコードをアプリケーションに追加する。 GameLift インスタンスで実行されているアプリケーションは、フリートに関連付けられていれば、IAM ロールを引き受けることができます。これには、ゲームサーバーや他の実行可能ファイル (スクリプトやデーモンなど) が含

Version48

Page 55: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームクライアントの統合

まれます。アプリケーションは、フリートの作成時やビルドのインストール時、サービスプロセスやゲームセッションの起動時/停止時、またはゲームイベントに応答してリソースにアクセスできます。

アプリケーションは、AWS リソースにアクセスする前に、アプリケーションコードで最初にサービスロールを引き受ける必要があります。そのために、AWS Security Token Service API の AssumeRoleを呼び出して、フリートに関連付けられているのと同じサービスロール ARN を指定します。アプリケーションでは、このアクションで返される一時的な認証情報のセットを使用して AWS リソースにアクセスできます。「一時的なセキュリティ認証情報を使用して AWS リソースへのアクセスをリクエストする」を参照してください。

Amazon GameLift フリートで VPC ピア接続を使用する

Amazon Virtual Private Cloud (VPC) ピア接続を使用して、GameLift インスタンスで実行されているアプリケーションと別の AWS リソースとの高速で安全な通信を確立できます。Amazon VPC は、ユーザーが定義する仮想ネットワークであり、AWS アカウントを通じて管理される一連のリソースが含まれています。GameLift フリートごとに専用の VPC があります。VPC ピア接続を使用すると、フリート用の VPCと他の AWS リソース用の VPC との間に直接ネットワーク接続を確立できます。

たとえば、プレーヤ認証やソーシャルネットワーキングなど、ゲームをサポートする一連のウェブサービスがあるとします。これらのリソース用の VPC を設定し、GameLift の VPC ピア接続を使用して、ゲームサーバーからウェブサービスへの直接ネットワーク呼び出しを行います。VPC ピア接続では、ゲームサーバプロセスからの呼び出しには最小限のレイテンシーがあり、パブリックインターネット経由でルーティングされないため、外部に公開されることはありません。

GameLift は、ゲームサーバー用の VPC ピア接続を設定するプロセスを合理化します。ピアリングリクエストを処理し、ルートテーブルを更新し、必要に応じて接続を設定します。ゲームサーバーの VPC ピア接続を設定する方法の詳細については、「Amazon GameLift の VPC ピア接続 (p. 173)」を参照してください。

詳細については、Amazon の「仮想プライベートクラウド」および「VPC ピア接続」を参照してください。アクセス可能な AWS アカウント用の VPC を使用して、GameLift フリートとピア接続できます。

Amazon GameLift に対してゲームクライアントを統合するこのセクションのトピックでは、ゲームクライアントまたはゲームサービスに追加できるマネージドGameLift 機能について説明します。ゲームクライアントまたはサービスは、次のタスクを処理する必要があります。

• GameLift サービスからのアクティブなゲームセッションについての情報をリクエストします。• 既存のゲームセッションにプレーヤーを参加させます。• 新しいゲームセッションを作成し、そのセッションにプレーヤーを参加させます。• 既存のゲームセッションに関するメタデータを変更します。

GameLift をマルチプレイヤーゲームクライアントへ追加する方法に関しては、「カスタムサーバーの使用を開始する (p. 32)」のステップ 5 を参照してください。以下の手順では、AWS アカウントを作成し、GameLift 対応のゲームサーバーを生成し、GameLift にアップロードした後、ゲームセッションをホストする仮想フリートを作成および構成するために GameLift ツール (GameLift コンソールなど) を使用することを前提としています。ゲームクライアントに GameLift を追加する場合は、AWS アカウントの認証情報を提供し、顧客に使用するフリートを指定する必要があります。

ゲームクライアントが、GameLift で実行される GameLift サービスおよびゲームサービスと連携する方法に関しては、「Amazon GameLift とゲームクライアント/サーバーとのやり取り (p. 54)」を参照してください。

Version49

Page 56: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームクライアントの統合

トピック• ゲームクライアントへの Amazon GameLift の追加 (p. 50)• キューを使用したゲームセッションの作成 (p. 53)• プレイヤー ID の生成 (p. 54)

ゲームクライアントへの Amazon GameLift の追加マネージド GameLift ソリューションを使用する場合、GameLift を、ゲームセッション情報の取得、新しいゲームセッションの作成、プレイヤーのゲームへの参加処理を行う必要があるゲームコンポーネントに組み込むことができます。ゲームのアーキテクチャに応じて、この機能はゲームクライアントに配置することも、プレイヤーの認証、マッチメーキング、ゲームの配置などのタスクを処理するゲームサービスに配置することもできます。

そのためには、AWS SDK を GameLift API と共に使用します。この SDK は、C++、C#、およびその他いくつかの言語で使用できます。AWS SDK、バージョン情報、言語サポートの詳細については、「クライアントサービスの場合 (p. 27)」を参照してください。このトピックにある大半のリンクは、GameLiftService API リファレンスを参照しています。このリファレンスには、GameLift 関連アクションの低レベルサービス API についての説明と、言語別のリファレンスガイドへのリンクが含まれています。

Note

マッチメーキングを使用してプレイヤーをゲームに参加させる場合は、 ゲームクライアントまたはゲームサービスで GameLift を設定した後で、FlexMatch を追加してプレイヤーをマッチングし、カスタムゲームセッションを作成します。詳細については、「FlexMatch マッチメーキングの追加 (p. 73)」を参照してください。

クライアントまたはサービスでの GameLift のセットアップGameLift クライアントを初期化するコードを追加し、GameLift で使用するために主要な設定を保存します。このコードは、GameLift 依存コードより前 (起動時など) に実行されるように配置する必要があります。

Note

GameLift Local を使用してテストできるようにゲームクライアントをセットアップするには、「統合をテストする (p. 57)」を参照してください。

1. デフォルトのクライアント設定を使用するか、カスタム設定を作成するかを決定します。カスタム設定の場合、カスタム ClientConfiguration オブジェクトを作成する必要があります。オブジェクト構造とデフォルト設定については、「AWS クライアント設定」(C++) を参照してください。

クライアント設定は、ターゲットリージョンとエンドポイントを指定します。指定したリージョンによって、GameLift でリクエストに応答するときに使用するリソース (フリート、キュー、マッチメーカーなど) が決まります。デフォルトのクライアント設定では、米国東部(バージニア北部) リージョンを指定します。その他のリージョンを使用するには、カスタム設定を作成します。名前とエンドポイントについては、GameLift によってサポートされている AWS リージョンのこのリストを参照してください。クライアントやサービスで複数のリージョンに対してリクエストを行う場合は、リクエスト先のリージョンごとに別個のクライアント設定オブジェクトを作成します。言語別の例については、「Using Regions with the AWS SDKs」を参照してください。

2. GameLift クライアントを初期化します。デフォルト設定のクライアント構成またはカスタム設定を使用して、Aws::GameLift::GameLiftClient() (C++) を呼び出します。

3. 各プレイヤーの固有の識別子を生成するメカニズムを追加します。GameLift には、ゲームセッションに接続するための一意のプレイヤー ID が必要です。詳細については、「プレイヤー ID の生成 (p. 54)」を参照してください。

4. GameLift に問い合わせるときに使用する以下の情報を収集し、保存します。

• ターゲットフリート – ほとんどの GameLift API リクエストはフリートを指定する必要があります(たとえば、使用可能なゲームセッションについての情報を取得するときや、ゲームセッションおよ

Version50

Page 57: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームクライアントの統合

びプレイヤーセッションを管理するときなど)。最適なターゲットフリートの定義方法 (たとえば、静的フリートを設定するか、デバイスの物理的な場所に基づいてフリートを選択する)ターゲットフリートを指定するには、ターゲットフリートを指し示すフリート ID またはエイリアス ID のいずれかを使用します。フリートエイリアスは、ゲームクライアント更新を発行しなくてもプレイヤーを別のフリートに切り替えることができるため、とても便利です。ターゲットフリートとリージョン(クライアント設定で指定) の組み合わせによりフリートが一意に識別されます。

• ターゲットキュー – ゲームでマルチフリートキューを使用して新しいゲームセッションを配置する場合は、使用するキューを指定できます。ターゲットキューを指定するには、キュー名を使用します。キューはリージョン内に設定する必要があります

• AWS 認証情報 – GameLift サービスのすべての呼び出しは、ゲームをホストする AWS アカウントの認証情報を提供する必要があります。これは、GameLift フリートのセットアップに使用したアカウントです。アクセス許可ポリシーを含むプレイヤーの IAM ユーザーまたはユーザーグループが作成済みである必要があります。プレイヤーのユーザーグループの IAM アクセスキーとシークレットキーを含む Aws::Auth::AWSCredentials (C++) オブジェクトを作成する必要があります。キーを見つけるには、「IAM ユーザーのアクセスキーの管理」を参照してください。

ゲームセッションの取得

使用可能なゲームセッションを検出し、ゲームセッション設定とメタデータを管理するコードを追加します。ゲームセッション機能の詳細については、「ゲームおよびプレイヤーセッションの機能 (p. 13)」を参照してください。

アクティブなゲームセッションを検索します。

SearchGameSessions を使用して、特定のゲームセッション、すべてのアクティブなセッション、または検索条件セットを満たすセッションに関する情報を取得します。この呼び出しは、検索リクエストに一致するアクティブなゲームセッションごとに GameSession オブジェクトを返します。

プレイヤーが参加できるアクティブなゲームセッションのフィルタリングされたリストを取得するには、検索条件を使用します。たとえば、次のようにセッションをフィルタリングできます。

• 新しいプレイヤーを受け入れていないゲームセッションを除外する:PlayerSessionCreationPolicy = DENY_ALL

• 空きがないゲームセッションを除外する: CurrentPlayerSessionCount =MaximumPlayerSessionCount

• セッションが実行されている時間の長さに基づいてゲームセッションを選択する: CreationTime を評価する

• カスタムゲームプロパティに基づいてゲームセッションを検索する:gameSessionProperties.gameMode = "brawl"

ゲームセッションを管理します。

ゲームのセッション情報を取得または更新するには、次のいずれかのオペレーションを使用します。

• DescribeGameSessionDetails() – ゲームセッション情報に加えてゲームセッションの保護ステータスを取得します。

• UpdateGameSession() – ゲームセッションのメタデータと設定を必要に応じて変更します。• GetGameSessionLogUrl – 保存済みゲームセッションログにアクセスします。

ゲームセッションの作成

デプロイ済みフリートで新しいゲームセッションを起動し、それらのセッションをプレイヤーが使用できるようにするコードを追加します。ゲームを複数のリージョンでデプロイするか、1 つのリージョンでデプロイするかに応じて、ゲームセッションを作成するオプションは 2 つあります。

Version51

Page 58: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームクライアントの統合

マルチリージョンキューを使用してゲームセッションを作成します。

StartGameSessionPlacement を使用して、新しいゲームセッションのリクエストをキューに配置します。この機能を使用するには、キューをセットアップする必要があります。これにより、新しいゲームセッションを配置できる場所 (フリート上) が決まります。キューは、新しいゲームセッションをホスト可能なリソースを持つフリートが見つかるまで、可能性のある各フリートを順番に試すことにより、ゲームセッション配置リクエストを処理します。キューの詳細とキューの使用方法については、「ゲームセッションキューの設計 (p. 136)」を参照してください。

ゲームセッション配置を作成するときは、使用するキューの名前、ゲームセッション名、ゲームの同時実行プレイヤーの最大数、オプションのゲームプロパティのセットを指定します。オプションで、ゲームセッションに自動的に参加するプレイヤーのリストを指定することもできます。関連するリージョンのプレイヤーレイテンシーデータを含めた場合、GameLift はこの情報を使用して、できる限り最適なゲームプレイエクスペリエンスをプレイヤーに提供するフリートに新しいゲームセッションを配置します。

ゲームセッション配置は非同期プロセスです。リクエスト送信後は、それが成功するかタイムアウトするかです。また、StopGameSessionPlacement を使用してリクエストをいつでもキャンセルすることができます。配置リクエストのステータスを確認するには、DescribeGameSessionPlacement を呼び出して、更新された GameSessionPlacement オブジェクトを取得します。新しいゲームセッションが作成されると、GameSessionPlacement に次の変更が反映されます。(1) [Pending] から [Fulfilled] へのステータス変更、(2) ゲームセッション ID とリージョンなど、新しいゲームセッション情報の追加、(3) 新しいプレイヤーセッション情報の追加 (リクエストされた場合)。

特定のフリートにゲームセッションを作成します。

CreateGameSession を使用して、指定したフリートに新しいセッションを作成します。この同期オペレーションは、フリートに新しいゲームセッションをホストするための使用可能なリソースがあるかどうかによって、成功か失敗かが決まります。ゲームおよびプレイヤーに最も適した方法でゲームのエラーを処理する必要があります。たとえば、リソースが解放またはスケールアップされるまでリクエストを繰り返すことも、別のフリートに切り替えることもできます。GameLift が新しいゲームセッションを作成してGameSession オブジェクトを返したら、そのゲームセッションへのプレイヤーの参加を開始できます。

このメソッドを使用してゲームセッションを作成するときは、フリート ID またはエイリアス ID、セッション名、そのゲームの同時実行プレイヤーの最大数を指定します。オプションで、一連のゲームプロパティを含めることができます。ゲームプロパティは、キーと値のペアの配列で定義します。ゲームに使用する適切なキーと一連の値を定義してください。–この情報は、新しいゲームセッションをホストするサーバープロセスに渡され、ゲームサーバーで設計されたように使用されます。たとえば、ゲームプロパティを使用して、ゲームセッションで特定のゲームマップや特別な一連のルールを使用することを指示できます。

GameLift のリソース保護機能を使用して、1 人のプレイヤーが作成できるゲームセッションの数を制限する場合は、ゲームセッション作成者のプレイヤー ID を指定する必要があります。

ゲームセッションへのプレイヤーの参加アクティブなゲームセッションにプレイヤースロットを予約し、ゲームクライアントをゲームセッションに接続するコードを追加します。

1. ゲームセッションにプレイヤースロットを予約します。

プレイヤースロットを予約するには、ゲームセッションに新しいプレイヤーセッションを作成します。プレイヤーセッションの詳細については、「プレイヤーがゲームに接続する方法 (p. 12)」を参照してください。新しいプレイヤーセッションを作成するには、2 つの方法があります。

• 以前のセクションで説明されたとおり、StartGameSessionPlacement を使用してゲームセッションを作成する場合、新しいゲームセッションで 1 人以上のプレイヤーにスロットを予約できます。

• CreatePlayerSession または CreatePlayerSessions を使用し、ゲームセッション ID を指定して 1人以上のプレイヤー用のプレイヤースロットを予約します。

Version52

Page 59: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームクライアントの統合

どちらの方法でも、GameLift はまずゲームセッションが新しいプレイヤーを受け入れ、使用可能なプレイヤースロットがあることを確認します。成功すると、GameLift はプレイヤー用にスロットを予約し、新しいプレイヤーセッションを作成して、ゲームクライアントがゲームセッションに接続するために必要な DNS 名、IP アドレス、ポートを含む PlayerSession オブジェクトを返します。

プレイヤーセッションリクエストには、各プレイヤーの一意の ID が含まれている必要があります。プレイヤー ID の詳細については、「プレイヤー ID の生成 (p. 54)」を参照してください。

オプションで、プレイヤーセッションリクエストに一連のカスタムプレイヤーデータを含めることができます。このデータは新しく作成されたプレイヤーセッションオブジェクトに保存されます。このオブジェクトは、DescribePlayerSessions() を呼び出すことにより取得できます。また、このオブジェクトは、プレイヤーがゲームセッションに直接接続したときに GameLift サービスからゲームサーバーに渡されます。プレイヤーデータは GameLift では使用されません。このデータは、ゲームコンポーネントで解釈するために使用可能な、単純な文字列です。複数のプレイヤーセッションをリクエストするときは、プレイヤー ID にマッピングされたプレイヤーデータ文字列をプレイヤーごとにリクエストで指定できます。

2. ゲーム セッションに接続する。

ゲームクライアントにコードを追加し、ゲームセッションの接続情報を含む PlayerSession オブジェクトを取得します。この情報を使用して、サーバープロセスへの直接接続を確立します。

• 指定したポートと、サーバープロセスに割り当てられた DNS 名または IP アドレスを使用して接続できます。

Note

フリートに対して TLS 証明書の生成が有効になっている場合、DNS 名とポートを使用して接続する必要があります。これは、サーバー認証プロセスを実装していない場合でも必要です。

• プレイヤーセッション ID を使用してプレイヤースロットを予約し、プレイヤー接続を追跡する場合は、プレイヤーセッション ID を参照する必要があります。

接続されると、ゲームクライアントとサーバープロセスは、GameLift サービスを介さずに直接、ゲームプレイをやり取りします。サーバープロセスは、GameLift サービスとの通信を維持して、プレイヤーの接続ステータス、ヘルスステータスなどをレポートします。サービスへの初回接続時、サーバープロセスは、プレイヤーセッション ID が有効であり、予約済みのステータスであることを確認します。確認されると、予約が要求され、プレイヤー接続が受け入れられます。後で、プレイヤーが切断されると、サーバープロセスが接続中断を報告します。

サーバー認証を有効にし、ゲームクライアントとゲームセッションの間を移動するデータパケットを暗号化する場合は、この機能を構築する必要があります。新しいフリートに対して TLS 証明書の生成機能が有効になっている場合、GameLift は TLS 証明書のみを取得し、フリート内の各インスタンスの DNS エントリを作成します。

キューを使用したゲームセッションの作成この機能セットを使用すると、Amazon GameLift リソース全体に新しいゲームセッションをより効率的に配置でき、マッチメーキングサービスのサポートが向上します。以前は、新しいゲームセッションリクエストは単一のフリート (CreateGameSession) に制限されており、フリートがフルキャパシティーの場合や侵害があった場合はリクエストが失敗していました。

キューを使用して、リージョンに分散できるフリートのグループ内のいずれかのフリートに新しいゲームセッションを配置します。プレイヤーの需要が増加した場合は、他のリージョンの使用量の少ないフリートに必要に応じて移行できます。また、キューを使用すると、複数のフリートおよびリージョン間でのフ

Version53

Page 60: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドGameLift とのやり取り

リートの監視とリソースのバランス調整に必要なオーバーヘッドが減少します。Amazon GameLift コンソールで、キューの管理やキューパフォーマンスメトリクスの追跡を行うことができます。

新しいゲームセッション配置リクエストを作成してキューに追加します。ゲームセッション配置リクエストには標準のゲームセッションプロパティが含まれます。また、1 人以上のプレイヤーを新しいゲームセッションに追加できます。

ゲームセッション配置リクエストを作成するときに、プレイヤーのレイテンシーデータを含めてください。これは、すべてのプレイヤーに最適なエクスペリエンスを提供できるように、Amazon GameLift がリージョンのフリートを選択する際に役立ちます。

プレイヤー ID の生成マネージド GameLift サービスでは、ゲームセッションに接続されるプレイヤーを表すためにプレイヤーセッションを使用します。プレイヤーセッションは、プレイヤーがゲームセッションに接続するたびに作成される必要があります。プレイヤーがゲームを離れると、プレイヤーセッションは終了し、再利用されません。

GameLift には Lobby.cpp というファイルが用意されています。このファイルは、Amazon Lumberyardサンプルプロジェクトの MultiplayerSample にあり、新しいゲームセッションごとにすべてのプレイヤーの新しいランダムな ID 番号を生成する方法を示します。このサンプルコードの使用は必須ではなく、例として示しています。このコードを書き換えて、個人を特定できない一意のプレイヤー ID を独自に保持することもできます。

Lobby.cpp の以下のサンプルコードでは、一意のプレイヤー ID をランダムに生成します。

bool includeBrackets = false;bool includeDashes = true;string playerId = AZ::Uuid::CreateRandom().ToString<string>(includeBrackets, includeDashes);

プレイヤーセッションは GameLift の AWS マネジメントコンソールでプレイヤー ID 別に表示できます。プレイヤーセッションの詳細については、「ゲームおよびプレイヤーセッションのデータの表示 (p. 184)」を参照してください。

Amazon GameLift とゲームクライアント/サーバーとのやり取りこのトピックでは、クライアントアプリ、ゲームサーバー、およびマネージド GameLift サービスの間のやり取りについて説明します。Amazon GameLift – ゲームサーバー/クライアントのやり取り (p. 56)図も参照してください。

新しいサーバープロセスの設定1. GameLift サービスは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで新しいサーバー

プロセスを起動します。2. サーバープロセスは起動プロセスの一部として、サーバー API アクションを呼び出します。

• InitSDK() はサーバー SDK を初期化します。• ProcessReady() はゲームセッションを許可するよう準備状態を通信し、接続ポートとゲームセッ

ションログファイルの場所を指定します。

次に、GameLift サービスからのコールバックを待機します。3. GameLift サービスは、EC2 インスタンスのステータスを、ゲームセッション 0 および プレイヤー 0 の

ACTIVE に変更します。

Version54

Page 61: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドGameLift とのやり取り

4. GameLift サービスは、サーバープロセスがアクティブである間に onHealthCheck コールバックの定期的な呼び出しを開始します。サーバープロセスは正常か正常でないかを 1 分以内に報告する必要があります。

ゲームセッションの作成1. クライアントアプリは、クライアント API アクション CreateGameSession() を呼び出します。2. GameLift サービスは、ゲームセッション 0 のアクティブなサーバーを探します。見つかると、以下を

実行します。• 新しい GameSession オブジェクトを作成し、ProcessReady() のサーバープロセスが報告する

ポート設定を使用して、ステータスを ACTIVATING に設定します。• GameSession オブジェクトを使用して、クライアントアプリのリクエストに応答します。• サーバープロセスで onStartGameSession コールバックを呼び出して、GameSession オブジェク

トを渡します。3. サーバープロセスは、onStartGameSession コールバック関数を実行します。プレーヤーの接続の準

備ができたら、サーバープロセスはサーバー API アクション ActivateGameSession() を呼び出し、プレーヤーの接続を待機します。

4. GameLift サービスは、GameSession のステータスを ACTIVE に変更します。

ゲームセッションにプレイヤーを追加する1. クライアントアプリは、ゲームセッション ID を使用する、クライアント API アクション

CreatePlayerSession() を呼び出します。2. GameLift サービスは、ゲームセッションのステータスを確認し (ACTIVE である必要あります)、ゲーム

セッションで開いているプレイヤースロットを探します。スロットを利用できる場合は、以下を実行します。• 新しい PlayerSession オブジェクトを作成し、ステータスを RESERVED に設定します。• PlayerSession オブジェクトを使用して、クライアントアプリのリクエストに応答します。

3. クライアントアプリは、プレイヤーセッション ID を使用してサーバープロセスに直接接続します。4. サーバープロセスは、サーバー API アクション AcceptPlayerSession() を呼び出してプレイヤー

セッション ID を検証します。検証された場合、GameLift サービスは PlayerSession オブジェクトをサーバープロセスに渡します。サーバープロセスは接続を受け入れるか、または拒否します。

5. GameLift サービスは、次のいずれかを行います。• 接続が受け入れられると、PlayerSession のステータスを ACTIVE に設定します。• クライアントアプリの元の CreatePlayerSession() 呼び出しに 60 秒以内に応答がない場

合、PlayerSession のステータスを TIMEDOUT に変更し、ゲームセッションのプレーヤースロットを再び開きます。

ゲームセッションからプレーヤーを削除する1. クライアントアプリをサーバープロセスから切断します。2. サーバープロセスは失われた接続を検出し、サーバー API アクション RemovePlayerSession() を呼

び出します。3. GameLift サービスは、PlayerSession のステータスを COMPLETED に変更し、ゲームセッションの

プレーヤースロットを再び開きます。

ゲームセッションのシャットダウンゲームセッションのシャットダウン

Version55

Page 62: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドGameLift とのやり取り

1. サーバープロセスは、サーバー API アクション TerminateGameSession() を呼び出します。2. GameLift サービスは、以下を実行します。

• GameSession のステータスを TERMINATED に変更します。• Amazon Simple Storage Service (Amazon S3) にゲームセッションログをアップロードします。• サーバーがアイドル状態 (ゲームセッション 0、プレイヤー 0) であることを示すように、フリートの

使用率を更新します。

サーバープロセスの終了1. サーバープロセスは以下を実行します。

• サーバープロセスを正常にシャットダウンするコードを実行します。• GameLift サービスに通知するために、サーバー API アクション ProcessEnding() を呼び出しま

す。2. GameLift サービスは、以下を実行します。

• Amazon S3 にゲームセッションログをアップロードします (ある場合)。• サーバープロセスのステータスを TERMINATED に変更します。• フリートのランタイム設定に基づいて、インスタンスのリソースをリサイクルします。

シャットダウンリクエストへの応答1. GameLift サービスは、サーバープロセスの onProcessTerminate コールバックを呼び出します。こ

の呼び出しは、異常と報告された、または連続する 3 分間ヘルスステータスを応答しなかったサーバープロセスのシャットダウンに使用されます。

2. サーバープロセスは、ProcessEnding() への呼び出しで終了する、サーバーの終了プロセスをトリガーする onProcessTerminate コールバック関数を実行します。

3. GameLift サービスは、ProcessEnding() 呼び出しの受信に応答して、または 5 分後に以下を実行します。• Amazon S3 にゲームセッションログをアップロードします (ある場合)。• サーバープロセスのステータスを TERMINATED に変更します。• フリートのランタイム設定に基づいて、インスタンスのリソースをリサイクルします。

Amazon GameLift – ゲームサーバー/クライアントのやり取り以下の図は、マネージド GameLift ソリューションを使用してマルチプレイヤーゲームセッションタスクを管理するときに発生する API インタラクションの概要を示しています。

Version56

Page 63: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド統合をテストする

統合をテストするGameLift Local を使用して、ローカルデバイスでマネージド GameLift サービスの限定バージョンを実行し、それに対してゲーム統合をテストします。このツールは、ゲーム統合で反復開発を行う場合に便利です。代わりの方法 — 新しい各ビルドを GameLift にアップロードし、ゲームをホストするようフリートを設定する — では、毎回 30 分以上の時間がかかる場合があります。

GameLift Local では、以下の点を確認できます。

• ゲームサーバーが Server SDK と正常に統合されており、新しいゲームセッションの開始、新しいプレイヤーの承諾、ヘルスおよびステータスの報告を行うために GameLift サービスと正しく通信している。

Version57

Page 64: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド統合をテストする

• ゲームクライアントが正常に AWS SDK for GameLift と統合されており、既存のゲームセッションでの情報の取得、新しいゲームセッションの開始、プレイヤーのゲームへの参加、ゲームセッションへの接続を行うことができる。

GameLift Local は、マネージド GameLift サービスの自己完結型バージョンを開始するコマンドラインツールです。GameLift Local には、サーバープロセスの初期化、ヘルスチェック、API コールおよびレスポンスの実行イベントログも用意されています。GameLift Local は、GameLift 向けの AWS SDK アクションのサブセットを認識します。呼び出しは、AWS CLI またはゲームクライアントから行うことができます。すべての API アクションは、GameLift ウェブサービスでの実行と同じようにローカルで実行されます。

GameLift Local のセットアップGameLift Local は、Server SDK にバンドルされた実行可能な .jar ファイルとして提供されます。Windows または Linux で実行でき、GameLift でサポートされる任意の言語で使用できます。

Local を実行する前に、以下のものもインストールされている必要があります。

• GameLift Server SDK バージョン 3.1.5 以上のビルド• Java 8

ゲームサーバーのテストゲームサーバーのみをテストする場合、AWS CLI を使用して GameLift Local サービスへのゲームクライアント呼び出しをシミュレートできます。これにより、ゲームサーバーが正常に実行されていることと、以下の点が確認されます。

• ゲームサーバーが正しく起動し、GameLift Server SDK を初期化する。• 起動プロセスの一環として、サーバーでゲームセッションをホストする準備ができていることをゲーム

サーバーが GameLift に通知する。• ゲームサーバーが実行中 1 分ごとにヘルスステータスを GameLift に送信する。• ゲームサーバーがリクエストに応答して新しいゲームセッションを開始する。

1. GameLift Local の起動

コマンドプロンプトウィンドウを開き、GameLiftLocal.jar ファイルがあるディレクトリに移動して実行します。デフォルトでは、Local はポート 8080 でゲームクライアントからのリクエストをリッスンします。別のポート番号を指定するには、以下の例に示すように -p パラメーターを使用します。

java -jar GameLiftLocal.jar -p 9080

Local が起動すると、2 つのローカルサーバー (ゲームサーバーをリッスンしているサーバーとゲームクライアントまたは AWS CLI をリッスンしているサーバー) が起動したことがログに示されます。ログは、ゲームコンポーネントとの通信など、2 つのローカルサーバーでのアクティビティを報告し続けます。

2. ゲームサーバーを起動します。

GameLift が統合されたゲームサーバーをローカルで起動します。ゲームサーバーのエンドポイントを変更する必要はありません。

Local のコマンドプロンプトウィンドウでは、ゲームサーバーが GameLift Local サービスに接続されていることがログメッセージに示されます。これは、ゲームサーバーが GameLift ServerSDK を正常に初期化したこと (InitSDK() を使用) を意味します。示されたログパスを使用して

Version58

Page 65: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド統合をテストする

ProcessReady() を呼び出し、成功した場合はゲームセッションをホストする準備が完了します。ゲームサーバーの実行中、GameLift はゲームサーバーから各ヘルスステータスレポートを記録します。次のログメッセージの例は、正常に統合されたゲームサーバーを示しています。

16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - SDK connected: /127.0.0.1:64247 16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - SDK pid is 17040, sdkVersion is 3.1.5 and sdkLanguage is CSharp16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - NOTE: Only SDK versions 3.1.5 and above are supported in GameLiftLocal!16:50:53,451 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onProcessReady received from: /127.0.0.1:64247 and ackRequest requested? true16:50:53,543 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onProcessReady data: logPathsToUpload: "C:\\game\\logs"logPathsToUpload: "C:\\game\\error"port: 1935 16:50:53,544 INFO || - [HostProcessManager] nioEventLoopGroup-3-1 - Registered new process true, true,16:50:53,558 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onReportHealth received from /127.0.0.1:64247 with health status: healthy

考えられるエラーおよび警告メッセージには次のものがあります。

• Error: "ProcessReady did not find a process with pID: <process ID>! Was InitSDK() invoked?"• Warning: "Process state already exists for process with pID: <process ID>! Is ProcessReady(...)

invoked more than once?"3. AWS CLI の開始

ゲームサーバーが ProcessReady() を正常に呼び出したら、クライアント呼び出しを開始できます。別のコマンドプロンプトウィンドウを開き、AWS CLI ツールを開始します。AWS CommandLine Interface ツールを取得してインストールします。 AWS CLI ではデフォルトで GameLift ウェブサービスエンドポイントが使用されます。これは、次のリクエスト例に示すように、--endpoint-url パラメータを使用して各リクエストで Local エンドポイントによって上書きする必要があります。

aws gamelift describe-game-sessions --endpoint-url http://localhost:9080 --fleet-id fleet-123

AWS CLI コマンドプロンプトウィンドウでは、aws gamelift コマンドを使用するとAWS CLICommand Referenceに記載の応答が返されます。

4. ゲームセッションの作成.

AWS CLI を使用して、CreateGameSession() リクエストを送信します。リクエストは予期される構文に従う必要があります。Local では、FleetId パラメーターを任意の文字列 (^fleet-\S+) に設定できます。

aws gamelift create-game-session --endpoint-url http://localhost:9080 --maximum-player-session-count 2 --fleet-id fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d

Local のコマンドプロンプトウィンドウでは、GameLift Local がゲームサーバーにonStartGameSession コールバックを送信したことがログメッセージに示されます。ゲームセッションが正常に作成された場合、ゲームサーバーは ActivateGameSession を呼び出すことで応答します。

13:57:36,129 INFO || - [SDKInvokerImpl]Version

59

Page 66: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド統合をテストする

Thread-2 - Finished sending event to game server to start a game session: arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-ab423a4b-b827-4765-aea2-54b3fa0818b6. Waiting for ack response.13:57:36,143 INFO || - [SDKInvokerImpl] Thread-2 - Received ack response: true13:57:36,144 INFO || - [CreateGameSessionDispatcher] Thread-2 - GameSession with id: arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-ab423a4b-b827-4765-aea2-54b3fa0818b6 created13:57:36,227 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onGameSessionActivate received from: /127.0.0.1:60020 and ackRequest requested? true13:57:36,230 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onGameSessionActivate data: gameSessionId: "arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-abcdef12-3456-7890-abcd-ef1234567890"

AWS CLI ウィンドウで、GameLift はゲームセッション ID を含むゲームセッションオブジェクトで応答します。新しいゲームセッションのステータスが [Activating] になっていることに注目してください。ゲームサーバーが ActivateGameSession を呼び出すとステータスは [Active] に変わります。変更されたステータスを確認するには、AWS CLI で DescribeGameSessions() を呼び出します。

{ "GameSession": { "Status": "ACTIVATING", "MaximumPlayerSessionCount": 2, "FleetId": "fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d", "GameSessionId": "arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-abcdef12-3456-7890-abcd-ef1234567890", "IpAddress": "127.0.0.1", "Port": 1935 }}

ゲームサーバーおよびクライアントのテストプレイヤーのゲームへの接続など、ゲームの完全統合を確認するには、ゲームサーバーとクライアントの両方をローカルで実行することができます。これにより、ゲームクライアントから GameLift Local へのプログラムによる呼び出しをテストできます。次のアクションを確認できます。

• ゲームクライアントが、ゲームセッションの作成、既存のゲームセッションでの情報の取得、プレイヤーセッションの作成など、GameLift Local サービスへの AWS SDK リクエストを正常に行っています。

• プレイヤーがゲームセッションに参加しようとしたときにゲームサーバーがプレイヤーを正しく検証する。プレイヤーが検証されると、ゲームサーバーはプレイヤーデータ (実装されている場合) を取得できます。

• プレイヤーがゲームを終了すると、ゲームサーバーが接続中断を報告する。• ゲームサーバーがゲームセッションの終了を報告する。

1. GameLift Local の起動

コマンドプロンプトウィンドウを開き、GameLiftLocal.jar ファイルがあるディレクトリに移動して実行します。デフォルトでは、Local はポート 8080 でゲームクライアントからのリクエストをリッスンします。別のポート番号を指定するには、以下の例に示すように -p パラメーターを使用します。

./gamelift-local -p 9080

Version60

Page 67: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド統合をテストする

Local が起動すると、2 つのローカルサーバー (ゲームサーバーをリッスンしているサーバーとゲームクライアントまたは AWS CLI をリッスンしているサーバー) が起動したことがログに示されます。

2. ゲームサーバーを起動します。

GameLift が統合されたゲームサーバーをローカルで起動します。メッセージログの詳細については、「ゲームサーバーのテスト (p. 58)」を参照してください。

3. Local のゲームクライアントを設定して起動します。

GameLift Local サービスでゲームクライアントを使用するには、「クライアントまたはサービスでのGameLift のセットアップ (p. 50)」で説明されているように、ゲームクライアントのセットアップに以下の変更を加える必要があります。

• http://localhost:9080 などの Local エンドポイントをポイントするように、ClientConfiguration オブジェクトを変更します。

• ターゲットフリートの ID 値を設定します。Local では、実際のフリート ID は必要ありません。ターゲットフリートを、fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d などの任意の有効な文字列 (^fleet-\S+) に設定します。

• AWS 認証情報を設定します。Local では、実際の AWS 認証情報は必要ありません。アクセスキーとシークレットキーを任意の文字列に設定できます。

Local のコマンドプロンプトウィンドウで、ゲームクライアントを起動すると、GameLiftClient を初期化し、GameLift サービスと正常に通信していることがログメッセージに示されます。

4. GameLift サービスへのゲームクライアント呼び出しをテストします。

ゲームクライアントが以下の API 呼び出しのすべてまたはいずれかを正常に行っていることを確認します。

• CreateGameSession()• DescribeGameSessions()• CreatePlayerSession()• CreatePlayerSessions()• DescribePlayerSessions()

Local のコマンドプロンプトウィンドウでは、CreateGameSession() を呼び出した場合のみログメッセージが生成されます。ログメッセージは、GameLift Local がゲームサーバーにゲームセッションの開始を求め (onStartGameSession コールバック)、ゲームサーバーがゲームセッションを呼び出したときに ActivateGameSession が成功した場合に表示されます。AWS CLI ウィンドウでは、説明されているとおり、すべての API 呼び出しによりレスポンスまたはエラーメッセージが生成されます。

5. ゲームサーバーが新しいプレイヤー接続を検証していることを確認します。

ゲームセッションとプレイヤーセッションを作成したら、ゲームセッションへの直接接続を確立します。

Local のコマンドプロンプトウィンドウでは、ゲームサーバーが AcceptPlayerSession() リクエストを送信して新しいプレイヤー接続を検証したことが表示されます。AWS CLI を使用してDescribePlayerSessions() を呼び出した場合、プレイヤーセッションステータスが Reserved から Active に変わります。

6. ゲームサーバーがゲームおよびプレイヤーのステータスを GameLift サービスにレポートしていることを確認します。

GameLift がプレイヤーの要求を管理してメトリクスを正常にレポートするには、ゲームサーバーも各種ステータスを GameLift にレポートする必要があります。Local が以下のアクションに関連するイベ

Version61

Page 68: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームと リアルタイムサーバー の統合

ントを記録していることを確認します。AWS CLI を使用してステータス変更を追跡することもできます。

• プレイヤーがゲームセッションから切断する – GameLift Local ログメッセージには、ゲームサーバーが RemovePlayerSession() を呼び出すことが示されます。DescribePlayerSessions()への AWS CLI 呼び出しには、Active から Completed へのステータス変更が反映されます。さらに、DescribeGameSessions() を呼び出して、ゲームセッションの現在のプレイヤー数が 1 人減少したことを確認することもできます。

• ゲームセッションが終了する – GameLift Local ログメッセージには、ゲームサーバーがTerminateGameSession() を呼び出すことが示されます。DescribeGameSessions() へのAWS CLI 呼び出しには、Active から Terminated (または Terminating) へのステータス変更が反映されます。

• サーバープロセスが終了した – GameLift Local ログメッセージには、ゲームサーバーがProcessEnding() を呼び出すことが示されます。

Local でのバリエーションGameLift Local を使用する場合は、次の点に留意してください。

• GameLift ウェブサービスとは異なり、Local はサーバーのヘルスステータスを追跡せず、onProcessTerminate コールバックを開始しません。Local はゲームサーバーのヘルスレポートの記録を停止するだけです。

• AWS SDK への呼び出しの場合、フリート ID は検証されないため、パラメータ要件を満たす任意の文字列値 (^fleet-\S+) にすることができます。

• Local で作成されたゲームセッション ID の構造は異なります。ここに示すように、文字列 local が含まれています。

arn:aws:gamelift:local::gamesession/fleet-123/gsess-56961f8e-db9c-4173-97e7-270b82f0daa6

ゲームと Amazon GameLift リアルタイムサーバーの統合

リアルタイムサーバー Amazon GameLift は、複雑なカスタムメイドのゲームサーバーを必要としないゲーム用に設計された軽量サーバーソリューションを提供します。モバイルゲーム、ターン制のゲーム、メッセージベースのゲームなどのゲームは、すぐに使用可能な RealTime ゲームサーバーを利用できます。これらのサーバーは、最小限の設定で済み、ゲーム固有のロジックでカスタマイズすることもできます。

ヒント

リアルタイムサーバー サンプルゲーム使用などの Amazon GameLift 機能を検索する方法について確認する (p. 31)。

このセクションのトピックでは、GameLift で実行されている リアルタイムサーバー ゲームサーバーにマルチプレイヤーゲームクライアントを接続して使用する方法について説明します。ゲームを リアルタイムサーバー で稼働させるための完全なロードマップについては、「リアルタイムサーバー の開始方法 (p. 34)」を参照してください。

リアルタイムサーバー の詳細については以下を参照してください。

• リアルタイムサーバー の仕組み (p. 8)

ゲームと リアルタイムサーバー の統合の開始方法

Version62

Page 69: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームクライアントの統合

• リアルタイムサーバー のゲームクライアントの統合 (p. 63)• RealTime スクリプトの作成 (p. 67)

• リアルタイムサーバー の開始方法 (p. 34)

リアルタイムサーバー のゲームクライアントの統合このトピックでは、Amazon GameLift がホストするゲームセッションに参加できるようにゲームクライアントを準備する方法について説明します。

ゲームクライアントを準備するために必要な作業は 2 セットあります。

• 既存のゲームに関する情報の取得、マッチメーキングのリクエスト、新しいゲームセッションの開始、およびプレイヤー用のゲームセッションスロットの予約を行うようにゲームクライアントを設定します。

• ゲームクライアントが RealTime サーバーでホストされているゲームセッションに参加してメッセージを交換できるようにします。

ゲームセッションとプレイヤーセッションを検索または作成します。ゲームセッションを作成または開始し、FlexMatch マッチメーキングをリクエストし、プレイヤーセッションを作成してゲーム内のプレイヤーのスペースを予約するようにゲームクライアントを設定します。ベストプラクティスは、クライアントサービスを作成しておき、それを使用して、ゲームクライアントのアクションによって Amazon GameLift サービスがトリガーされたときに、そのサービスに直接リクエストを送信することです。その後、クライアントサービスは該当するレスポンスをゲームクライアントに中継します。

1. AWS SDK をクライアントサービスプロジェクトに追加し、Amazon GameLift クライアントを初期化して、フリートやキューでホスティングリソースを使用するように設定します。AWS SDK はいくつかの言語で使用可能です。Amazon GameLift SDK の「クライアントサービスの場合 (p. 27)」を参照してください。

2. クライアントサービスに GameLift 機能を追加します。詳細な手順については、「ゲームクライアントへの Amazon GameLift の追加 (p. 50)」と「FlexMatch マッチメーキングの追加 (p. 73)」を参照してください。ベストプラクティスは、ゲームセッションの配置を使用して新しいゲームセッションを作成することです。この方法では、GameLift の新しいゲームセッションをすばやくインテリジェントに配置できるだけでなく、プレイヤーのレイテンシーデータを使用してゲームのラグを最小限に抑えることができます。最低限、クライアントサービスは新しいゲームセッションをリクエストし、それに応じてゲームセッションデータを処理できる必要があります。また場合によっては、既存のゲームセッションを検索して情報を取得し、プレイヤーセッションをリクエストして、既存のゲームセッションで効果的にプレイヤースロットが予約されるようにする機能を追加する必要があります。

3. 接続情報をゲームクライアントに返します。バックエンドのゲームサービスに応じて、ゲームセッションオブジェクトとプレイヤーセッションオブジェクトを受け取る Amazon GameLift サービスにリクエストします。これらのオブジェクトには、Realtime Server で実行されているゲームセッションにゲームクライアントが接続するために必要な情報、特に接続の詳細 (IP アドレスおよびポート) とプレイヤーセッション ID が含まれています。

リアルタイムサーバー でゲームに接続するゲームクライアントが RealTime リアルタイムサーバー上のホスト型ゲームセッションに直接接続し、サーバーや他のプレイヤーとメッセージを交換できるようにします。

Version63

Page 70: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームクライアントの統合

1. RealTime クライアント SDK を入手して構築し、それをゲームクライアントプロジェクトに追加します。SDK の要件およびクライアントライブラリの構築方法については、README ファイルを参照してください。

2. 使用するクライアント/サーバー接続のタイプをクライアント設定で指定して Client() (p. 246) を呼び出します。

Note

TLS 証明書の生成が有効になっているセキュリティ保護ありのフリートで実行されているRealtime サーバーに接続する場合は、セキュリティ保護ありの接続タイプを指定する必要があります。

3. ゲームクライアントに次の機能を追加します。詳細については、「リアルタイムサーバー Client API(C#) リファレンス (p. 245)」を参照してください。• ゲームに接続する/ゲームから切断する

• Connect() (p. 247)• Disconnect() (p. 248)

• ターゲットの受信者にメッセージを送信する• SendMessage() (p. 248)

• メッセージを受信して処理する• OnDataReceived() (p. 251)

• プレイヤーグループに参加する/プレイヤーグループから離脱する• JoinGroup() (p. 249)• RequestGroupMembership() (p. 250)• LeaveGroup() (p. 249)

4. 必要に応じてクライアントコールバック用のイベントハンドラを設定します。「リアルタイムサーバークライアント API (C#) リファレンス: 非同期コールバック (p. 250)」を参照してください。

TLS 証明書の生成が有効になっているリアルタイムフリートを使用する場合、サーバーは TLS 証明書を使用して自動的に認証されます。TCP および UDP トラフィックは、トランスポートレイヤーセキュリティを提供するために、転送時に暗号化されます。TCP トラフィックは TLS 1.2 を使用して暗号化され、UDPトラフィックは DTLS 1.2 を使用して暗号化されます。

ゲームクライアントの例基本的な Realtime Client (C#)

この例は、基本的なゲームクライアントと RealTime Client SDK (C#) の統合を示しています。図に示すように、この例では、RealTime クライアントオブジェクトを初期化し、イベントハンドラを設定します。またクライアントサイドコールバックを実装し、RealTime サーバーに接続して、メッセージを送信して切断します。

using System;using System.Text;using Aws.GameLift.Realtime;using Aws.GameLift.Realtime.Event;using Aws.GameLift.Realtime.Types;

namespace Example{ /** * An example client that wraps the GameLift Realtime client SDK * * You can redirect logging from the SDK by setting up the LogHandler as such: * ClientLogger.LogHandler = (x) => Console.WriteLine(x);

Version64

Page 71: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームクライアントの統合

* */ class RealTimeClient { public Aws.GameLift.Realtime.Client Client { get; private set; } // An opcode defined by client and your server script that represents a custom message type private const int MY_TEST_OP_CODE = 10;

/// Initialize a client for GameLift Realtime and connect to a player session. /// <param name="endpoint">The DNS name that is assigned to Realtime server</param> /// <param name="remoteTcpPort">A TCP port for the Realtime server</param> /// <param name="listeningUdpPort">A local port for listening to UDP traffic</param> /// <param name="connectionType">Type of connection to establish between client and the Realtime server</param> /// <param name="playerSessionId">The player session ID that is assigned to the game client for a game session </param> /// <param name="connectionPayload">Developer-defined data to be used during client connection, such as for player authentication</param> public RealTimeClient(string endpoint, int remoteTcpPort, int listeningUdpPort, ConnectionType connectionType, string playerSessionId, byte[] connectionPayload) { // Create a client configuration to specify a secure or unsecure connection type // Best practice is to set up a secure connection using the connection type RT_OVER_WSS_DTLS_TLS12. ClientConfiguration clientConfiguration = new ClientConfiguration() { // C# notation to set the field ConnectionType in the new instance of ClientConfiguration ConnectionType = connectionType };

// Create a Realtime client with the client configuration Client = new Client(clientConfiguration);

// Initialize event handlers for the Realtime client Client.ConnectionOpen += OnOpenEvent; Client.ConnectionClose += OnCloseEvent; Client.GroupMembershipUpdated += OnGroupMembershipUpdate; Client.DataReceived += OnDataReceived;

// Create a connection token to authenticate the client with the Realtime server // Player session IDs can be retrieved using AWS SDK for GameLift ConnectionToken connectionToken = new ConnectionToken(playerSessionId, connectionPayload);

// Initiate a connection with the Realtime server with the given connection information Client.Connect(endpoint, remoteTcpPort, listeningUdpPort, connectionToken); }

public void Disconnect() { if (Client.Connected) { Client.Disconnect(); } }

public bool IsConnected() {

Version65

Page 72: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームクライアントの統合

return Client.Connected; }

/// <summary> /// Example of sending to a custom message to the server. /// /// Server could be replaced by known peer Id etc. /// </summary> /// <param name="intent">Choice of delivery intent ie Reliable, Fast etc. </param> /// <param name="payload">Custom payload to send with message</param> public void SendMessage(DeliveryIntent intent, string payload) { Client.SendMessage(Client.NewMessage(MY_TEST_OP_CODE) .WithDeliveryIntent(intent) .WithTargetPlayer(Constants.PLAYER_ID_SERVER) .WithPayload(StringToBytes(payload))); }

/** * Handle connection open events */ public void OnOpenEvent(object sender, EventArgs e) { }

/** * Handle connection close events */ public void OnCloseEvent(object sender, EventArgs e) { }

/** * Handle Group membership update events */ public void OnGroupMembershipUpdate(object sender, GroupMembershipEventArgs e) { }

/** * Handle data received from the Realtime server */ public virtual void OnDataReceived(object sender, DataReceivedEventArgs e) { switch (e.OpCode) { // handle message based on OpCode default: break; } }

/** * Helper method to simplify task of sending/receiving payloads. */ public static byte[] StringToBytes(string str) { return Encoding.UTF8.GetBytes(str); }

/** * Helper method to simplify task of sending/receiving payloads. */ public static string BytesToString(byte[] bytes) { return Encoding.UTF8.GetString(bytes);

Version66

Page 73: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドRealTime スクリプトのカスタマイズ

} }}

RealTime スクリプトの作成ゲームに リアルタイムサーバー を使用するには、リアルタイムサーバー のフリートを設定してオプションでカスタマイズするためのスクリプト (JavaScript コードの形式) を提供する必要があります。このトピックでは、RealTime スクリプトを作成するための主なステップについて説明します。スクリプトの準備ができたら、Amazon GameLift サービスにアップロードし、それを使用してフリートを作成します (「リアルタイムサーバー スクリプトを Amazon GameLift にアップロードする (p. 101)」を参照)。

リアルタイムサーバー で使用するスクリプトを準備するには、RealTime スクリプトに以下の機能を追加します。

ゲームセッションのライフサイクルを管理する (必須)最低限、RealTime スクリプトに Init() 関数を含めて、この関数で、RealTime サーバーがゲームセッションの開始準備をするようにします。新しいゲームセッションを引き続きフリートで開始できるように、ゲームセッションを終了する方法も提供することを強くお勧めします。

Init() コールバック関数が呼び出されると、RealTime セッションオブジェクトを渡されます。このセッションオブジェクトには、RealTime サーバーのインターフェイスが含まれています。このインターフェイスの詳細については、「リアルタイムサーバー インターフェイス (p. 258)」を参照してください。

ゲームセッションを正常に終了するには、スクリプトは RealTime サーバーのsession.processEnding 関数も呼び出す必要があります。この関数には、セッションをいつ終了するかを決定するための何らかのメカニズムが必要です。スクリプト例のコードは、プレイヤーの接続を確認し、指定された時間内にセッションに接続しているプレイヤーがいなければゲームセッションの終了をトリガーする、シンプルなメカニズムを示しています。

基本的な設定の リアルタイムサーバー -- サーバープロセスの開始と終了 -- 基本的にステートレスな中継サーバーとして動作します。RealTime サーバーは、ゲームに接続されているゲームクライアント間でメッセージとゲームデータを中継しますが、データを処理したりロジックを実行したりするための独立したアクションは行いません。ゲームのニーズに応じて、ゲームイベントなどのメカニズムによってトリガーされるゲームロジックをオプションで追加することができます。

サーバー側のゲームロジックを追加する (オプション)オプションで RealTime スクリプトにゲームロジックを追加できます。たとえば、以下のいずれかまたはすべてを実行できます。スクリプト例のコードは実例を提供しています。「Amazon GameLift リアルタイムサーバー スクリプトリファレンス (p. 256)」を参照してください。

• イベント駆動型のロジックを追加する。 クライアントサーバーイベントに応答するためのコールバック関数を実装します。コールバックの完全なリストについては、「

RealTime スクリプトにこれらのコールバックを実装することで、イベントに応答するためのカスタムロジックを提供できます。

init

RealTime サーバーを初期化し、Realtime Server インターフェイスを受け取ります。

構文

init(rtsession)

Version67

Page 74: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドRealTime スクリプトのカスタマイズ

onMessage

受信したメッセージがサーバーに送信されたときに呼び出されます。

構文

onMessage(gameMessage)

onHealthCheck

ゲームセッションの状態を設定するために呼び出されます。デフォルトでは、ヘルスステータスは正常 (true) です。このコールバックは、カスタムヘルスチェックを実行してステータスを返すために実装できます。

構文

onHealthCheck()

onStartGameSession

新しいゲームセッションが開始されてゲームセッションオブジェクトを渡されると呼び出されます。

構文

onStartGameSession(session)

onProcessTerminate

サーバープロセスが Amazon GameLift サービスによって終了中になると呼び出されます。これは、ゲームセッションから正常に終了するためのトリガーとして機能します。processEnding(). を呼び出す必要はありません

構文

onProcessTerminate()

onPlayerConnect

プレイヤーが接続をリクエストし、初期検証に合格したときに呼び出されます。

構文

onPlayerConnect(connectMessage)

onPlayerAccepted

プレイヤーの接続が受け入れられると呼び出されます。

構文

onPlayerAccepted(player)

Version68

Page 75: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドRealTime スクリプトのカスタマイズ

onPlayerDisconnect

プレイヤーが切断リクエストを送信するか、または他の方法でゲームセッションから切断したときに呼び出されます。

構文

onPlayerDisconnect(peerId)

onProcessStarted

サーバープロセスの起動時に呼び出されます。このコールバックにより、スクリプトはゲームセッションをホストするための準備に必要なカスタムタスクを実行できます。

構文

onProcessStarted(args)

onSendToPlayer

あるプレイヤーから別のプレイヤーに配信されるメッセージがサーバー上で受信されたときに呼び出されます。このプロセスはメッセージが配信される前に実行されます。

構文

onSendToPlayer(gameMessage)

onSendToGroup

グループに配信されるメッセージが 1 人のプレイヤーからサーバー上で受信されたときに呼び出されます。このプロセスはメッセージが配信される前に実行されます。

構文

onSendToGroup(gameMessage))

onPlayerJoinGroup

プレイヤーがグループに参加するためのリクエストを送信したときに呼び出されます。

構文

onPlayerJoinGroup(groupId, peerId)

onPlayerLeaveGroup

プレイヤーがグループから脱退するためのリクエストを送信したときに呼び出されます。

構文

onPlayerLeaveGroup(groupId, peerId)

Version69

Page 76: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドRealTime スクリプトのカスタマイズ

(p. 256)」を参照してください。• サーバーにメッセージを送信してロジックを起動する。 ゲームクライアントからサーバーに送信

されるメッセージ専用に一連のオペレーションコードを作成し、受信を処理するための関数を追加します。コールバック onMessage で gameMessage を使用してメッセージの内容を解析します(「gameMessage.opcode (p. 261)」を参照)。

リアルタイムサーバー スクリプト例この例は、リアルタイムサーバー をデプロイするために必要な基本スクリプトといくつかのカスタムロジックを示しています。また、必要な Init() 関数を含み、プレイヤーの接続のない期間に基づいてゲームセッションの終了をトリガーするタイマーメカニズムを使用しています。さらに、コールバックの実装など、カスタムロジック用のフックもいくつか含まれています。

// Example Realtime Server Script'use strict';

// Example override configurationconst configuration = { pingIntervalTime: 30000};

// Timing mechanism used to trigger end of game session. Defines how long, in milliseconds, between each tick in the example tick loopconst tickTime = 1000;

// Defines how to long to wait in Seconds before beginning early termination check in the example tick loopconst minimumElapsedTime = 120;

var session; // The Realtime server session objectvar logger; // Log at appropriate level via .info(), .warn(), .error(), .debug()var startTime; // Records the time the process startedvar activePlayers = 0; // Records the number of connected playersvar onProcessStartedCalled = false; // Record if onProcessStarted has been called

// Example custom op codes for user-defined messages// Any positive op code number can be defined here. These should match your client code.const OP_CODE_CUSTOM_OP1 = 111;const OP_CODE_CUSTOM_OP1_REPLY = 112;const OP_CODE_PLAYER_ACCEPTED = 113;const OP_CODE_DISCONNECT_NOTIFICATION = 114;

// Example groups for user defined groups// Any positive group number can be defined here. These should match your client code.const RED_TEAM_GROUP = 1;const BLUE_TEAM_GROUP = 2;

// Called when game server is initialized, passed server's object of current sessionfunction init(rtSession) { session = rtSession; logger = session.getLogger();}

// On Process Started is called when the process has begun and we need to perform any// bootstrapping. This is where the developer should insert any code to prepare// the process to be able to host a game session, for example load some settings or set state//// Return true if the process has been appropriately prepared and it is okay to invoke the// GameLift ProcessReady() call.

Version70

Page 77: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドRealTime スクリプトのカスタマイズ

function onProcessStarted(args) { onProcessStartedCalled = true; logger.info("Starting process with args: " + args); logger.info("Ready to host games...");

return true;}

// Called when a new game session is started on the processfunction onStartGameSession(gameSession) { // Complete any game session set-up

// Set up an example tick loop to perform server initiated actions startTime = getTimeInS(); tickLoop();}

// Handle process termination if the process is being terminated by GameLift// You do not need to call ProcessEnding herefunction onProcessTerminate() { // Perform any clean up}

// Return true if the process is healthyfunction onHealthCheck() { return true;}

// On Player Connect is called when a player has passed initial validation// Return true if player should connect, false to rejectfunction onPlayerConnect(connectMsg) { // Perform any validation needed for connectMsg.payload, connectMsg.peerId return true;}

// Called when a Player is accepted into the gamefunction onPlayerAccepted(player) { // This player was accepted -- let's send them a message const msg = session.newTextGameMessage(OP_CODE_PLAYER_ACCEPTED, player.peerId, "Peer " + player.peerId + " accepted"); session.sendReliableMessage(msg, player.peerId); activePlayers++;}

// On Player Disconnect is called when a player has left or been forcibly terminated// Is only called for players that actually connected to the server and not those rejected by validation// This is called before the player is removed from the player listfunction onPlayerDisconnect(peerId) { // send a message to each remaining player letting them know about the disconnect const outMessage = session.newTextGameMessage(OP_CODE_DISCONNECT_NOTIFICATION, session.getServerId(), "Peer " + peerId + " disconnected"); session.getPlayers().forEach((player, playerId) => { if (playerId != peerId) { session.sendReliableMessage(outMessage, peerId); } }); activePlayers--;}

// Handle a message to the serverfunction onMessage(gameMessage) { switch (gameMessage.opCode) { case OP_CODE_CUSTOM_OP1: { // do operation 1 with gameMessage.payload for example sendToGroup

Version71

Page 78: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドRealTime スクリプトのカスタマイズ

const outMessage = session.newTextGameMessage(OP_CODE_CUSTOM_OP1_REPLY, session.getServerId(), gameMessage.payload); session.sendGroupMessage(outMessage, RED_TEAM_GROUP); break; } }}

// Return true if the send should be allowedfunction onSendToPlayer(gameMessage) { // This example rejects any payloads containing "Reject" return (!gameMessage.getPayloadAsText().includes("Reject"));}

// Return true if the send to group should be allowed// Use gameMessage.getPayloadAsText() to get the message contentsfunction onSendToGroup(gameMessage) { return true;}

// Return true if the player is allowed to join the groupfunction onPlayerJoinGroup(groupId, peerId) { return true;}

// Return true if the player is allowed to leave the groupfunction onPlayerLeaveGroup(groupId, peerId) { return true;}

// A simple tick loop example// Checks to see if a minimum amount of time has passed before seeing if the game has endedasync function tickLoop() { const elapsedTime = getTimeInS() - startTime; logger.info("Tick... " + elapsedTime + " activePlayers: " + activePlayers);

// In Tick loop - see if all players have left early after a minimum period of time has passed // Call processEnding() to terminate the process and quit if ( (activePlayers == 0) && (elapsedTime > minimumElapsedTime)) { logger.info("All players disconnected. Ending game"); const outcome = await session.processEnding(); logger.info("Completed process ending with: " + outcome); process.exit(0); } else { setTimeout(tickLoop, tickTime); }}

// Calculates the current time in secondsfunction getTimeInS() { return Math.round(new Date().getTime()/1000);}

exports.ssExports = { configuration: configuration, init: init, onProcessStarted: onProcessStarted, onMessage: onMessage, onPlayerConnect: onPlayerConnect, onPlayerAccepted: onPlayerAccepted, onPlayerDisconnect: onPlayerDisconnect, onSendToPlayer: onSendToPlayer, onSendToGroup: onSendToGroup, onPlayerJoinGroup: onPlayerJoinGroup,

Version72

Page 79: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドFlexMatch マッチメーキングの追加

onPlayerLeaveGroup: onPlayerLeaveGroup, onStartGameSession: onStartGameSession, onProcessTerminate: onProcessTerminate, onHealthCheck: onHealthCheck};

FlexMatch マッチメーキングの追加GameLift FlexMatch を使って、ゲームにプレイヤーのマッチメイキング機能を追加します。FlexMatchは、カスタムゲームサーバーと リアルタイムサーバー のマネージド GameLift ソリューションで使用できます 。

FlexMatch では、マッチメーキングサービスとカスタマイズ可能なルールエンジンをペアリングします。これにより、ゲームの適切なプレイヤー属性とゲームモードに基づいてプレイヤー間のマッチング方法を設計できます。また、FlexMatch でプレイヤーグループを編成してゲーム内に配置するための仕組みを管理できます。

FlexMatch ではキュー機能を活用できます。マッチングを作成すると、マッチングの詳細が FlexMatch から指定のキューに渡されます。キューでは、Amazon GameLift フリートで利用可能なホストリソースを検索し、マッチングの新しいゲームセッションを開始します。

このセクションのトピックでは、ゲームサーバーとゲームクライアントにマッチメイキングサポートを追加する方法について説明します。ゲームのマッチメーカーを作成する方法については、「AmazonGameLift FlexMatch マッチメーカーの設定 (p. 145)」を参照してください。FlexMatch の仕組みの詳細については、「Amazon GameLift FlexMatch の仕組み (p. 14)」を参照してください。

トピック• FlexMatch 統合のロードマップ (p. 73)• ゲームクライアントへの FlexMatch の追加 (p. 74)• ゲームサーバーへの FlexMatch の追加 (p. 78)• FlexMatch を使用した既存のゲームのバックフィル (p. 80)

FlexMatch 統合のロードマップFlexMatch は、カスタムゲームサーバーおよび リアルタイムサーバー のマネージド GameLift ソリューションで使用できます。FlexMatch マッチメーキングをゲームに追加するには、以下のタスクを行います。

• マッチメーカーを設定します。 マッチメーカーは、プレイヤーからマッチメーキングリクエストを受信して処理します。定義されたルールのセットに基づいてプレイヤーをグループ化し、マッチングが成功するごとに、新しいゲームセッションとプレイヤーセッションを作成します。マッチメーカーをセットアップするには、以下の手順を実行します。• ルールセットを作成します。 ルールセットはマッチメーカーに有効なマッチを作成する方法を指定し

ます。チーム構造を指定し、マッチングに含めるプレイヤーの評価方法を指定します。以下のトピックを参照してください。• FlexMatch ルールセットの作成 (p. 149)• FlexMatch ルールセットの例 (p. 156)

• ゲームセッションキューを作成します。 キューは、各マッチングの最適なリージョンを見つけ、そのリージョンで新しいゲームセッションを作成します。既存のキューを使用するか、マッチメイキング用に新しいキューを作成します。次のトピックを参照してください。• キューの作成 (p. 141)

Version73

Page 80: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームクライアントへの FlexMatch の追加

• 通知を設定します (オプション)。 マッチメイキングリクエストは非同期であるため、リクエストのステータスを追跡する方法が必要です。その手段としては、通知が最適です。次のトピックを参照してください。• FlexMatch イベント通知の設定 (p. 172)

• マッチメーカーを設定します。 ルールセット、キュー、および通知ターゲットの準備ができたら、マッチメーカーの設定を作成します。以下のトピックを参照してください。• FlexMatch マッチメーカーの設計 (p. 146)• マッチメーキング設定の作成 (p. 147)

• FlexMatch をゲームクライアントサービスに統合します。 マッチメイキングを使用して新しいゲームセッションを開始するために、ゲームクライアントサービスに機能を追加します。マッチメイキングのリクエストでは、使用するマッチメーカーを指定し、マッチングに必要なプレイヤーデータを提供します。次のトピックを参照してください。• ゲームクライアントへの FlexMatch の追加 (p. 74)

• FlexMatch をゲームサーバーに統合します。 マッチメイキングを通して作成されたゲームセッションを開始するために、ゲームサーバーに機能を追加します。このタイプのゲームセッションのリクエストには、プレイヤーとチームの割り当てを含むマッチング固有の情報が含まれます。ゲームサーバーは、ゲームセッションをマッチングのために構築する際に、この情報にアクセスして使用する必要があります。次のトピックを参照してください。• ゲームサーバーへの FlexMatch の追加 (p. 78)

• FlexMatch バックフィルを設定します (オプション)。 既存のゲームの空きプレイヤースロットを埋める追加のプレイヤーマッチングをリクエストします。自動バックフィルを有効にして、GameLift でバックフィルリクエストを管理することができます。または、ゲームクライアントまたはゲームサーバーに機能を追加してバックフィルを手動で管理することにより、バックフィルを手動で管理できます。次のトピックを参照してください。• FlexMatch を使用した既存のゲームのバックフィル (p. 80)

Note

現在、FlexMatch バックフィルは リアルタイムサーバー を使用しているゲームで使用することはできません。

ゲームクライアントへの FlexMatch の追加このトピックでは、ゲームクライアントに FlexMatch マッチメーキングサポートを追加する方法について説明します。 FlexMatch は、カスタムゲームサーバーおよび リアルタイムサーバー に対するマネージドGameLift ソリューションを使用して利用可能です。

FlexMatch とゲームのカスタムマッチメーカーのセットアップ方法の詳細については、以下のトピックを参照してください。

• Amazon GameLift FlexMatch の仕組み (p. 14)• Amazon GameLift FlexMatch マッチメーカーの設定 (p. 145)• FlexMatch 統合のロードマップ (p. 73)

FlexMatch をゲームクライアントで有効にするには、ゲームクライアントプロジェクトを準備し、次の機能を追加する必要があります。

• 1 人以上のプレイヤーのマッチメイキングをリクエストします。• マッチメーキングリクエストのステータスを追跡する。• プレイヤーによるマッチング案の承諾をリクエストする。• ゲームセッションが新しいマッチングに対して作成されたら、プレイヤー接続情報を取得してゲームに

参加します。

Version74

Page 81: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームクライアントへの FlexMatch の追加

マッチメイキング用クライアントサービスの準備ゲームクライアントが直接ではなく、クライアント側のゲームサービスを通してマッチメイキングリクエストを作成することを強くお勧めします。信頼されたソースを使用することで、ハッキングの試みや偽のプレイヤーデータからより簡単に保護できます。ゲームがセッションディレクトリサービスを使用している場合、これはマッチメイキングリクエストを処理するための優れたオプションです。

クライアントサービスを準備するには、次のタスクを実行します。

• GameLift API を追加する。 クライアントサービスは AWS SDK の一部である GameLift API の機能を使用します。AWS SDK の詳細と最新バージョンのダウンロード方法については、「クライアントサービスの場合 (p. 27)」を参照してください。ゲームクライアントサービスプロジェクトにこの SDK を追加します。

• マッチメイキングチケットシステムをセットアップする。 すべてのマッチメイキングリクエストに、一意のチケット ID を割り当てる必要があります。一意の ID を生成し、それを新しいマッチングリクエストに割り当てるメカニズムが必要です。チケット ID には、最大 128 文字の文字列形式を使用できます。

• マッチメーカー情報を取得する。 使用する予定のマッチメイキング設定の名前を取得します。また、マッチメーカーの必須プレイヤー属性のリストも必要です。この属性は、マッチメーカーのルールセットで定義されています。

• プレイヤーデータを取得します。 各プレイヤーの関連データを取得する方法を設定します。たとえば、プレイヤーがゲームにスロットされる可能性が高いリージョンごとのプレイヤー ID、プレイヤー属性値、および更新されたレイテンシーデータなどがあります。

• (オプション) マッチバックフィルを有効にする。 既存のマッチングされたゲームをバックフィルする方法を決定します。マッチメーカーのバックフィルモードが [手動] に設定されている場合、バックフィルサポートをゲームに追加できます。バックフィルモードが [自動] に設定されている場合、個々のゲームセッションに対して設定をオフにする方法が必要になる可能性があります。マッチングバックフィルの管理の詳細については、「FlexMatch を使用した既存のゲームのバックフィル (p. 80)」を参照してください。

プレイヤーのマッチメーキングのリクエストクライアントサービスにコードを追加し、FlexMatch マッチメーカーへのマッチメイキングリクエストを管理します。

マッチメイキングリクエストを作成します。

• GameLift API StartMatchmaking を呼び出します。各リクエストには、以下の情報が必要です。

マッチメーカー

リクエストに使用するマッチメイキング設定の名前。FlexMatch は各リクエストを指定されたマッチメーカーのプールに配置し、リクエストはマッチメーカーが設定されている方法に基づいて処理されます。これには、プレイヤーにマッチングの承諾をリクエストするかどうか、生成されたゲームセッションを配置する際にどのようなキューを使用するかなど、強制的な時間制限が含まれます。マッチメーカーとルール設定の詳細については、「FlexMatch マッチメーカーの設計 (p. 146)」を参照してください。

チケット ID

リクエストに割り当てられている一意のチケット ID。イベントや通知などリクエストに関連するものすべてが、チケット ID を参照します。

プレイヤーデータ

マッチングを作成する対象のプレイヤーのリスト。リクエスト内のプレイヤーのいずれかが、マッチルールと最小レイテンシーに基づいてマッチ要件を満たしていない場合、マッチメイキングリクエストが成功することはありません。マッチリクエストには最大 10 人のプレイヤーを含

Version75

Page 82: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームクライアントへの FlexMatch の追加

めることができます。リクエストに複数のプレイヤーがいる場合、FlexMatch は 1 つのマッチを作成し、すべてのプレイヤーを同じチーム (ランダムに選択) に割り当てようとします。リクエストに含まれるプレイヤーが多すぎて、マッチチームの 1 つに収まらない場合、リクエストは一致しません。たとえば、2v2 のマッチ (2 人のプレイヤーで構成される 2 つのチーム) を作成するようにマッチメーカーを設定した場合は、3 人以上のプレイヤーを含むマッチメイキングリクエストを送信することはできません。

Note

プレイヤー (プレーヤー ID によって識別) は、一度に 1 つのアクティブなマッチメーキングリクエストにのみ含めることができます。プレイヤーの新しいリクエストを作成すると、同じプレイヤー ID のアクティブなマッチメイキングチケットは自動的にキャンセルされます。

リストされたプレイヤーごとに、次のデータを含めます。• プレイヤー ID – プレイヤーごとに一意のプレイヤー ID が必要です。「プレイヤー ID の生

成 (p. 54)」を参照してください。• プレイヤー属性 – 使用されているマッチメーカーがプレイヤー属性を呼び出した場合、リク

エストは各プレイヤーにそれらの属性を提供する必要があります。必須のプレイヤー属性は、マッチメーカーのルールセット内で定義され、属性のデータ型も指定されます。プレイヤー属性は、ルールセットで属性のデフォルト値が指定された場合のみ、オプションとなります。マッチングリクエストが必要なプレイヤー属性をすべてのプレイヤーに提供しない場合、マッチメイキングリクエストは成功しません。マッチメーカーのルールセットおよびプレイヤー属性の詳細については、「the section called “ルールセットの作成” (p. 149)」を参照してください。

• プレイヤーレイテンシー – 使用されているマッチメーカーにプレイヤーレイテンシールールがある場合、リクエストは各プレイヤーのレイテンシーを報告する必要があります。プレイヤーレイテンシーデータは、プレイヤーごとに 1 つ以上の値が表示されたリストです。これは、マッチメーカーのキューのリージョンで、プレイヤーに発生するレイテンシーを表しています。プレイヤーのレイテンシー値がリクエストに含まれていない場合、プレイヤーがマッチングされることはなく、リクエストは失敗します。

マッチングリクエストの詳細を取得する。

• マッチングリクエストが送信されたら、DescribeMatchmaking をリクエストのチケット ID とともに呼び出すことによって、リクエストの詳細を表示できます。この呼び出しは、現在のステータスを含むリクエスト情報を返します。リクエストが正常に完了すると、チケットにはゲームクライアントがマッチングに接続するために必要な情報も含まれます。

マッチングリクエストをキャンセルする。

• マッチングリクエストは、StopMatchmaking をリクエストのチケット ID とともに呼び出すことによって、いつでもキャンセルできます。

マッチメーキングリクエストのステータスを追跡するクライアントサービスにコードを追加し、すべてのマッチメイキングリクエストのステータスを追跡します。必要に応じて応答します。ステータスを追跡するためのオプションがいくつかあります。

イベント通知

マッチメイキングプロセスに関して GameLift がマッチメイキングプロセスのために発行するイベントを追跡するために通知を設定します。これはシンプルで設定しやすく、リソースを効率的に使用できるため、追跡方法としてお勧めします。通知は、直接設定するか、SNS トピックを作成して設定するか、CloudWatch イベントを使用して設定することができます。通知の設定の詳細については、

Version76

Page 83: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームクライアントへの FlexMatch の追加

「FlexMatch イベント通知の設定 (p. 172)」を参照してください。通知を設定したら、必要に応じてイベントと応答を検出するために、クライアントサービスでリスナーを追加します。また、30 秒たっても通知を受信しない場合は、ステータス更新をポーリングすることをお勧めします。

継続的なポーリング

DescribeMatchmaking をリクエストのチケット ID とともに呼び出して、現在のステータスを含むマッチメイキングリクエストチケットを取得します。最大で 10 秒に 1 回ポーリングすることをお勧めします。

プレイヤーの承諾をリクエストするプレイヤーの承諾が有効になっているマッチメーカーを使用している場合、クライアントサービスにコードを追加し、プレイヤーの承諾プロセスを管理します。

マッチング案のプレイヤー承諾をリクエストする。

1. マッチング案がプレイヤーの承諾を必要とするときを検出する。 マッチメイキングチケットをモニタリングし、ステータスの REQUIRES_ACCEPTANCE への変更を検出します。通知をモニタリングしている場合、このステータスに変わったときに FlexMatch イベントMatchmakingRequiresAcceptance がトリガーされます。

2. すべてのプレイヤーから承諾を得る。 提案されたマッチング詳細を、マッチメイキングチケットで各プレイヤーに提示するメカニズムを作成します。プレイヤーは、マッチング案の承諾または拒否を示すことができる必要があります。マッチングの詳細は、DescribeMatchmaking を呼び出して取得できます。マッチメーカーがマッチング案を取り消して続行する前に、プレイヤーには返答のために限られた時間が与えられます。

3. FlexMatch へのプレイヤーの応答のレポート AcceptMatch を呼び出し、プレイヤーの承諾または拒否の応答を報告します。マッチメーキングリクエストのすべてのプレイヤーが承諾した場合にのみマッチングが進められます。

4. 承諾されなかったチケットを処理する。 マッチング案でプレイヤーがマッチングを拒否するか、承諾の制限時間内に応答しなかった場合、リクエストは失敗します。

マッチングに接続する正常に完了したマッチング (ステータス COMPLETED またはイベント MatchmakingSucceeded) を処理するために、クライアントサービスにコードを追加します。これにはマッチングのプレイヤーへの通知と、ゲームクライアントへ接続情報の提供が含まれます。

マッチメイキングリクエストが完了すると、接続情報がマッチメイキングチケットに追加されます。DescribeMatchmaking を呼び出して、完了したマッチメイキングチケットを取得します。接続情報には、ゲームセッションの IP アドレスとポート、および各プレイヤー ID に対するプレイヤーセッション IDが含まれます。詳細については、「GameSessionConnectionInfo」を参照してください。

ゲームクライアントはこの情報を使用して、マッチングをホストしているゲームセッションに直接接続します。マッチングされたゲームセッションの接続リクエストには、プレイヤーセッション ID とプレイヤーID が含まれている必要があります。このデータは接続されたプレイヤーを、チームの割り当てを含むゲームセッションのマッチングデータに関連付けます (「GameSession」を参照)。

StartMatchmaking リクエストのサンプルこれらのコードスニペットは、さまざまなマッチメーカーに対するマッチメイキングリクエストを構築します。説明されているように、リクエストではマッチメーカーのルールセットの定義に従い、使用されているマッチメーカーで必要なプレイヤー属性を提供する必要があります。提供された属性では、ルールセット内で定義されている同じデータ型、数値 (N)、または文字列 (S) を使用する必要があります。

# Uses matchmaker for two-team game mode based on player skill leveldef start_matchmaking_for_cowboys_vs_aliens(config_name, ticket_id, player_id, skill, team):

Version77

Page 84: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームサーバーへの FlexMatch の追加

response = gamelift.start_matchmaking( ConfigurationName=config_name, Players=[{ "PlayerAttributes": { "skill": {"N": skill} }, "PlayerId": player_id, "Team": team }], TicketId=ticket_id)

# Uses matchmaker for monster hunter game mode based on player skill leveldef start_matchmaking_for_players_vs_monster(config_name, ticket_id, player_id, skill, is_monster): response = gamelift.start_matchmaking( ConfigurationName=config_name, Players=[{ "PlayerAttributes": { "skill": {"N": skill}, "desiredSkillOfMonster": {"N": skill}, "wantsToBeMonster": {"N": int(is_monster)} }, "PlayerId": player_id }], TicketId=ticket_id)

# Uses matchmaker for brawler game mode with latencydef start_matchmaking_for_three_team_brawler(config_name, ticket_id, player_id, skill, role): response = gamelift.start_matchmaking( ConfigurationName=config_name, Players=[{ "PlayerAttributes": { "skill": {"N": skill}, "character": {"S": [role]}, }, "PlayerId": player_id, "LatencyInMs": { "us-west-2": 20} }], TicketId=ticket_id)

# Uses matchmaker for multiple game modes and maps based on player experiencedef start_matchmaking_for_multi_map(config_name, ticket_id, player_id, skill, maps, modes): response = gamelift.start_matchmaking( ConfigurationName=config_name, Players=[{ "PlayerAttributes": { "experience": {"N": skill}, "gameMode": {"SL": modes}, "mapPreference": {"SL": maps} }, "PlayerId": player_id }], TicketId=ticket_id)

ゲームサーバーへの FlexMatch の追加このトピックでは、ゲームサーバーに FlexMatch マッチメイキングサポートを追加する方法について説明します。FlexMatch は、カスタムゲームサーバーおよび リアルタイムサーバー 向けにマネージドGameLift ソリューションで使用できます。FlexMatch をゲームに追加する方法の詳細については、以下のトピックを参照してください。

• Amazon GameLift FlexMatch の仕組み (p. 14)

Version78

Page 85: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームサーバーへの FlexMatch の追加

• FlexMatch 統合のロードマップ (p. 73)

このトピックの情報は、「ゲームサーバーへの Amazon GameLift の追加 (p. 44)」で説明されているとおりに、GameLift Server SDK がゲームサーバープロジェクトに正常に統合されていることを前提としています。この作業を完了すると、必要なほとんどのメカニズムが整います。このトピックのセクションでは、FlexMatch でセットアップしたゲームの処理に必要な残りの作業について説明します。

マッチメーキング用のゲームサーバーの設定マッチングされるゲームを処理するようにゲームサーバーを設定するには、次のタスクを完了します。

1. マッチメーキングで作成されたゲームセッションを開始します。 新しいゲームセッションをリクエストするために、GameLift は onStartGameSession() リクエストをゲームセッションオブジェクトと共にゲームセッションに送信します (「GameSession」を参照)。ゲームサーバーは、カスタマイズされたゲームデータを含むゲームセッション情報を使用して、リクエストされたゲームセッションを開始します。詳細については、「ゲームセッションを開始する (p. 46)」を参照してください。

マッチングされたゲームの場合、ゲームセッションオブジェクトには一連のマッチメーカーデータも含まれます。マッチメーカーデータには、マッチング用の新しいゲームセッションを開始するためにゲームサーバーで必要な情報が含まれます。これには、マッチングのチーム構造、チームの割り当て、およびゲームに関連する可能性がある特定のプレイヤー属性が含まれます。たとえば、ゲームで平均プレイヤースキルを基準に特定の機能またはレベルのロックを解除したり、プレイヤーの設定に基づいてマップを選択したりする場合があります。詳細については、「マッチメーカーデータの操作 (p. 79)」を参照してください。

2. プレイヤーの接続を処理します。 ゲームクライアントは、マッチングされたゲームに接続するときに、プレイヤー ID とプレイヤーセッション ID を参照します (「新しいプレイヤーを確認する (p. 46)」を参照してください)。ゲームサーバーは、受信プレイヤーをマッチメイキングデータのプレイヤー情報に関連付けるためにプレイヤー ID を使用します。マッチメーカーデータは、プレイヤーのチームの割り当てを識別し、ゲームのプレイヤーを正しく表すためにその他の情報を提供します。

3. プレイヤーがいつゲームから離れたかをレポートします。 ゲームサーバーがサーバー APIRemovePlayerSession() を呼び出して、削除されたプレイヤーをレポートすることを確認します (「プレイヤーセッションの終了を報告する (p. 47)」を参照)。既存のゲームの空きスロットを満たすために FlexMatch バックフィルを使用している場合、このステップは重要です。ゲームがクライアント側のゲームサービスでバックフィルリクエストを開始する場合、これは非常に重要です。FlexMatch バックフィルの実装の詳細については、「FlexMatch を使用した既存のゲームのバックフィル (p. 80)」を参照してください。

4. マッチングされる既存のゲームセッション用の新しいプレイヤーをリクエストします (オプション)。既存のマッチングされたゲームをバックフィルする方法を決定します。マッチメーカーのバックフィルモードが [手動] に設定されている場合、バックフィルサポートをゲームに追加できます。バックフィルモードが [自動] に設定されている場合、個々のゲームセッションに対して設定をオフにする方法が必要になる可能性があります。たとえば、ゲームで特定ポイントに達した時点でゲームセッションのバックフィリングを停止したい場合があります。マッチングバックフィルの管理の詳細については、「FlexMatch を使用した既存のゲームのバックフィル (p. 80)」を参照してください。

マッチメーカーデータの操作ゲームサーバーは、GameSession オブジェクトでゲーム情報を認識して使用できる必要があります。GameLift サービスは、ゲームセッションが開始または更新されるたびに、これらのオブジェクトをゲームサーバーに渡します。コアゲームセッション情報には、ゲームセッション ID と名前、最大プレイヤー数、接続情報、およびカスタムゲームデータ (ある場合) が含まれます。

FlexMatch を使用して作成されたゲームセッションの場合、GameSession オブジェクトには一連のマッチメーカーデータも含まれます。このオブジェクトは、一意の ID に加えて、マッチングを作成したマッチメーカーを識別し、チーム、チーム割り当て、およびプレイヤーについて記述します。元のマッチメーキ

Version79

Page 86: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド既存のゲームのバックフィル

ングリクエストからのプレイヤー属性も含まれます (Player オブジェクトを参照)。これにはプレイヤーのレイテンシーは含まれません。マッチバックフィルなどの現在のプレイヤーでレイテンシーデータが必要な場合は、更新データを取得することをお勧めします。

Note

マッチメーカーデータは、完全なマッチメーキング設定 ARN を指定します。これは、設定名、AWS アカウント、リージョンを特定します。マッチバックフィルをゲームクライアントまたはサービスからリクエストする場合は、設定名のみが必要です。":matchmakingconfiguration/" の後の文字列を解析すると、設定名を抽出できます。ここに示す例では、マッチメーキング設定の名前は「MyMatchmakerConfig」です。

次の JSON は、マッチメーキングデータの一般的なセットを示しています。この例では、2 つのプレイヤーゲームを示します。プレイヤーはスキル評価および達成した最高レベルに基づいてマッチングされます。マッチメーカーでは、キャラクターに基づいてもマッチングされ、マッチングされたプレイヤーは少なくとも 1 つの共通マップ設定を持ちます。このシナリオでは、ゲームサーバーは最優先されるマップを決定し、ゲームセッション内でそのマップを使用できます。

{ "matchId":"1111aaaa-22bb-33cc-44dd-5555eeee66ff", "matchmakingConfigurationArn":"arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MyMatchmakerConfig", "teams":[ {"name":"attacker", "players":[ {"playerId":"4444dddd-55ee-66ff-77aa-8888bbbb99cc", "attributes":{ "skills":{ "attributeType":"STRING_DOUBLE_MAP", "valueAttribute":{"Body":10.0,"Mind":12.0,"Heart":15.0,"Soul":33.0}} } }] },{ "name":"defender", "players":[{ "playerId":"3333cccc-44dd-55ee-66ff-7777aaaa88bb", "attributes":{ "skills":{ "attributeType":"STRING_DOUBLE_MAP", "valueAttribute":{"Body":11.0,"Mind":12.0,"Heart":11.0,"Soul":40.0}} } }] }]}

FlexMatch を使用した既存のゲームのバックフィルマッチバックフィルでは、FlexMatch メカニズムを使用して、既存のマッチ済みのゲームセッションの新しいプレイヤーを見つけます。プレイヤーを任意のゲームにいつでも追加できますが (「ゲームセッションへのプレイヤーの参加 (p. 52)」を参照)、マッチバックフィルにより、新しいプレイヤーが既存のプレイヤーと同じ条件を満たすことができます。また、マッチバックフィルは新しいプレイヤーをチームに割り当て、プレイヤーの受け入れを管理し、更新されたマッチ情報をゲームサーバーに送信します。マッチバックフィルの詳細については「マッチメーキングプロセス (p. 15)」を参照してください。

Note

現在、FlexMatch バックフィルは、リアルタイムサーバー を使用しているゲームで使用することはできません。

バックフィルメカニズムには、次の 2 種類があります。

Version80

Page 87: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド既存のゲームのバックフィル

• 最大許容プレイヤー数よりも少ないプレイヤーで開始したゲームセッションをフィルするには、自動バックフィルを有効にします。

• 進行中のゲームセッションからドロップアウトしたプレーヤーを置き換えるには、バックフィルリクエストを送信する機能をゲームサーバーに追加します。

自動バックフィルをオンにする自動マッチバックフィルでは、ゲームセッションがフィルされていない 1 つまたは複数のプレーヤースロットで開始されるたびに、GameLift が自動的にバックフィルリクエストをトリガーします。この機能により、マッチしたプレイヤーの最小数が見つかるとすぐにゲームを開始し、残りのスロットを後で埋めることができるようになります。自動バックフィルはいつでも停止できます。

例として、6 〜 10 人のプレーヤーを保持できるゲームを考えてみましょう。マッチメイキングは、マッチするタイムフレーム内にゲームセッションの 6 人のプレイヤーとマッチし、新しいゲームセッションが開始されます。自動バックフィルを使用すると、新しいゲームセッションはすぐに 4 人の追加プレーヤーを要求することができます。ゲームの性質によっては、ゲームセッション中にいつでも新しいプレーヤーが参加できるようにすることができます。または、初期セットアップフェーズとゲームプレイ開始前に自動バックフィルを停止することもできます。

自動バックフィルをゲームに追加するには、ゲームに以下の変更を加えます。

1. 自動バックアップを有効にする。 自動バックフィルはマッチメイキング設定で管理します。有効にすると、そのマッチメーカーによって作成されたすべてのマッチング済みゲームセッションに使用されます。GameLift はゲームセッションがゲームサーバーで開始され次第、一部のゲームセッションへのバックフィルリクエストの生成を開始します。

自動バックフィルを有効にするには、マッチング設定を開き、バックフィルモードを [自動] に設定します。詳細については、「マッチメーキング設定の作成 (p. 147)」を参照してください。

2. 新しいマッチメーカーデータでゲームセッションを更新します。Amazon GameLift は Server SDKコールバック関数 onUpdateGameSession (「サーバープロセスを準備する (p. 45)」を参照) を使用して、マッチング情報でゲームサーバーを更新します。バックフィルアクティビティの結果として更新されたゲームセッションオブジェクトを処理するために、コードをゲームサーバーに追加します。詳細については、「ゲームサーバー上のマッチデータの更新 (p. 86)」を参照してください。

3. ゲームセッションの自動バックフィルを無効にする。 個々のゲームセッション中はいつでも自動バックフィルの停止を選択できます。自動バックフィルを停止するには、GameLift API 呼び出しStopMatchmaking を実行するコードをゲームクライアントまたはゲームサーバーに追加します。この呼び出しにはチケット ID が必要です。最新のバックフィルリクエストのバックフィルチケット ID を使用します。この情報は、前のステップで説明されているように、ゲームセッションのマッチメイキングデータから取得できます。

バックフィルリクエストの送信 (ゲームサーバーから)ゲームセッションをホストするゲームサーバーのプロセスから直接、マッチバックフィルリクエストを開始できます。サーバープロセスは、現在ゲームに接続しているプレイヤーのおよび空のプレイヤースロットのステータスについての最新の情報を持ちます。

このトピックは、既に必要な FlexMatch コンポーネントを構築済みであり、マッチメイキングプロセスをゲームサーバーとクライアント側のゲームサービスに正常に追加済みであることを前提としています。FlexMatch のセットアップの詳細については、「FlexMatch 統合のロードマップ (p. 73)」を参照してください。

ゲームのマッチバックフィルを有効にするには、以下の機能を追加する必要があります。

• マッチメーキングバックフィルリクエストをマッチメーカーに送信し、リクエストのステータスを追跡する。

Version81

Page 88: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド既存のゲームのバックフィル

• ゲームセッションのマッチ情報を更新する。「

ゲーム内でマッチバックフィルリクエストを開始する方法にかかわらず、AmazonGameLift がマッチバックフィルリクエストの結果として送信するゲームセッション更新をゲームサーバーで処理できる必要があります。

Amazon GameLift がバックフィルリクエストを (正常であってもそうでなくても) 完了すると、コールバック関数 onUpdateGameSession を使用してゲームサーバーを呼び出します。——この呼び出しには 3 つの入力パラメータが存在します。マッチバックフィルチケット ID、ステータスメッセージ、およびプレーヤー情報を含む最新のマッチメーキングデータを含む GameSession オブジェクトです。ゲームサーバー統合の一部として、ゲームサーバーに次のコードを追加する必要があります。

1. onUpdateGameSession 関数を実装します。この関数は次のステータスメッセージ(updateReason) を処理できる必要があります。

• MATCHMAKING_DATA_UPDATED – 新しいプレーヤーが正常にゲームセッションにマッチされました。GameSession オブジェクトには、既存のプレイヤーおよび新しくマッチされたプレイヤーのプレイヤーデータを含む、更新されたマッチメーカーデータが含まれます。

• BACKFILL_FAILED – マッチバックフィル試行が内部エラーのために失敗しました。GameSession オブジェクトは変更されません。

• BACKFILL_TIMED_OUT – マッチメーカーが制限時間内にバックフィルマッチを見つけることができませんでした。GameSession オブジェクトは変更されません。

• BACKFILL_CANCELLED – マッチバックフィルリクエストが、StopMatchmaking (クライアント) または StopMatchBackfill (サーバー) の呼び出しによりキャンセルされました。GameSession オブジェクトは変更されません。

2. バックフィルマッチが成功するには、更新されたマッチメーカーデータを使用して、新しいプレイヤーがゲームセッションに接続した際にこれを処理します。少なくとも、プレイヤーがゲームを開始するために必要な他のプレイヤーの属性とともに、新しいプレイヤーのチーム割り当てを使用する必要があります。

3. ゲームサーバーのサーバー SDK アクション ProcessReady() (p. 267) に対する呼び出しで、onUpdateGameSession コールバックメソッド名をプロセスパラメータとして追加します。

(p. 86)」を参照してください。

他のサーバー機能と同様に、ゲームサーバーは Amazon GameLift Server SDK 機能を使用します。このSDK は C++ および C# で使用できます。サーバー API の一般的な説明については、「サーバー API リファレンス (p. 241)」を参照してください。

ゲームサーバーからマッチバックフィルリクエストを作成するには、次のタスクを完了します。

1. マッチバックフィルリクエストをトリガーします。 一般的に、マッチされたゲームに 1 つ以上の空きプレイヤースロットがある場合はいつでも、バックフィルリクエストを開始できます。バックフィルリクエストを、重要なキャラクターの役割を埋めるためや、チームのバランスを取るためなどの特定の状況に結びつけることもできます。また、ゲームセッションの継続時間に基づいてバックフィルアクティビティを制限することもできます。

2. バックフィルリクエストを作成します。 マッチバックフィルリクエストを作成して FlexMatch マッチメーカーに送信するためのコードを追加します。バックフィルリクエストは、これらのサーバー APIを使用して処理されます。

• StartMatchBackfill() (p. 270)• StopMatchBackfill() (p. 271)

Version82

Page 89: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド既存のゲームのバックフィル

バックフィルリクエストを作成するには、次の情報を指定して StartMatchBackfill を呼び出します。バックフィルリクエストをキャンセルするには、バックフィルリクエストのチケット ID を指定して StopMatchBackfill を呼び出します。

• チケット ID — マッチメーキングチケット ID を指定します (または自動生成させることもできます)。同じメカニズムを使用して、マッチメーキングリクエストおよびバックフィルリクエストにもチケット ID を割り当てます。マッチメーキングおよびバックフィルのチケットも同じ方法で処理されます。

• マッチメーカー — バックフィルリクエストに使用するマッチメーカーを特定します。一般的に、元のマッチの作成に使用したものと同じマッチメーカーを使用します。このリクエストはマッチメーキング設定 ARN を取ります。この情報は、ゲームセッションをアクティブにしたときに AmazonGameLift によってサーバープロセスに渡されたゲームセッションオブジェクト (GameSession) に保存されます。マッチメーキング設定 ARN は MatchmakerData プロパティに含まれています。

• ゲームセッション ARN — バックフィルされるゲームセッションを特定します。ゲームセッションARN はサーバー API GetGameSessionId() (p. 264) を呼び出して取得できます。マッチメーキングプロセス中は、新しいリクエストのチケットにはゲームセッション ID がありません。一方、バックフィルリクエストのチケットにはあります。ゲームセッション ID があるかどうかが、新しいマッチのチケットとバックフィルのチケットを見分ける方法の 1 つです。

• プレイヤーデータ — バックフィルするゲームセッション内のすべての現在のプレイヤーのプレイヤー情報 (Player) が含まれています。この情報により、マッチメーカーは現在ゲームセッション内にいるプレイヤーに対して最良のプレイヤーマッチを見つけることができます。ゲームサーバーがプレイヤー接続情報を正確にレポートしているなら、次のようにしてこのデータを取得できます。1. ゲームセッションをホストしているサーバープロセスには、現在どのプレイヤーがゲームセッ

ションに接続しているかについての最新情報があります。2. プレイヤ ID、属性、およびチームの割り当てを取得するには、ゲームセッションオブジェクト

(GameSession) の MatchmakerData プロパティからプレイヤーデータをプルします (「マッチメーカーデータの操作 (p. 79)」を参照)。マッチメーカーデータには、ゲームセッションにマッチされたことのあるすべてのプレイヤーが含まれています。そのため、現在接続しているプレイヤーのみのプレイヤーデータをプルする必要があります。

3. プレイヤーレイテンシーについては、マッチメーカーがレイテンシーデータを呼び出す場合、新しいレイテンシー値をすべての現在のプレイヤーから収集し、それを各 Player オブジェクトに含めます。レイテンシールールが省略されマッチメーカーにレイテンシールールがある場合、リクエストは正常にマッチされません。バックフィルリクエストには、ゲームセッションが現在置かれているリージョンのレイテンシーデータのみが必要です。ゲームセッションのリージョンはGameSession オブジェクトの GameSessionId プロパティから取得できます。この値はリージョンを含む ARN です。

3. バックフィルリクエストのステータスを追跡します。Amazon GameLift は Server SDK コールバック関数 onUpdateGameSession を使用して、バックフィルリクエストのステータスでゲームサーバーを更新します (「サーバープロセスを準備する (p. 45)」を参照)。ステータスメッセージ (およびバックフィルリクエストが成功した結果として更新されたゲームセッションオブジェクト) を処理するコードを追加します (「ゲームサーバー上のマッチデータの更新 (p. 86)」を参照)。——

マッチメーカーで処理できるゲームセッションからのマッチバックフィルリクエストは一度に 1 つだけです。リクエストをキャンセルする必要がある場合は、StopMatchBackfill() (p. 271) を呼び出します。リクエストを変更する必要がある場合は、StopMatchBackfill を呼び出してから、更新されたリクエストを送信します。

バックフィルリクエストの送信 (クライアントサービスから)バックフィルリクエストをゲームサーバーから送信する代わりに、クライアント側のゲームサービスから送信できます。このオプションを使用するには、クライアント側のサービスがゲームセッションアクティビティとプレイヤー接続の現在のデータにアクセスできる必要があります。ゲームがセッションディレクトリサービスを使用している場合に適した選択です。

Version83

Page 90: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド既存のゲームのバックフィル

このトピックは、既に必要な FlexMatch コンポーネントを構築済みであり、マッチメイキングプロセスをゲームサーバーとクライアント側のゲームサービスに正常に追加済みであることを前提としています。FlexMatch のセットアップの詳細については、「FlexMatch 統合のロードマップ (p. 73)」を参照してください。

ゲームのマッチバックフィルを有効にするには、以下の機能を追加する必要があります。

• マッチメーキングバックフィルリクエストをマッチメーカーに送信し、リクエストのステータスを追跡する。

• ゲームセッションのマッチ情報を更新する。「

ゲーム内でマッチバックフィルリクエストを開始する方法にかかわらず、AmazonGameLift がマッチバックフィルリクエストの結果として送信するゲームセッション更新をゲームサーバーで処理できる必要があります。

Amazon GameLift がバックフィルリクエストを (正常であってもそうでなくても) 完了すると、コールバック関数 onUpdateGameSession を使用してゲームサーバーを呼び出します。——この呼び出しには 3 つの入力パラメータが存在します。マッチバックフィルチケット ID、ステータスメッセージ、およびプレーヤー情報を含む最新のマッチメーキングデータを含む GameSession オブジェクトです。ゲームサーバー統合の一部として、ゲームサーバーに次のコードを追加する必要があります。

1. onUpdateGameSession 関数を実装します。この関数は次のステータスメッセージ(updateReason) を処理できる必要があります。

• MATCHMAKING_DATA_UPDATED – 新しいプレーヤーが正常にゲームセッションにマッチされました。GameSession オブジェクトには、既存のプレイヤーおよび新しくマッチされたプレイヤーのプレイヤーデータを含む、更新されたマッチメーカーデータが含まれます。

• BACKFILL_FAILED – マッチバックフィル試行が内部エラーのために失敗しました。GameSession オブジェクトは変更されません。

• BACKFILL_TIMED_OUT – マッチメーカーが制限時間内にバックフィルマッチを見つけることができませんでした。GameSession オブジェクトは変更されません。

• BACKFILL_CANCELLED – マッチバックフィルリクエストが、StopMatchmaking (クライアント) または StopMatchBackfill (サーバー) の呼び出しによりキャンセルされました。GameSession オブジェクトは変更されません。

2. バックフィルマッチが成功するには、更新されたマッチメーカーデータを使用して、新しいプレイヤーがゲームセッションに接続した際にこれを処理します。少なくとも、プレイヤーがゲームを開始するために必要な他のプレイヤーの属性とともに、新しいプレイヤーのチーム割り当てを使用する必要があります。

3. ゲームサーバーのサーバー SDK アクション ProcessReady() (p. 267) に対する呼び出しで、onUpdateGameSession コールバックメソッド名をプロセスパラメータとして追加します。

(p. 86)」を参照してください。

他のクライアント機能と同様に、クライアント側のゲームサービスは、AWS SDK と AmazonGameLiftAPI を使用します。この SDK は、C++、C#、およびその他いくつかの言語で使用できます。クライアント API の一般的な説明については、Amazon GameLift サービス API リファレンスを参照してください。このリファレンスには、Amazon GameLift 関連アクションの低レベルサービス API についての説明があり、言語固有のリファレンスガイドへのリンクが含まれています。

クライアント側のゲームサービスを設定してマッチしたゲームをバックフィルするには、次のタスクを完了します。

Version84

Page 91: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド既存のゲームのバックフィル

1. バックフィルのリクエストをトリガーします。 一般的に、マッチされたゲームに 1 つ以上の空きプレイヤースロットがある場合はいつでも、ゲームによってバックフィルリクエストが開始されます。バックフィルリクエストを、重要なキャラクターの役割を埋めるためや、チームのバランスを取るためなどの特定の状況に結びつけることもできます。また、ゲームセッションの継続時間に基づいてバックフィルを制限することもできます。トリガーに使用したものが何であれ、少なくとも次の情報が必要になります。この情報は、ゲームセッション ID を指定して DescribeGameSessions を呼び出すことで、ゲームセッションオブジェクト (GameSession) から取得できます。

• 現在の空のプレーヤースロットの数。この値は、ゲームセッションの最大プレイヤー制限と現在のプレイヤー数から計算できます。現在のプレーヤー数は、ゲームサーバーが Amazon GameLift サービスと通信して、新しいプレイヤーの接続を検証したり、切断されたプレイヤーをレポートするたびに更新されます。

• 作成ポリシー。この設定は、ゲームセッションで現在新しいプレーヤーを受け入れているかどうかを示します。

ゲームセッションオブジェクトには他にも、ゲームセッション開始時間、カスタムゲームプロパティ、マッチメーカーデータなどの有用な情報が含まれています。

2. バックフィルリクエストを作成します。 マッチバックフィルリクエストを作成して FlexMatch マッチメーカーに送信するためのコードを追加します。バックフィルリクエストは、これらのクライアントAPI を使用して処理されます。

• StartMatchBackfill• StopMatchmaking

バックフィルリクエストを作成するには、次の情報を指定して StartMatchBackfill を呼び出します。バックフィルリクエストはマッチメーキングリクエスト (「プレイヤーのマッチメーキングのリクエスト (p. 75)」を参照) に似ていますが、既存のゲームセッションも特定します。バックフィルリクエストをキャンセルするには、バックフィルリクエストのチケット ID を指定してStopMatchmaking を呼び出します。

• チケット ID — マッチメーキングチケット ID を指定します (または自動生成させることもできます)。同じメカニズムを使用して、マッチメーキングリクエストおよびバックフィルリクエストにもチケット ID を割り当てます。マッチメーキングおよびバックフィルのチケットも同じ方法で処理されます。

• マッチメーカー — 使用するマッチメーキング設定の名前を特定します。一般的に、元のマッチの作成に使用したものと同じマッチメーカーをバックフィルに使用します。この情報は、マッチメーキング設定 ARN の下の、ゲームセッションオブジェクト (GameSession) の、MatchmakerDataプロパティにあります。名前の値は「matchmakingconfiguration/」に続く文字列です。(たとえば、ARN 値が「arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MM-4v4」であれば、マッチメーキング設定名は「MM-4v4」です)

• ゲームセッション ARN — バックフィルされるゲームセッションを指定します。ゲームセッションオブジェクトから GameSessionId プロパティを使用すると、この ID は必要な ARN 値を使用します。バックフィルリクエストのマッチメーキングチケット (MatchmakingTicket) には、処理中にゲームセッション ID がありますが、新しいマッチメーキングリクエストはマッチが成立するまでゲームセッション ID を取得しません。ゲームセッション ID があるかどうかが、新しいマッチのチケットとバックフィルのチケットを見分ける方法の 1 つです。

• プレイヤーデータ — バックフィルするゲームセッション内のすべての現在のプレイヤーのプレイヤー情報 (Player) が含まれています。この情報により、マッチメーカーは現在ゲームセッション内にいるプレイヤーに対して最良のプレイヤーマッチを見つけることができます。ゲームサーバーがプレイヤー接続情報を正確にレポートしているなら、次のようにしてこのデータを取得できます。1. ゲームセッション ID を指定して (DescribePlayerSessions) を呼び出し、ゲームセッションに現

在接続しているすべてのプレイヤーを検出します。各プレーヤーセッションにはプレイヤー IDが含まれます。ステータスフィルタを追加してアクティブなプレーヤーのみを取得できます。

Version85

Page 92: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド既存のゲームのバックフィル

2. ゲームセッションオブジェクト (GameSession) の MatchmakerData プロパティからプレイヤーデータをプルします (「マッチメーカーデータの操作 (p. 79)」を参照)。前のステップで取得したプレイヤー ID を使用して、現在接続されているプレーヤーのみのデータを取得します。プレイヤーが切断された場合マッチメーカーのデータは更新されないため、現在のプレイヤーのみのデータを抽出する必要があります。

3. プレイヤーレイテンシーについては、マッチメーカーがレイテンシーデータを呼び出す場合、新しいレイテンシー値をすべての現在のプレイヤーから収集し、それを Player オブジェクトに含めます。レイテンシールールが省略されマッチメーカーにレイテンシールールがある場合、リクエストは正常にマッチされません。バックフィルリクエストには、ゲームセッションが現在置かれているリージョンのレイテンシーデータのみが必要です。ゲームセッションのリージョンはGameSession オブジェクトの GameSessionId プロパティから取得できます。この値はリージョンを含む ARN です。

3. バックフィルリクエストのステータスを追跡します。 マッチメーキングチケットのステータス更新をリッスンするコードを追加します。イベント通知 (推奨) またはポーリングを使用して、新しいマッチメーキングリクエストのチケットを追跡するセットアップのメカニズムを使用できます (マッチメーキングリクエストのステータスを追跡する (p. 76) を参照)。バックフィルリクエストでプレイヤーの承認アクティビティをトリガーする必要はなく、プレイヤー情報はゲームサーバーで更新されますが、チケットのステータスを追跡してリクエストの失敗や再送信を処理する必要はあります。

マッチメーカーで処理できるゲームセッションからのマッチバックフィルリクエストは一度に 1 つだけです。リクエストをキャンセルする必要がある場合は、StopMatchmaking を呼び出します。リクエストを変更する必要がある場合は、StopMatchmaking を呼び出してから、更新されたリクエストを送信します。

マッチバックフィルリクエストが成功すると、ゲームサーバーは更新された GameSession オブジェクトを受信し、新しいプレイヤーがゲームセッションに参加するために必要なタスクを処理します。詳細については、「ゲームサーバー上のマッチデータの更新 (p. 86)」を参照してください。

ゲームサーバー上のマッチデータの更新ゲーム内でマッチバックフィルリクエストを開始する方法にかかわらず、Amazon GameLift がマッチバックフィルリクエストの結果として送信するゲームセッション更新をゲームサーバーで処理できる必要があります。

Amazon GameLift がバックフィルリクエストを (正常であってもそうでなくても) 完了すると、コールバック関数 onUpdateGameSession を使用してゲームサーバーを呼び出します。——この呼び出しには 3 つの入力パラメータが存在します。マッチバックフィルチケット ID、ステータスメッセージ、およびプレーヤー情報を含む最新のマッチメーキングデータを含む GameSession オブジェクトです。ゲームサーバー統合の一部として、ゲームサーバーに次のコードを追加する必要があります。

1. onUpdateGameSession 関数を実装します。この関数は次のステータスメッセージ (updateReason)を処理できる必要があります。• MATCHMAKING_DATA_UPDATED – 新しいプレーヤーが正常にゲームセッションにマッチされまし

た。GameSession オブジェクトには、既存のプレイヤーおよび新しくマッチされたプレイヤーのプレイヤーデータを含む、更新されたマッチメーカーデータが含まれます。

• BACKFILL_FAILED – マッチバックフィル試行が内部エラーのために失敗しました。GameSessionオブジェクトは変更されません。

• BACKFILL_TIMED_OUT – マッチメーカーが制限時間内にバックフィルマッチを見つけることができませんでした。GameSession オブジェクトは変更されません。

• BACKFILL_CANCELLED – マッチバックフィルリクエストが、StopMatchmaking (クライアント) または StopMatchBackfill (サーバー) の呼び出しによりキャンセルされました。GameSession オブジェクトは変更されません。

2. バックフィルマッチが成功するには、更新されたマッチメーカーデータを使用して、新しいプレイヤーがゲームセッションに接続した際にこれを処理します。少なくとも、プレイヤーがゲームを開始するた

Version86

Page 93: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド既存のゲームのバックフィル

めに必要な他のプレイヤーの属性とともに、新しいプレイヤーのチーム割り当てを使用する必要があります。

3. ゲームサーバーのサーバー SDK アクション ProcessReady() (p. 267) に対する呼び出しで、onUpdateGameSession コールバックメソッド名をプロセスパラメータとして追加します。

Version87

Page 94: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドGameLift ホスティングリソースについて

GameLift ホスティングリソースを管理する

このセクションのトピックでは、マネージド GameLift ソリューションと使用するための、ゲームサーバーのホスティングリソースの設定と管理についての詳細なヘルプを提供しています。完全にカスタマイズされたゲームサーバーをデプロイしている場合でも、リアルタイムサーバー を使用している場合でも、プレイヤーの需要を満たすためにリソースの割り当て、設定、容量のスケーリングが必要です。

ヒント

リアルタイムサーバー サンプルゲーム使用などの Amazon GameLift 機能を検索する方法について確認する (p. 31)。

トピック• Amazon GameLift ホスティングリソースについて (p. 88)• AWS CloudFormation を使用してリソースを作成する (p. 90)• デプロイ用の GameLift サーバービルドのアップロード (p. 96)• Amazon GameLift フリートの設定 (p. 104)• Amazon GameLift フリートの容量のスケーリング (p. 126)• マルチリージョンキューの使用 (p. 135)• Amazon GameLift FlexMatch マッチメーカーの設定 (p. 145)• Amazon GameLift の VPC ピア接続 (p. 173)

Amazon GameLift ホスティングリソースについてこのトピックでは、マネージド GameLift サービスを使ってゲームをホストするときに使用する主要なリソースの概要を簡単に説明します。Amazon GameLift の仕組み (p. 3) での GameLift 動作の詳細について説明します。

以下の図では、GameLift リソースの基本構造と相互関係を示しています。この図からわかるように、リソースセットは 1 つのフリートで構成するか、1 つのビルドまたはスクリプトによりデプロイされる複数のフリートで構成できます。

Version88

Page 95: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドGameLift ホスティングリソースについて

ビルド

GameLift で実行され、プレイヤーのゲームセッションをホストするカスタム構築されたゲームサーバーソフトウェア。ゲーム構築は、特定のオペレーティングシステムでゲームサーバーを実行する一連のファイルを表します。ゲームのさまざまなバリエーションなど、多くの異なるビルドを持つことができます。ゲームビルドは GameLift サービスと統合する必要があります。ゲームをデプロイする予定の各リージョンの GameLift サービスにゲームビルドファイルをアップロードします。

Script

リアルタイムサーバー で使用するための設定とカスタムゲームロジック。リアルタイムサーバーは GameLift によって提供され、カスタムゲームサーバーの代わりに使用されます。スクリプトをJavaScript で作成して、ゲームクライアント用に リアルタイムサーバー を設定するために使用します。また、プレイヤーのゲームセッションをホストするのに適切なカスタムゲームロジックを追加するためにも使用します。ゲームをデプロイする予定の各リージョンの GameLift サービスに Realtimeスクリプトをアップロードします。

フリート

仮想ホスティングリソースの集合であり、ゲームサーバーを実行し、プレイヤーのゲームセッションをホストします。カスタムゲームビルドまたは Realtime サーバースクリプトをリージョンにデプロイするためのフリートを作成し、ゲームに対するフリートの運用方法を設定します。フリートのサイズを管理するスケーリングルールを設定します。これにより、サポートできるゲームセッション数とプレイヤー数が決定されます。1 つのビルドに対して複数のフリートを作成できます。たとえば、1つのビルドに対してスポットフリートとオンデマンドフリートを作成できます。ゲームを複数のリージョンにデプロイする場合、ゲームをデプロイする予定の各リージョンにフリートを作成します。

エイリアス

フリートの抽象識別子。参照先のフリートはいつでも変更できます。フリートはカスタムゲームビルドを更新するたびに置き換えられるため、フリートエイリアスを作成し、特定のフリートを参照する必要がある場所 (ゲームセッションキューなど) でそのエイリアスを使用することをお勧めします。フリートを置き換え、公開する準備ができたら、新しいフリートを参照するようにエイリアスを更新し、中断することなくプレイヤーをリダイレクトします。エイリアスはその参照先のフリートと同じリージョンに作成します。

ゲームセッションキュー

ゲームセッションをホストできるターゲット (フリートまたはエイリアス) のリスト。新しいゲームセッションのリクエストでは、特定のフリート ID またはゲームセッションキュー ID のいずれかを指定して、セッションを配置する場所を指定する必要があります。キューは、複数のリージョンにまたがるターゲットを参照できるため、より高速で効率的なゲームセッションの配置が可能になります。プレイヤーのレイテンシー制限を適用するようにキューを設定し、許容できないゲームラグからプレイヤーを保護できます。キューは、FlexMatch マッチメーキングまたはスポットフリートを使用するゲームに必要です。ゲームセッションキューは任意のリージョンに作成できます。

マッチメイキング設定

FlexMatch がマッチメーキングリクエストを処理する方法に関する設定。この設定を構成する 2 つの主要な項目はマッチメーキングルールセットとゲームセッションキューです。マッチメーキングルールセットは、GameLift にマッチ候補となるプレイヤーの評価方法を指示します。ゲームセッションキューは、GameLift にマッチの新しいゲームセッションをホストする場所を指示します。複数のマッチメーキング設定を指定できます。新しいマッチのリクエストごとに、使用するマッチメーキング設定を指定する必要があります。マッチメーキング設定は任意のリージョンに作成できます。

マッチメイキングのルールセット

ゲームに最適なマッチを作成する方法に関する指示。ルールセットはマッチのチーム構造および規模を定義し、マッチ候補となるプレイヤーの評価ルールを含みます。ルールは個々のプレイヤーまたはチーム全体の要件を設定できます。ルールセットには、プレイヤーの待機時間を最短に抑えるために、ルールを経時的に緩和するタイミングと方法に関するガイドラインを設定することもできます。

Version89

Page 96: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

ルールセットは、マッチメイキング設定で使用されます。マッチメーキングルールセットは、そのルールセットを使用するマッチメーキング設定と同じリージョンに作成します。

AWS CloudFormation を使用してリソースを作成する

AWS CloudFormation を使用して、GameLift リソース (p. 88)を管理できます。GameLift コンソールおよび CLI コマンドは、個々のリソースを作成および更新するための便利なツールです。ただし、AWSCloudFormation を使用すると、リソースセット全体を管理して、ゲームホスティングをサポートできます。AWS CloudFormation で、各リソースをモデル化するテンプレートを作成し、そのテンプレートを使用してリソースを作成します。リソースを更新するには、テンプレートに変更を加え、AWSCloudFormation を使用して更新を実装します。リソースは、スタックおよびスタックセットと呼ばれる論理グループに編成できます。

AWS CloudFormation を使用して GameLift ホスティングリソースを維持すると、AWS リソースセットをより効率的に管理できます。バージョン管理を使用して、テンプレートの経時的な変更を追跡し、複数のチームメンバーによる更新を調整できます。テンプレートを再利用することもできます。たとえば、複数のリージョンにゲームをデプロイする場合、同じテンプレートを使用して各リージョンに同一のリソースを作成できます。これらのテンプレートを使用して、同じリソースセットを別のパーティションにデプロイすることもできます。

AWS CloudFormation の詳細については、AWS CloudFormation ユーザーガイド を参照してください。GameLift リソースのテンプレート情報を表示するには、Amazon GameLift リソースタイプリファレンスを参照してください。

以下のトピックでは、AWS CloudFormation を GameLift で使用する際のベストプラクティスを取り上げ、リソーステンプレートを構造化するためのいくつかの推奨事項を示します。

ベストプラクティスAWS CloudFormation の使用に関する詳細なガイダンスについては、AWS CloudFormation ユーザーガイド の「AWS CloudFormation のベストプラクティス」を参照してください。さらに、これらのベストプラクティスは GameLift と特別な関連性があります。

• AWS CloudFormation のみを使用してリソースを一貫して管理する。 これは AWS CloudFormationの中核的なベストプラクティスですが、繰り返し取り上げる価値があります。GameLift コンソール、GameLift API コール、または CLI コマンドの使用など AWS CloudFormation 以外の方法でリソースを変更すると、リソースはリソーステンプレートと同期しなくなります。このため、次回 AWSCloudFormation テンプレートを使用してリソースを更新すると、予期しない結果になる可能性があります。

• AWS CloudFormation スタックおよびスタックセットを使用して、複数のリソースを効率的に管理する。• 接続されたリソースのグループを管理するには、スタックを使用します。AWS CloudFormation は、

スタック内の相互に参照するリソースを、それらのプロパティが変更可能かどうかに基づいて、インテリジェントに更新します。たとえば、ビルド、ビルドを参照するフリート、フリートを参照するエイリアスを含むスタックがあるとします。GameLift では、ビルドとフリートの関係は不変です。テンプレートを更新してビルドを置き換えた場合、AWS CloudFormation によって、置き換えられたビルドに接続されているフリートも置き換えられます。その後、AWS CloudFormation によって、新しいフリートを参照するように既存のエイリアスが更新されます。詳細については、AWSCloudFormation ユーザーガイド の「スタックの操作」を参照してください。

• 複数のリージョンまたは AWS アカウントに同一のスタックをデプロイする場合は、AWSCloudFormation スタックセットを使用します。詳細については、AWS CloudFormation ユーザーガイド の「スタックの操作」を参照してください。

Version90

Page 97: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAWS CloudFormation スタックの使用

• スポットインスタンスを使用する場合は、オンデマンドフリートをバックアップとして含める。 リージョンごとに 2 つのフリート (スポットインスタンスを使用するフリートおよびオンデマンドインスタンスを使用するフリート) でテンプレートを設定することをお勧めします。GameLift の FleetIQ 機能により最初に、実行可能なスポットインスタンスでゲームセッションが配置されます。オンデマンドフリートは、スポットフリートが利用できない場合のフォールバックとして機能します。

• 複数のリージョンでリソースを管理している場合は、リージョン固有のリソースとグローバルリソースを別々のスタックにグループ化する。 GameLift フリートなどの一部のリソースは同じリージョン内の他のリソースのみを参照できます。GameLift キューなどのその他のリソースは、他のリージョン内のリソースを参照できます。それらのリソースを別々のスタックに配置すると、グローバルリソースを配置する場所をより柔軟に選択できます。

• グローバルリソースは、そのリソースを使用するサービスの近くに配置する。 グローバルリソースを配置するときは、これらのリソースへのアクセス方法に留意します。キューやマッチメーキング設定などのリソースは、バックエンドサービスなどの特定のソースから大量のリクエストを受信する傾向があります。リソースをこれらのリクエストのソースの近くに配置することで、リクエストの移動時間を最短に抑え、全体的なパフォーマンスを向上させることができます。

• マッチメーキング設定は、その設定を使用するゲームセッションキューと同じリージョンに配置する。マッチメーキング設定では、新しいゲームセッションのリクエストがキューに送信されるため、これらのリソースをまとめて配置すると、システムパフォーマンスの最適化にも役立ちます。

• スタック内のフリートごとに個別のエイリアスを作成する。 エイリアスを使用すると、ゲームのビルドおよびフリートを置き換えるときに、プレイヤーのトラフィックをより簡単に移行できます。

AWS CloudFormation スタックの使用以下に示しているのは、GameLift 関連リソースの AWS CloudFormation スタックを設定するときに使用する推奨構造です。最適なスタック構造は、ゲームを 1 つのリージョンのみにデプロイするか、複数のリージョンにデプロイするかによって異なります。

リージョンが 1 つの場合のスタック1 つのリージョンで GameLift リソースを管理するには、2 スタック構造をお勧めします。

• サポートスタック – このスタックには、GameLift リソースが依存するリソースが含まれます。少なくとも、このスタックには、カスタムゲームサーバーまたは Realtime スクリプトファイルを保存するS3 バケットが含まれる必要があります。また、このスタックには、GameLift ビルドまたはスクリプトリソースを作成するときに S3 バケットからファイルを取得するためのアクセス許可を GameLift に付与する、IAM ロールも含まれる必要があります。このスタックには、DynamoDB テーブル、AmazonRedshift クラスター、Lambda 関数など、ゲームで使用される他の AWS リソースも含まれる場合があります。

• GameLift スタック – このスタックには、すべての GameLift リソース (ビルドまたはスクリプト、フリートのセット、エイリアス、ゲームセッションキューなど) が含まれます。AWS CloudFormation は、S3バケットの場所に保存されているファイルを使用してビルドまたはスクリプトリソースを作成し、1 つまたは複数のフリートリソースにデプロイします。フリートごとに対応するエイリアスが必要です。ゲームセッションキューはフリートエイリアスの一部またはすべてを参照します。マッチメーキングにFlexMatch を使用する場合、このスタックにはマッチメーキング設定とルールセットも含まれます。

以下の図では、1 つの AWS リージョンにリソースをデプロイする 2 スタック構造を示しています。

Version91

Page 98: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAWS CloudFormation スタックの使用

リージョンが複数の場合のスタックゲームを複数のリージョンにデプロイする場合、リソースがリージョン間でどのようにやり取りするかに留意してください。GameLift フリートなどの一部のリソースは同じリージョン内の他のリソースのみを参照できます。GameLift キューなどの他のリソースはリージョンに依存しません。複数のリージョンでGameLift リソースを管理するには、以下の構造をお勧めします。

• リージョン別サポートスタック – これらのスタックには、GameLift リソースが依存するリソースが含まれます。このスタックには、カスタムゲームサーバーまたは Realtime スクリプトファイルを保存するS3 バケットが含まれる必要があります。DynamoDB テーブル、Amazon Redshift クラスター、Lambda関数など、ゲームで使用される他の AWS リソースも含まれる場合があります。これらのリソースの多くはリージョン固有であるため、リージョンごとに作成する必要があります。GameLift には、これらのサポートリソースへのアクセスを許可する IAM ロールも必要です。IAM ロールはリージョンに依存しないため、必要なロールリソースは 1 つのみであり、任意のリージョンに配置され、他のすべてのサポートスタックで参照されます。

• リージョン別 GameLiftスタック – このスタックには、ゲームがデプロイされる各リージョンに存在する必要のある GameLift リソース (ビルドまたはスクリプト、フリートのセット、エイリアスなど) が含まれます。AWS CloudFormation は、S3 バケットの場所に保存されているファイルを使用してビルドまたはスクリプトリソースを作成し、1 つまたは複数のフリートリソースにデプロイします。フリートごとに対応するエイリアスが必要です。ゲームセッションキューはフリートエイリアスの一部またはすべてを参照します。このタイプのスタックを記述する 1 つのテンプレートを維持し、そのテンプレートを使用してリージョンごとに同一のリソースセットを作成できます。

• グローバル GameLift スタック – このスタックには、ゲームセッションキューとマッチメーキングリソースが含まれます。これらのリソースは任意のリージョンに配置でき、通常は同じリージョンに配置されます。キューは、任意のリージョンにあるフリートまたはエイリアスを参照できます。別のリージョンに追加のキューを配置するには、追加のグローバルスタックを作成します。

Version92

Page 99: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAWS CloudFormation スタックの使用

以下の図では、複数の AWS リージョンにリソースをデプロイするマルチスタック構造を示しています。最初の図では、1 つのゲームセッションキューを使用した構造を示しています。2 番目の図では、複数のゲームセッションキューを使用した構造を示しています。

Version93

Page 100: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドビルドの更新

ビルドの更新GameLift ビルドは不変です。ビルドとフリートの関係も同様です。その結果、ゲームビルドファイルの新しいセットを使用するようにホスティングリソースを更新する場合、以下の手順を実行する必要があります。

• 新しいファイルのセットを使用して新しいビルドを作成する (置き換え)。• 新しいゲームビルドをデプロイするための新しいフリートのセットを作成する (置き換え)。

Version94

Page 101: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドビルドの更新

• 新しいフリートを参照するようにエイリアスをリダイレクトする (中断することなく更新)。

詳細については、AWS CloudFormation ユーザーガイド の「スタックのリソースの更新動作」を参照してください。

ビルドの更新を自動的にデプロイする関連するビルド、フリート、エイリアスリソースを含むスタックを更新すると、デフォルトの AWSCloudFormation の動作では、以下のステップが順番に自動的に実行されます。この更新をトリガーするには、まず新しいビルドファイルを新しい S3 の場所にアップロードします。次に、新しい S3 の場所を参照するように AWS CloudFormation ビルドテンプレートを変更します。新しい S3 の場所でスタックを更新すると、以下の AWS CloudFormation シーケンスがトリガーされます。

1. S3 から新しいファイルを取得し、それらのファイルを検証して、新しい GameLift ビルドを作成します。

2. フリートテンプレートでビルドの参照を更新すると、新しいフリートの作成がトリガーされます。3. 新しいフリートがアクティブになったら、エイリアス内のフリートの参照を更新します。これにより、

エイリアスの更新がトリガーされて、新しいフリートがターゲットになります。4. 古いフリートを削除します。5. 古いビルドを削除します。

ゲームセッションキューがフリートエイリアスを使用している場合、エイリアスが更新されるとすぐに、プレイヤーのトラフィックは新しいフリートに自動的に切り替えられます。ゲームセッションが終了すると、古いフリートは段階的にプレイヤーからドレインされます。Auto Scaling は、プレイヤーのトラフィックの変動に応じてフリートの各セットに対してインスタンスを追加および削除するタスクを処理します。または、切り替え用にすばやく増やせることを前提に、最初に必要になるインスタンスの数を指定し、後で Auto Scaling を有効にすることもできます。

AWS CloudFormation で、リソースを削除する代わりに保持することもできます。詳細については、AWSCloudFormation API Reference の「RetainResources」を参照してください。

ビルドの更新を手動でデプロイするプレイヤーが新しいフリートをいつ稼働させるかをさらに細かく制御する場合は、いくつかのオプションがあります。GameLift コンソールまたは CLI を使用して、エイリアスを手動で管理することを選択できます。または、ビルドテンプレートを更新してビルドとフリートを置き換える代わりに、2 番目のビルドとフリートのセットの定義をテンプレートに追加することを選択できます。テンプレートを更新すると、AWS CloudFormation によって 2 番目のビルドリソースと対応するフリートが作成されます。既存のリソースは置き換えられないため、それらのリソースは削除されず、エイリアスは元のフリートを参照したままになります。

このアプローチの主な利点は、柔軟性が得られることです。ビルドの新しいバージョン用に個別のリソースを作成し、新しいリソースをテストして、新しいフリートをプレイヤーに公開するタイミングを制御できます。考えられる欠点は、短期間にリージョンごとに 2 倍のリソースが必要になることです。

次の図は、このプロセスを示したものです。

Version95

Page 102: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバービルドのアップロード

ロールバックの仕組みリソースの更新を実行するときに、いずれかのステップが正常に完了しない場合、AWS CloudFormationによってロールバックが自動的に開始されます。このプロセスでは、各ステップを順番に反転させて、新しく作成されたリソースを削除します。

ロールバックを手動でトリガーする必要がある場合は、ビルドテンプレートの S3 の場所キーを元の場所に戻し、スタックを更新します。GameLift の新しいビルドとフリートが作成され、フリートがアクティブになると、エイリアスが新しいフリートに切り替わります。エイリアスを個別に管理している場合は、新しいフリートを参照するようにエイリアスを切り替える必要があります。

失敗またはスタックしたロールバックを処理する方法の詳細については、AWS CloudFormation ユーザーガイド の「更新のロールバックを続ける」を参照してください。

デプロイ用の GameLift サーバービルドのアップロード

Amazon GameLift 対応のマルチプレイヤーゲームをホストするようコンピューティングリソースを設定するには、最初にゲームサーバーのビルド (または リアルタイムサーバー を使用する場合はサーバースクリプトファイル一式) をマネージド Amazon GameLift サービスにアップロードします。ファイルをアップロードするすることにより、GameLift ビルドまたはスクリプトリソースを作成します。

トピック• カスタムサーバービルドを GameLift にアップロードする (p. 96)• リアルタイムサーバー スクリプトを Amazon GameLift にアップロードする (p. 101)

カスタムサーバービルドを GameLift にアップロードするゲームサーバーを GameLift と統合したら、ビルドファイルをマネージド GameLift サービスにアップロードして、ゲームホスティング用にデプロイできるようにします。このトピックでは、ゲームのビルドファイルをパッケージ化し、オプションのビルドインストールスクリプトを作成した後、AWS CLI またはAWS SDK を使用してそれらのファイルをアップロードする方法について説明します。

Version96

Page 103: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドカスタムサーバービルドをアップロードする

ビルドインストールスクリプトを追加するゲームビルドのオペレーティングシステム用のインストールスクリプトを作成します。

• Windows: 「install.bat」という名前のバッチファイルを作成します。• Linux: 「install.sh」という名前のシェルスクリプトファイルを作成します。

インストールスクリプトを作成するときは、次の点に留意してください。

• このスクリプトはユーザー入力を一切受け付けません。• ビルドは次の場所のホスティングサーバーにインストールされます。ビルドパッケージのファイルディ

レクトリは再作成されます。• Windows フリートの場合: C:\game• Linux フリートの場合: /local/game

• ユーザーとしての実行は、インストールプロセスで、インスタンスのファイル構造へのアクセスが制限されます。ビルドファイルがインストールされているディレクトリに対しては完全な権限があります。インストールスクリプトで、管理者権限を必要とするアクションを実行する場合、管理者アクセス(Linux の場合は sudo、Windows の場合は runas) を指定する必要があります。インストールスクリプトに関連するアクセス許可の失敗により、スクリプトに問題があることを示すイベントメッセージが生成されます。

• Linux では、bash などの一般的なシェルインタープリタ言語がサポートされています。shebang (#!/bin/bash など) を、インストールスクリプトの先頭に追加します。目的のシェルコマンドのサポートについて確認する必要がある場合は、アクティブな Linux インスタンスにリモートにアクセスし、シェルコマンドを開くことができます。詳細については、フリートインスタンスにリモートでアクセス (p. 124) を参照してください。

スクリプトの例

これらの例は、Windows と Linux 用の一般的なスクリプトの使用法を示しています。

Windows

この例の install.bat ファイルは、ゲームサーバーに必要な Visual C++ ランタイムコンポーネントをインストールし、結果をログファイルに書き込みます。コンポーネントファイルはルートのビルドパッケージに含まれています。

vcredist_x64.exe /install /quiet /norestart /log c:\game\vcredist_2013_x64.log

Linux

この例の install.sh ファイルは、インストールスクリプトで bash を使用し、結果をログファイルに書き込む方法を示しています。

#!/bin/bashecho 'Hello World' > install.log

ゲームビルドファイルをパッケージ化します。GameLift 対応のゲームサーバーをホスティング用の GameLift サービスにアップロードする前に、ゲームビルドファイルをビルドディレクトリにパッケージ化する必要があります。このディレクトリには、ゲームサーバーの実行と、ゲームセッションのホストを行うために必要なコンポーネントがすべて含まれている必要があります。以下に例を示します。

Version97

Page 104: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドカスタムサーバービルドをアップロードする

• ゲームサーバーバイナリ – ゲームサーバーを実行するために必要なバイナリファイル。ビルドには、同じプラットフォームで実行するように構築されている限り、複数のゲームサーバーのバイナリを含めることができます。(サポートされているプラットフォーム (p. 25)を参照)。

• 依存関係 – ゲームサーバー実行ファイルを実行するために必要なすべての依存関係ファイル。例として、アセット、設定ファイル、依存ライブラリがあります。

• インストールスクリプト – ゲームビルドを GameLift ホスティングサーバーにフルインストールするために必要なタスクを処理するスクリプトファイル。このファイルは、ビルドディレクトリのルートに配置する必要があります。インストールスクリプトは、フリート作成の一部として、1 回のみ実行されます。

インストールスクリプトを含む、ビルド内の任意のアプリケーションについて、AWS の他のサービスのリソースに安全にアクセスするようにセットアップできます。これを行う方法の詳細については、「フリートからの AWS リソースへのアクセス (p. 48)」を参照してください。

ビルドファイルをパッケージ化したら、ターゲットオペレーティングシステム (開発用に使用されたものではありません) のクリーンインストールでゲームサーバーを実行できることを確認します。このステップにより、必要な依存関係がすべてパッケージに含められ、インストールスクリプトが正確になります。

Note

アップロードするゲームのビルドファイルを Amazon S3 バケットに保存する場合は、ビルドファイルを .zip ファイルとしてパッケージ化する必要があります。この方法でアップロードする手順については、「Amazon S3 内のファイルを使用してビルドを作成する (p. 100)」を参照してください。

GameLift ビルドを作成するビルドを作成してファイルをアップロードするときは、いくつかのオプションがあります。

• ファイルディレクトリからビルドを作成する (p. 98)。これは、最もシンプルで一般的に使用される方法です。

• Amazon S3 内のファイルを使用してビルドを作成する (p. 100)。このオプションを使用すると、AWSアカウント下の S3 でビルドバージョンを管理できます。

いずれの方法でも、一意のビルド ID と他のメタデータを使用して新しいビルドリソースが作成されます。このビルドは、初期化済みステータスです。GameLift によって正常にゲームサーバーファイルが取得されると、ビルドは準備完了ステータスに移行されます。この時点で、デプロイするには、新しい GameLiftフリートを作成します (「カスタムゲームビルド用に GameLift フリートをデプロイする (p. 110)」を参照)。

フリートを作成するときに、フリートにデプロイするビルドを指定します。GameLift によって新しいフリートが設定されると、ビルドファイルが各フリートインスタンスにダウンロードされ、ビルドインストールスクリプト (提供されている場合) に基づいてインストールされます。ビルドファイルは、インスタンスの以下の場所にインストールされます。

• Windows フリートの場合: C:\game• Linux フリートの場合: /local/game

ファイルディレクトリからビルドを作成する

ローカルディレクトリなどの任意の場所に保存済みのパッケージ化されたゲームサーバーファイルを使用してゲームビルドを作成するには、AWS Command Line Interface (AWS CLI) コマンド upload-build を使用します。このコマンドで GameLift に新しいビルドレコードを作成し、指定した場所からファイルをアップロードします。

Version98

Page 105: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドカスタムサーバービルドをアップロードする

1. アップロードリクエストを送信します。 コマンドラインウィンドウで、次のコマンドとパラメータを入力します。

aws gamelift upload-build --operating-system [supported OS] --build-root [build path] --name [user-defined name of build] --build-version [user-defined build number] --region [region name]

• Build root – ビルドファイルのディレクトリパス。• Operating system – ゲームサーバービルドの OS を指定します。このビルド用に新しいフリート

が作成されると、フリートインスタンスは適切な OS で設定されます。GameLift は複数種類のWindows および Linux をサポートします。このパラメータはオプションです。オペレーティングシステムを指定しない場合、GameLift はデフォルト値 (WINDOWS_2012) を使用します。ビルドが作成されると、この値は後で更新することはできません。

• Name – 新しいビルドにわかりやすい名前を付けます。ビルド名は一意である必要はありません。ビルドリソースを更新することで、いつでもこの値を更新できます。

• Build version – このオプションのフィールドを使用して、ビルドファイルのバージョンの詳細を指定します。ゲームサーバーの新しいバージョンごとに新しいビルドリソースが必要になるため、この情報は重要な差別化要因となります。

• Region – ビルドを作成する GameLift 対応リージョンを特定します。フリートをデプロイする予定のリージョンにビルドを作成する必要があります。ゲームを複数のリージョンにデプロイする場合、各リージョンにビルドを作成する必要があります。

Note

複数のリージョンで作業する場合は、現在のデフォルトのリージョンを必ず確認するようにしてください。AWS コンソールでは、現在のリージョンが常に右上隅に表示され、その横に選択可能なリージョンのドロップダウンリストが表示されます。AWS CLI を使用する場合は、configure get (aws configure get region) を使用して現在のデフォルトを確認します。コマンド configure set (aws configure set region [region name]) を使用して、デフォルトのリージョンを変更します。

アップロードのリクエストに応じて、GameLift サービスはアップロードの進行状況を表示し、アップロードが正常に終了すると、新しいビルドレコード ID を返します。アップロードの時間はゲームファイルのサイズおよび接続速度によって異なります。

例:

aws gamelift upload-build --operating-system AMAZON_LINUX --build-root ~/mygame --name "My Game Nightly Build" --build-version "build 255" --region us-west-2

aws gamelift upload-build --operating-system WINDOWS_2012 --build-root "C:\mygame" --name "My Game Nightly Build" --build-version "build 255" --region us-west-2

2. ビルドのステータスを確認します。 upload-build (または DescribeBuild) を使用して新しいビルドレコード (現在のステータスを含む) を確認します。GameLift コンソールでステータスを確認することもできます。

コマンドラインウィンドウで、次のコマンドとパラメータを入力します。

aws gamelift describe-build --build-id [build ID returned with the upload request] --region [region name]

例:

Version99

Page 106: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドカスタムサーバービルドをアップロードする

aws gamelift describe-build --build-id "build-3333cccc-44dd-55ee-66ff-7777aaaa88bb" --region us-west-2

リクエストに応じて、GameLift サービスはリクエストされたビルドレコードを返します。このレコードには、アップロードされたファイルのステータスやサイズ、作成タイムスタンプなどのビルドメタデータのセットが含まれています。

Amazon S3 内のファイルを使用してビルドを作成する

AWS アカウント下の Amazon S3 バケットに保存済みのパッケージ化されたゲームサーバーファイルを使用してゲームビルドを作成するには、AWS CLI コマンド create-build を使用します。このオペレーションでは、GameLift に新しいビルドを作成し、指定した Amazon S3 バケットからビルドファイルを取得します。

1. ビルドファイルを Amazon S3 に保存します。 パッケージ化されたビルドファイルを含む .zip ファイルを作成し、これを AWS アカウント下の Amazon S3 バケットにアップロードします。バケットラベルとファイル名をメモしておきます。GameLift ビルドを作成するときに必要になります。

2. GameLift にビルドファイルへのアクセスを許可します。 Amazon GameLift アクセスのロールを設定する (p. 24) の手順に従って、IAM ロールを作成します。ロールでは、ロールを引き受けることのできるエンティティ (GameLift サービスなど) を指定し、AWS リソースへのアクセスを制限する一連のアクセス許可を定義します。ロールを作成したら、新しいロールの Amazon リソースネーム (ARN) をメモしておきます。ビルドを作成するときに必要になります。

3. 新しいビルドを作成するリクエストを送信します。 AWS CLI コマンド create-build (または AWSSDK オペレーション CreateBuild) を使用して、新しいビルドレコードを作成します。ビルドファイルが保存されている S3 の場所を指定します。コマンドラインウィンドウで、次のコマンドとパラメータを入力します。

aws gamelift create-build --operating-system [supported OS] --storage-location "Bucket=[S3 bucket label],Key=[Build zip file name],RoleArn=[Access role ARN]" --name [user-defined name of build] --build-version [user-defined build number] --region [region name]

• Build root – ビルドファイルのディレクトリパス。• Operating system – ゲームサーバービルドの OS を指定します。このビルド用に新しいフリート

が作成されると、フリートインスタンスは適切な OS で設定されます。GameLift は複数種類のWindows および Linux をサポートします。このパラメータはオプションです。オペレーティングシステムを指定しない場合、GameLift はデフォルト値 (WINDOWS_2012) を使用します。ビルドが作成されると、この値は後で更新することはできません。

• Name – 新しいビルドにわかりやすい名前を付けます。ビルド名は一意である必要はありません。ビルドリソースを更新することで、いつでもこの値を更新できます。

• Build version – このオプションのフィールドを使用して、ビルドファイルのバージョンの詳細を指定します。ゲームサーバーの新しいバージョンごとに新しいビルドリソースが必要になるため、この情報は重要な差別化要因となります。

• S3 の場所• Bucket – ビルドを含む S3 バケットの名前。例: "my_build_files"• Key – ビルドファイルを含む .zip ファイルの名前。例: "mygame_build_7.0.1, 7.0.2"

• Role ARN – 作成した IAM ロールに割り当てられた ARN。例: "arn:aws:iam::111122223333:role/GameLiftAccess"。

• Region – ビルドを作成する GameLift 対応リージョンを特定します。フリートをデプロイする予定のリージョンにビルドを作成する必要があります。ゲームを複数のリージョンにデプロイする場合、各リージョンにビルドを作成する必要があります。

Version100

Page 107: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー スクリプトをアップロードする

Note

複数のリージョンで作業する場合は、現在のデフォルトのリージョンを必ず確認するようにしてください。AWS コンソールでは、現在のリージョンが常に右上隅に表示され、その横に選択可能なリージョンのドロップダウンリストが表示されます。AWS CLI を使用する場合は、configure get (aws configure get region) を使用して現在のデフォルトを確認します。コマンド configure set (aws configure set region [region name]) を使用して、デフォルトのリージョンを変更します。

例:

aws gamelift create-build --operating-system WINDOWS_2012 --storage-location "Bucket=my_game_build_files,Key=mygame_build_101.zip,RoleArn=arn:aws:iam::111122223333:role/gamelift" --name "My Game Nightly Build" --build-version "build 101" --region us-west-2

リクエストへのレスポンスとして、GameLift サービスは新しく作成されたビルドのレコード (ビルドの現在のステータスなど) を返します。

ビルドファイルを更新するGameLift ビルド作成後は、ビルドに関連付けられたビルドファイルを変更することはできません。代わりに、新しいファイルセットごとに新しい GameLift ビルドを作成する必要があります。upload-build コマンドを使用してビルドファイルを指定すると、GameLift で各リクエストの新しいビルドレコードが自動的に作成されるため、特に何もする必要はありません。create-build コマンドを使用してビルドファイルを指定する場合は、新しいビルドの .zip ファイルを別の名前で Amazon S3 にアップロードし、その新しいファイル名を参照してビルドを作成します。

更新したビルドをデプロイする場合は、次のヒントを試してみてください。

• 必要に応じて、キューを使用し、フリートを交換します。 GameLift でゲームクライアントを設定するときは、フリートの代わりにキューを指定します。キューを使用する場合は、新しいビルドを実行するための新しいフリートを作成し、その新しいフリートをキューに追加して古いフリートを削除します。詳細については、「マルチリージョンキューの使用 (p. 135)」を参照してください。

• 新しいゲームのビルドにプレイヤーをそのまま移行するには、エイリアスを使用します。 ゲームクライアントを GameLift に統合するときは、フリート ID の代わりにフリートエイリアスを指定します。エイリアスを使用すると、わずか 3 つのステップでプレイヤーを新しいビルドに移行できます。(1) 新しいビルドを作成します。(2) 新しいビルドをデプロイするためのフリートを作成します。(3) 以前のフリートから新しいフリートにエイリアスのターゲットを変更します。詳細については、「Amazon GameLift フリートにエイリアスを追加する (p. 120)」を参照してください。

• ビルドの自動更新を設定します。GameLift のデプロイをビルドシステムに組み込むには、GameTech ブログの投稿「Automating Deployments to GameLift」で説明に従ってください。サンプルスクリプトも提供されています。

リアルタイムサーバー スクリプトを AmazonGameLift にアップロードするゲームの RealTime サーバースクリプトが完了したら、そのスクリプトファイルを リアルタイムサーバーでデプロイするために Amazon GameLift にアップロードします。そのためには、Amazon GameLift スクリプトレコードを作成し、そのスクリプトファイルを指定します。スクリプトファイルを指定する際、2つのオプションがあります。

• ローカルディレクトリに保存されている zip ファイルでスクリプトを作成します。

Version101

Page 108: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー スクリプトをアップロードする

• Amazon S3 バケットに保存されている zip ファイルでスクリプトを作成します。

新しいスクリプトを作成すると、Amazon GameLift は、一意のスクリプト ID(script-1111aaaa-22bb-33cc-44dd-5555eeee66ff など) を割り当て、作成時間のタイムスタンプ、アップロードしたファイルサイズなどのメタデータを追加します。アップロードの時間はスクリプトファイルのサイズおよび接続速度によって異なります。

この時点では、スクリプトは、新しい Amazon GameLift リアルタイムサーバー フリートでデプロイできます。Amazon GameLift は、サーバースクリプトをフリート内の各インスタンスにインストールし、スクリプトファイルを /local/game に配置します。

サーバースクリプトに関するフリートのアクティブ化の問題をトラブルシューティングする方法については、「フリートの問題をデバッグする (p. 121)」を参照してください。

スクリプトファイルをパッケージ化するサーバースクリプトには、1 つ以上のファイルを含めることができます。アップロードするには、JavaScript が依存するすべてのファイルを 1 つの zip ファイルにまとめます。

ローカルスクリプトファイルをアップロードするスクリプトを作成するには、Amazon GameLift コンソール、または AWS CLI ツールを使用します。

GameLift Console

スクリプトを作成するには

1. Amazon GameLift コンソール (https://console.aws.amazon.com/gamelift/) を開きます。2. GameLift メインメニューを使用して [スクリプト: スクリプトの作成] ページを開き、スクリプト

作成フォームにアクセスします。3. [スクリプト設定] に、スクリプトの名前とバージョン情報を入力します。スクリプトの内容を更

新できるため、バージョンデータは、更新内容を追跡する場合に便利です。4. [スクリプトコード] で、[スクリプトタイプ] の「Zip ファイル」を選択します。このオプションを

使用することで、ローカルディレクトリに保存されている zip ファイルを指定することができます。

5. スクリプトを含む zip ファイルを参照し、選択します。6. 新しいスクリプトレコードの定義が完了したら、Submit をクリックします。Amazon GameLift

は ID を新しいスクリプトに割り当て、指定した zip ファイルのアップロードを開始します。新しいスクリプトレコード (例: ステータス) は、コンソールの [コンソール] ページで確認できます。

AWS CLI

AWS CLI でスクリプトを作成するには、コマンドラインウィンドウを開き、create-script コマンドを使用して新しいスクリプト定義し、サーバースクリプトファイルをアップロードします。このコマンドの詳しいドキュメントについては、「AWS CLI コマンドリファレンス」を参照してください。AWS Command Line Interface ツールを取得してインストールします。

スクリプトを作成するには

1. この zip ファイルを、AWS CLI に呼び出すディレクトリに配置します。2. コマンドラインウィンドウで、zip ファイルが配置されているディレクトリに切り替えます。3. create-script コマンドとパラメータを入力します。-zip-file パラメータで、文字列

fileb:// を zip ファイルの名前に必ず追加します。これにより、ファイルはバイナリとして識別され、圧縮コンテンツは適切に処理されるようになります。

Version102

Page 109: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー スクリプトをアップロードする

aws gamelift create-script --name [user-defined name of script] --script-version [user-defined version info] --zip-file fileb://[name of zip file] --region [region name]

リクエストに応じて、Amazon GameLift サービスより、新しいスクリプトオブジェクトが返ります。

例:

aws gamelift create-script --name My_Realtime_Server_Script_1 --script-version 1.0.0 --zip-file fileb://myrealtime_script_1.0.0.zip --region us-west-2

新しいスクリプトを表示するには、describe-script を呼び出すか、Amazon GameLift コンソールで表示します。

スクリプトファイルを Amazon S3 にアップロードするスクリプトファイルは Amazon S3 バケットに保存して、そこから Amazon GameLift にアップロードすることができます。スクリプトを作成する場合、S3 バケットの場所を指定すると、Amazon GameLift によって、スクリプトファイルは S3 から直接取得されます。

スクリプトを作成するには

1. スクリプトファイルを Amazon S3 バケットに保存します。サーバースクリプトを含む zip ファイルを、管理する AWS アカウントの Amazon S3 バケットにアップロードします。バケット名とファイル名 (「キー」とも呼ばれる) を書き留めます。これらの情報は、Amazon GameLift スクリプトの作成時に必要になります。

2. スクリプトファイルへのアクセス権を Amazon GameLift に付与します。 Amazon GameLift アクセスのロールを設定する (p. 24) の指示に従って、サーバースクリプトを含む Amazon S3 バケットへのアクセスを Amazon GameLift に許可する IAM ロールを作成します。ロールを作成したら、新しいロールの Amazon リソースネーム (ARN) をメモしておきます。スクリプトを作成するときに必要になります。

3. スクリプトを作成します。 コンソールまたは AWS CLI を使用して新しいスクリプトレコードを作成します。

GameLift Console

1. GameLift メインメニューを使用して [スクリプト: スクリプトの作成] ページを開き、スクリプト作成フォームにアクセスします。

2. [スクリプト設定] に、スクリプトの名前とバージョン情報を入力します。スクリプトの内容を更新できるため、バージョンデータは、更新内容を追跡する場合に便利です。

3. [スクリプトコード] で、[スクリプトタイプ] (ユーザーストレージ) を選択します。このオプションでは、スクリプトファイルを含む S3 バケットを指定することができます。

4. S3 バケットのストレージの場所に関する情報を入力します。

• S3 バケット – バケット名。• S3 キー – バケット内のファイル (サーバースクリプトを含む zip ファイル) の名前。• S3 ロール ARN – ステップ 2 で作成した IAM ロールの ARN 値。• S3 オブジェクトのバージョン – (オプション) S3 ファイルの特定のバージョン番号。これ

は、S3 バケットでオブジェクトのバージョニングが有効になっており、最新バージョン以外のバージョンを指定する場合にのみ使用されます。

Version103

Page 110: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートの設定

5. 新しいスクリプトレコードの定義が完了したら、[送信] をクリックします。Amazon GameLift はID を新しいスクリプトに割り当て、指定した zip ファイルのアップロードを開始します。新しいスクリプトレコード (例: ステータス) は、コンソールの [コンソール] ページで確認できます。

AWS CLI

create-script コマンドを使用して、新しいスクリプトを定義し、サーバースクリプトファイルをアップロードします。このコマンドの詳しいドキュメントについては、「AWS CLI コマンドリファレンス」を参照してください。AWS Command Line Interface ツールを取得してインストールします。

1. コマンドラインウィンドウを開き、AWS CLI ツールを使用できるディレクトリに切り替えます。2. --name、--script-version、--storage-location パラメータを指定して create-

script コマンドを入力します。ストレージの場所のパラメータでは、スクリプトファイルのAmazon S3 バケットの場所を指定します。

aws gamelift create-script --name [user-defined name of script] --script-version [user-defined version info] --storage-location "Bucket=[S3 bucket name],Key=[name of zip file in S3 bucket],RoleArn=[Access role ARN]" --region [region name]

リクエストに応じて、Amazon GameLift サービスより、新しいスクリプトオブジェクトが返ります。

例:

aws gamelift create-script --name My_Realtime_Server_Script_1 --script-version 1.0.0 --storage-location "Bucket=gamelift-script,Key=myrealtime_script_1.0.0.zip,RoleArn=arn:aws:iam::123456789012:role/S3Access" --region us-west-2

新しいスクリプトを表示するには、describe-script を呼び出すか、Amazon GameLift コンソールで表示します。

スクリプトファイルを更新するメタデータまたはスクリプトの内容は、GameLift コンソールまたは AWS CLI コマンド update-script を使用していつでも更新できます。スクリプトの内容を更新すると、新しいスクリプトがすべての新しいゲームセッションに使用されますが、スクリプトの更新前に作成された現在実行中のゲームセッションには影響しません。

スクリプトがアカウントの Amazon S3 バケットに保存されている場合は、新しい zip ファイルをバケットにアップロードすることでスクリプトの内容を更新できます。スクリプトがローカルの zip ファイルとして提供されている場合は、新しいファイルを GameLift にアップロードする必要があります。

また、スクリプトの内容が保存される場所を変更できるため、新しいスクリプトレコードを作成する必要はありません。

Amazon GameLift フリートの設定セクションこのセクションでは、フリートの設計、構築、管理に役立つ詳細な情報を提供します。まず、ゲームの Amazon GameLift フリートを設計します。 (p. 105) を使用して、フリートを作成するためのさまざまなオプションについて確認します。

フリートとは、EC2 インスタンス群形式のホスティングリソースです。Amazon GameLift でゲームサーバーをホストするには、カスタムゲームサーバーまたは リアルタイムサーバー でフリートをデプロイしま

Version104

Page 111: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームのフリートを設計する

す。フリートのサイズは提供するインスタンスの数に応じて異なり、プレイヤーの需要を満たすために手動あるいは Auto Scaling のいずれかを使用してフリートサイズを調整できます。

本番稼働のほとんどのゲームには、複数のフリートが必要です。複数のフリートが必要です。たとえば、複数のリージョンでプレイヤーをホストする場合、またはゲームサーバービルドかスクリプトのバージョンが 2 つ以上ある場合 (無料とプレミアムバージョンなど) は、複数のフリートが必要となります。

ヒント

リアルタイムサーバー サンプルゲーム使用などの Amazon GameLift 機能を検索する方法について確認する (p. 31)。

フリートの準備が完了したら、フリートエイリアス (p. 120)を作成して、フリートをゲームセッションキュー (p. 135)に追加し、フリートの容量を管理 (p. 126)できます。

トピック• ゲームの Amazon GameLift フリートを設計します。 (p. 105)• カスタムゲームビルド用に GameLift フリートをデプロイする (p. 110)• リアルタイムサーバー フリートをデプロイする (p. 114)• フリートのレコードの管理 (p. 117)• Amazon GameLift フリートにエイリアスを追加する (p. 120)• フリートの問題をデバッグする (p. 121)• フリートインスタンスにリモートでアクセス (p. 124)

ゲームの Amazon GameLift フリートを設計します。このセクションのトピックでは、ゲームに最適なコンピューティングリソースのフリートを設計する上で役立つ情報を示します。適切なホスティングリソースを選択し、ランタイム構成を作成してそれらのリソースを使用する方法を決定するのに役立ちます。

ヒント

リアルタイムサーバー サンプルゲーム使用などの Amazon GameLift 機能を検索する方法について確認する (p. 31)。

トピック• コンピューティングリソースの選択 (p. 105)• フリートで複数のプロセスを実行する (p. 107)• スポットフリート統合ガイド (p. 109)

コンピューティングリソースの選択Amazon GameLift は、インスタンスと呼ばれる Amazon Elastic Compute Cloud (Amazon EC2) リソースを使用して、ゲームサーバーをデプロイし、プレイヤーのゲームセッションをホストします。新しいフリートを設定する際に、ゲームのニーズに合わせたインスタンスタイプ、およびそこでのゲームサーバープロセスの実行方法 (ランタイム設定経由) を決定します。フリートがアクティブになりゲームセッションをホストする準備ができたら、プレイヤーの人数に対応していつでもインスタンスを追加および削除できます。フリートのすべてのインスタンスは、同じタイプのリソースおよび同じランタイム設定を使用します。フリートのランタイム設定は編集できますが、リソースのタイプを変更することはできません。

フリートのリソースを選択する際は、ゲームのオペレーティングシステム、インスタンスタイプ (コンピューティングハードウェア)、オンデマンドインスタンスとスポットインスタンスのどちらを使用するかなど、いくつかの要因を考慮する必要があります。これらの問題のそれぞれについて、このトピックで詳

Version105

Page 112: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームのフリートを設計する

しく説明します。Amazon GameLift でのホスティング費用は、主に使用するリソースのタイプによることに注意してください。詳細については、Amazon GameLift 料金表を参照してください。

オペレーティングシステム

Amazon GameLift は、Microsoft Windows または Amazon Linux のいずれかで実行されるゲームサーバービルドをサポートします (「サポートされているゲームサーバーオペレーティングシステム (p. 25)」を参照)。ゲームビルドを Amazon GameLift にアップロードする際に、ゲームのオペレーティングシステムを指定します。ゲームビルドをデプロイするフリートを作成すると、Amazon GameLift によって自動的にそのビルドのオペレーティングシステムでインスタンスがセットアップされます。

リソースのコストは、使用するオペレーティングシステムによって異なります。サポートされるオペレーティングシステムで利用可能なリソースの詳細を確認してください。

• Microsoft Windows• Amazon Linux

インスタンスタイプ

フリートのインスタンスタイプによって、フリートの各インスタンスで使用されるハードウェアの種類が決まります。インスタンスタイプは、コンピューティング能力、メモリ、ストレージ、ネットワーキング機能のさまざまな組み合わせを提供します。Amazon GameLift を使用すると、幅広いインスタンスタイプのオプションから選択できます。インスタンスタイプ、現在の使用量、および使用制限を確認するには、「利用可能なインスタンスタイプのリスト」を表示するか、Amazon GameLift コンソールの [サービスの制限] ページを開きます。各インスタンスタイプの性能の詳細については、「Amazon EC2 インスタンスタイプ」を参照してください。提供されるインスタンスタイプはリージョンによって異なる可能性があります。

ゲームのインスタンスタイプを選択する際は、次の点を考慮します。(1) ゲームサーバービルドのコンピューティング要件、および (2) 各インスタンス上で実行する予定のサーバープロセス数。より大きいインスタンスタイプを使用することで、各インスタンスで複数のサーバープロセスを実行できます。これによりプレイヤーの需要に合わせて必要になるインスタンス数を削減できます。ただし、インスタンスタイプが大きいほど費用もかかります。「フリートで複数のプロセスを実行する (p. 107)」の詳細を確認してください。

オンデマンドインスタンスとスポットインスタンス

新しいフリートを作成する際に、オンデマンドインスタンスまたはスポットインスタンスを使用するようにフリートタイプを指定します。オンデマンドインスタンスとスポットインスタンスは、選択したインスタンスタイプに基づき、同一のハードウェアとパフォーマンスを提供し、同一の方法で設定されています。両者は、可用性とコストの点で異なります。

オンデマンドインスタンス

オンデマンドインスタンスシンプルです。インスタンスをリクエストすると、お客様専用にインスタンスが作成されます。オンデマンドインスタンスは、必要なときにいつでも取得し、必要な期間保持しておくことができます。オンデマンドインスタンスの費用は固定であり、使用時間に応じて支払いが発生します。長期契約はありません。

スポットインスタンス

スポットインスタンスをオンデマンドインスタンスの代わりに使用することで高い費用対効果を得ることができます。スポットインスタンスでは、現在使用されていない AWS コンピューティングキャパシティーが使用されます。その結果、インスタンスは安価になりますが、可用性も低下します。スポットインスタンスを使用する場合は、2 つの重要な点に注意が必要です。(1) スポット料金は各リージョンの各インスタンスタイプの需要と供給に基づいて変動します。(2) スポットインスタンスは、AWS がキャパシティーを回復する必要がある場合に 2 分間の通知後に AWS によって中断される可能性があります。

Version106

Page 113: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームのフリートを設計する

ただし、Amazon GameLift FleetIQ では、中断の可能性を大幅に抑え、ゲームサーバーの高い可用性を維持しながらコスト削減を実現できます。FleetIQ では、新しいゲームセッションごとに最適なリソースを見つける必要があります。フリートにスポットインスタンスがある場合、FleetIQ は、コスト削減率が最も高く、これまでの中断率が低いインスタンスの使用を優先します。そのため、スポットインスタンス t2 とc4 がフリートに混在しており、最近 t2 インスタンスの需要が高い場合、FleetIQ は t2 インスタンスの中断リスクを評価して、より大きな c4 インスタンスを使用することを選択できます。

FleetIQ のパフォーマンスを評価するには、キューの一連のメトリクスと、スポットインスタンスに関するインスタンス固有のメトリクスを使用します。詳細については、「Amazon GameLift のメトリクス (p. 187)」を参照してください。また、Amazon GameLift コンソールで、任意のインスタンスタイプの料金履歴を表示することもできます。[スポット履歴] ページでは、オンデマンドおよびスポット料金のグラフが表示され、スポットインスタンスと比較したコスト節約が計算されます。コントロールを使用してインスタンスタイプ、オペレーティングシステム、および時間範囲を選択します。

スポットインスタンスを使用する方法については「スポットフリート統合ガイド (p. 109)」を参照してください。

インスタンスのサービスクォータ

AWS は、AWS アカウントで保持できる Amazon EC2 インスタンス (オンデマンドまたはスポット) の総数を制限します。さらに、インスタンスタイプごとの上限もあります。この上限は、リージョン別に異なります。これらのクォータは、リクエストにより拡張できます。

サービスクォータに関する情報は以下で参照できます。

• AWS エンドポイントとクォータには GameLift やその他の AWS のサービスに関する一般的なクォータ情報があります。

• リージョン別のインスタンスタイプごとのクォータ値は、Amazon GameLift コンソールで参照できます。サービスの制限ページに移動し、該当するリージョンを選択して、使用可能なインスタンスタイプのクォータを表示します。このページには、リージョンのインスタンスタイプごとに現在の使用量の値も表示されます。

• リージョン別のインスタンスタイプのクォータ値を取得するには、AWS CLI コマンド describe-ec2-instance-limits を使用します。このアクションは、リージョンで現在アクティブなインスタンスの数も返します。

フリートで複数のプロセスを実行するこのトピックでは、フリートのランタイム設定をセットアップして各インスタンスで複数のプロセスを実行する方法について説明します。フリートの設定方法によっては、複数のプロセスを実行することでAmazon GameLift リソースの効果的な使用を詳細にコントロールできます。また、効率の向上とホスティングコストの全体的な削減を図ることができます。

複数のプロセスのための最適化

少なくとも、複数のプロセスを有効にするには以下を実行する必要があります。

• フリートにデプロイするすべてのゲームサーバー実行可能ファイルを含むビルドを作成 (p. 96)し、それを Amazon GameLift にアップロードします。ビルド内のすべてのゲームサーバーは同じプラットフォームで実行し、Amazon GameLift Server SDK for C++ バージョン 3.0.7 以降を使用して AmazonGameLift と統合する必要があります。

• 1 つ以上のサーバープロセス設定と複数の同時プロセスのあるランタイム設定を作成します。• このフリートでホストされているゲームに接続しているゲームクライアントは AWS SDK バージョン

2016-08-04 以降を使用して統合されている必要があります。

さらに、フリートのパフォーマンスを最適化するためにサーバーゲームに以下を実装します。

Version107

Page 114: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームのフリートを設計する

• Amazon GameLift がプロセスを効率よくリサイクルすることを確認するため、サーバープロセスシャットダウンシナリオを処理します。これを行わないと、サーバープロセスはエラーが発生するまでシャットダウンできません。• ProcessEnding() へのサーバー API 呼び出しで終了するシャットダウン手順をゲームサーバーコー

ドに追加します。• Amazon GameLift からの終了リクエストを適切に処理するため、コールバック関数OnProcessTerminate() をゲームサーバーコードに実装します。

• 「異常」なサーバープロセスをすばやくシャットダウンして再起動するには、「正常」と「異常」の違いを定義し、このステータスを Amazon GameLift に報告します。これを行うには、OnHealthCheck()コールバック関数をゲームサーバーコードに実装します。Amazon GameLift は 3 分間続けて異常と報告されたサーバープロセスを自動的にシャットダウンします。OnHealthCheck() を実装しない場合、Amazon GameLift はサーバープロセスを正常とみなします (サーバープロセスが応答しないときを除きます)。その結果、パフォーマンスの低いサーバープロセスは引き続き存在し、最終的にエラーが発生するまでリソースを使用します。

フリートが複数のプロセスを管理する方法

Amazon GameLift はフリートランタイム設定を使用してフリートの各インスタンスでどのプロセスを維持するかを管理します。ランタイム設定は、実際には 1 つまたは複数のサーバープロセス設定で構成されていて、それぞれが以下を識別します。

• フリートにデプロイされているゲームビルドの実行可能なサーバーのパスとファイル名• (オプション) 起動時にサーバープロセスに渡すパラメータ• インスタンスで同時に維持するためのこのサーバープロセスの数

インスタンスがフリートで起動すると、インスタンスはすぐにランタイム設定で必要なサーバープロセスを起動し始めます。インスタンスでのサーバープロセスの起動は数秒ずつずらされます。それで、インスタンスに設定されたサーバープロセスの総数によっては、性能を十分に発揮するまでに数分かかる場合があります。

時間が経過すると、サーバープロセスは終了します (Server SDK ProcessEnding() を呼び出して自己終了するか、Amazon GameLift によって終了されます)。インスタンスは、ランタイム設定で指定された数とタイプのサーバープロセスを実行していることを定期的に確認します。そうでない場合、インスタンスは、ランタイム設定の要求に合うよう必要に応じて自動的にサーバープロセスを起動します。その結果、サーバープロセスが終了すると、新しいサーバープロセスをサポートするようリソースが常にリサイクルされ、インスタンスは通常アクティブなサーバープロセスの補助を想定通りに維持します。

フリートのランタイム設定は、サーバープロセス設定を追加、変更、削除することでいつでも変更できます。Amazon GameLift がランタイム設定の変更を適用する方法は次の通りです。

1. インスタンスが正しいタイプおよび数のサーバープロセスを実行していることを確認する前に、まず、Amazon GameLift サービスにフリートのランタイム設定の最新バージョンをリクエストします。ランタイム設定を変更すると、インスタンスは新しいバージョンを取得し実装します。

2. インスタンスはアクティブなプロセスと現在のランタイム設定を確認し、相違を以下のように処理します。• 更新されたランタイム設定がサーバプロセスのタイプを削除します。ランタイム設定と一致しなく

なったアクティブなサーバープロセスは、終了するまで実行し続けます。• 更新したランタイム設定は、サーバープロセスタイプあたりの同時プロセスの数を減らします。この

タイプの過剰なサーバープロセスは終了するまで実行し続けます。• 更新されたランタイム設定は、新しいサーバープロセスタイプを追加し、または既存のタイプの同時

プロセス設定を増加させます。インスタンスがすでにサーバープロセスの最大数を実行していない限り、更新されたランタイム設定に合わせて新しいサーバープロセスがすぐに起動されます。最大数が実行されている場合、新しいサーバープロセスは、既存のプロセスが終了するときにのみ起動されます。

Version108

Page 115: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームのフリートを設計する

インスタンスごとのプロセスの数の選択同時プロセスの数を決める際、注意すべき制限が実質的に 3 つあります。

• Amazon GameLift は、各インスタンスの同時プロセスの最大数を制限します。ランタイム設定で 1 つか複数のサーバープロセス設定が指定されている場合、フリートのサーバープロセス設定のすべての同時プロセスの合計がこの上限を超えることはできません。

• 選択した Amazon EC2 インスタンスタイプによって、同時に実行できるプロセスの数が制限されて、許容できるパフォーマンスレベルが提供される場合があります。ゲームでさまざまな設定を試して、選択したインスタンスタイプにとって最適なプロセス数を見つける必要があります。選択に影響する要素としては、ゲームサーバーのリソース要件、各ゲームセッションでホストされるプレイヤーの数、プレイヤーが期待するパフォーマンスがあります。

• フリートのランタイム設定を変更するときは、設定した合計数を超える同時プロセスは AmazonGameLift によって実行されないことに注意してください。つまり、古いランタイム設定から新しい設定への移行は徐々に行われ、新しいプロセスは既存のプロセスが終了したときのみ開始します。たとえば、サーバー実行可能ファイル myGame.exe の 10 個の同時実行プロセスが実行されるように設定され、起動パラメータが "-loglevel=1" に設定されているフリートがあるとします。myGame.exe の 10 個の同時実行プロセスの実行を継続するが、起動パラメータを "-loglevel=4" に変更するように設定を更新します。フリートのインスタンスは既に 10 個のプロセスを実行しているため、Amazon GameLift は、古い起動パラメータのプロセスが終了するまで待機してから、新しい起動パラメータを使用したプロセスを開始します。

スポットフリート統合ガイドホスティングリソースのフリートを設定する場合、スポットインスタンスとオンデマンドインスタンスの両方を使用するオプションがあります。Amazon GameLift でスポットインスタンスを使用する方法の詳細については、「オンデマンドインスタンスとスポットインスタンス (p. 106)」を参照してください。スポットフリートを使用する場合は、ゲームの統合を若干調整する必要があります。

マッチメーキングに FlexMatch を使用していますか? マッチメーキングを配置する既存のキューでスポットフリートを使用できます。

スポットフリート用にゲームおよびホスティングのリソースを設定するには

1. 「スポット最適化」設定でキューを設計します。 キューを使用したフリート使用量の管理は常にベストプラクティスですが、スポットインスタンスを使用する場合は必須です。このステップでは、このキューが対象とするリージョンの識別、ゲームに適切なインスタンスタイプ (ハードウェア) の選択、および FleetIQ が優先するゲームセッション配置の決定が必要です。ベストプラクティスとしては、キューの各リージョンに、複数のスポットフリートと 1 つのオンデマンドフリートを含めます。スポットフリートには異なるインスタンスタイプを使用する必要があり、同じファミリー(c4.large、c4.xlarge など) であることが理想です。この設計により、ゲームサーバーの弾力性が向上します。スポットに最適化されたキューの設計に関するヘルプについては、「スポットインスタンスのキューの設計 (p. 139)」を参照してください。

キューのフリートを作成したら、キューの作成、フリート送信先の追加、フリートの優先順位の設定を行うことができます。新しいキューの作成および設定のヘルプについては、「キューの作成 (p. 141)」を参照してください。

2. スポット最適化キューのフリートを作成します。 キューを作成する前に、フリートを作成する必要があります。スポットフリートとオンデマンドフリートは、フリートタイプ送信先だけが異なる同一の設定にできます。新しいフリートの作成および設定のヘルプについては、「カスタムゲームビルド用に GameLift フリートをデプロイする (p. 110)」を参照してください。

Note

フリート名にフリートタイプ (スポットまたはオンデマンド) を含めることをお勧めします。こうすることで、フリートをキューに追加する場合などに、フリート名のリストで一目でスポットフリートを特定できます。

Version109

Page 116: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドカスタムゲームビルド用にフリートをデプロイする

3. ゲームクライアントまたはクライアントサービスがスポット最適化キューを使用して新しいゲームセッションを配置できるようにします。 1 つの特定のフリートにゲームセッションを作成するのではなく、キューによりゲームセッション配置を使用するようにゲームクライアントコードを更新します(まだ行っていない場合)。キューを使用してゲームセッションを配置することで、FleetIQ はコスト、中断率、およびプレイヤーレイテンシーに基づいて、利用可能な最善のフリートを選択できます。また、希望のフリートが一時的に利用できない場合は、フォールバックホスティングリソースも提供します。ゲームクライアントにゲームセッション配置を実装する方法については、「ゲームセッションの作成 (p. 51)」を参照してください。

4. ゲームサーバーでスポットの中断を処理できるようにします。 スポットインスタンスは、AWS がキャパシティーを必要とする場合に 2 分間の通知とともに中断されることがあります。これが発生した場合にゲームサーバーで中断を適切に処理し、プレイヤーへの影響を最小限に抑えます。AWS がスポットインスタンスを回収する場合、終了通知が最大で 2 分前に送信され、Amazon GameLift によって影響を受けるすべてのサーバープロセスに渡されます。これを行うには、Server SDK コールバック関数 onProcessTerminate() を呼び出します。このコールバック関数の実装は常にベストプラクティスですが、スポットインスタンスを使用する場合は特に重要です。このコールバックを実装することで、ゲームセッションを適切に終了するか、ゲームセッションとプレイヤーを新しい配置に移動させる方法を見つけるか、いずれかの方法を取ることができます。onProcessTerminate() の実装のヘルプについては、「サーバープロセスをシャットダウンする (p. 47)」トラブルシューティングを参照してください。

Note

AWS では、可能な限り終了するインスタンスが選択されると同時に通知を提供するように努力していますが、警告が到着する前にスポットインスタンスが終了される可能性があります。ゲームサーバーで予期しない中断を処理できるようにする必要があります。

5. スポットフリートとキューのパフォーマンスを評価します。 新しいキューが新しいゲームセッションにアクティブに配置されたら、Amazon GameLift メトリクスを使用してパフォーマンスを評価します。主なメトリクスには次のものがあります。

• 中断率 – スポットフリート内のインスタンスとゲームセッションで、スポットに関連した中断の回数と頻度を追跡します。これらのフリートメトリクス (InstanceInterruptions およびGameSessionInterruptions) は Amazon GameLift コンソールまたは Amazon CloudWatch を使用して表示できます (「フリートの Amazon GameLift メトリクス (p. 187)」を参照)。フリートメトリクスをメトリクスグループに集計している場合、CloudWatch 内でインスタンスタイプおよびオペレーティングシステム別の中断も確認できます。スポット関連の理由で中断されたゲームせセッションは、ステータスが「終了済み」、ステータス理由が「中断されました」になっています。

• キューの有効性 – 配置の成功率、平均待機時間、キューの深度などのキューメトリクスを追跡し、スポットフリートを使用することでキューのパフォーマンスに影響が出ないことを検証します。キューメトリクスは Amazon GameLift コンソールまたは Amazon CloudWatch を使用して表示できます。

• フリート使用率 – インスタンス上のデータ、ゲームセッションおよびプレイヤーセッションを含むフリートの使用率を監視します。オンデマンドフリートの使用率は、FleetIQ がスポットフリートへのリスクのある配置を避け、オンデマンドフリートにフォールバックする選択を行う指標になります。フリート使用率メトリクスは Amazon GameLift コンソールまたは Amazon CloudWatch を使用して表示できます。

カスタムゲームビルド用に GameLift フリートをデプロイするゲームに リアルタイムサーバー を使用している場合は、「リアルタイムサーバー フリートをデプロイする (p. 114)」を参照してください。

新しいフリートを作成しデプロイして、Amazon GameLift サービスにアップロードされて準備完了ステータスになっているゲームビルドのゲームサーバーをホストできます。

Version110

Page 117: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドカスタムゲームビルド用にフリートをデプロイする

フリートを作成する

フリートを作成するには、Amazon GameLift コンソールまたは AWS Command Line Interface (CLI) を使用します。

新しいフリートを作成した後は、フリートがデプロイされ、ゲームサーバーがインストールされ起動されるまでに、フリートのステータスがいくつかの段階を経ます。フリートが [アクティブ] ステータスに達すると、ゲームセッションをホストする準備ができています。フリート作成の問題については、「フリートの問題をデバッグする (p. 121)」を参照してください。

Console

1. Amazon GameLift コンソール (https://console.aws.amazon.com/gamelift/) を開きます。2. [ビルド] ページで、フリートの作成先のビルドを見つけ、ステータスが [準備完了] であることを

確認します。ビルドを選択して (ビルドステータスの左にあるオプションボタンを使用)、[ビルドからフリートを作成] をクリックします。

3. [フリートの作成] ページで、[フリートの詳細] を入力します。

• 名前 – フリートをリストとメトリクスで簡単に識別できるように、わかりやすい名前を付けます。

• 説明 – (オプション) さらに識別しやすくするために、このフリートの簡単な説明を追加します。

• フリートタイプ – このフリートでオンデマンドインスタンスを使用するかスポットインスタンスを使用するかを選択します。フリートのタイプの詳細については、「コンピューティングリソースの選択 (p. 105)」をご覧ください。

• メトリクスグループ – (オプション) 新規または既存のフリートメトリクスグループの名前を入力します。Amazon CloudWatch で Amazon GameLift メトリクスを追跡する場合は、複数のフリートのメトリクスを同じメトリクスグループに追加して、メトリクスを集約できます。

• インスタンスロールの ARN – (省略可能) このフリートに関連付ける IAM ロールの ARN 値を入力します。この設定で、フリート内のすべてのインスタンスはロールを引き受けることができます。これにより、定義した AWS のサービスのセットに対してアクセスが拡張されます。フリートからの AWS リソースへのアクセス (p. 48) 方法の詳細情報。

• 証明書タイプ – GameLift によってフリートの TLS 証明書が生成されるかどうかを選択します。フリートの TLS 証明書を使用して、ゲームクライアントが接続時にゲームサーバーに認証するようにでき、すべてのクライアント/サーバー通信を暗号化できます。TLS 対応のフリートのインスタンスごとに、GameLift によってこの証明書を使用して新しい DNS エントリも作成されます。これらのリソースを使用して、ゲームの認証と暗号化を設定します。フリートが作成された後は、証明書タイプを変更できません。

• バイナリ型 – バイナリ型「Build」を選択します。• ビルド – [ビルドからフリートを作成] 機能を使用している場合は、名前、ID、オペレーティン

グシステムなどのビルド情報が自動的に入力されます。それ以外の場合は、ドロップダウンリストから有効なビルドを選択します。

4. インスタンスタイプ。リストから Amazon EC2 インスタンスタイプを選択します。リストされているインスタンスタイプは、現在のリージョン、選択されたゲームビルドのオペレーティングシステム、フリートタイプ (オンデマンドまたはスポット) など、さまざまな要因によって異なります。インスタンスタイプの選択の詳細については、「コンピューティングリソースの選択 (p. 105)」をご覧ください。フリートが作成された後は、インスタンスタイプを変更できません。

5. プロセス管理。サーバープロセスの実行方法をインスタンス別に設定します。

a. サーバープロセスの割り当て

各インスタンスで実行するゲームサーバープロセスのタイプと数を指定します。フリートごとに、最低 1 つのサーバープロセス設定を定義する必要があります。複数の設定を持つことができます。たとえば、ゲームビルドに複数のサーバー実行可能ファイルがある場合は、実行可能ファイルごとに設定が必要です。

Version111

Page 118: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドカスタムゲームビルド用にフリートをデプロイする

• 起動パス – ビルドのゲームの実行可能ファイルへのパスを入力します。すべての起動パスは、ゲームサーバーの場所から始まる必要があり、これは使用しているオペレーティング システムによって異なります。Windows インスタンスでは、ゲームサーバーはパスC:\game に構築されます。Linux インスタンスでは、ゲームサーバーは /local/gameに構築されているため、すべての起動パスはこの場所から始める必要があります。例: C:\game\MyGame\server.exe または /local/game/MyGame/server.exe。

• 起動パラメータ – (オプション) 起動時にゲームの実行可能ファイルに情報を渡すことができます。一連のコマンドラインパラメータとして情報をここに入力します。例: +sv_port33435 +start_lobby。

• 同時プロセス – フリート内の各インスタンスで、この設定のサーバープロセスを同時に実行する数を示します。同時に実行するサーバープロセスの数に対する Amazon GameLiftの制限を確認します。制限は、ゲームサーバーで使用している SDK によって異なります。

サーバープロセス設定を入力したら、緑色のチェックマークボタンをクリックして設定を保存します。さらに追加のサーバープロセス設定が必要な場合は、[Add configuration] をクリックします。

インスタンスあたりの同時サーバープロセスの制限は、すべての設定の同時プロセスの合計に適用されます。1 つのプロセスに制限されている場合、使用できる設定は 1 つのみであり、同時プロセス数を 1 に設定する必要があります。フリートの設定が制限を超えると、フリートは有効化されません。

サーバープロセス設定のコレクションはフリートのランタイム設定と呼ばれます。これにより、特定の時間にこのフリートの各インスタンスで実行されているすべてのサーバープロセスが記述されます。

b. ゲームセッションアクティベーション

このフリートのインスタンスで新しいゲームセッションをアクティブ化する方法を決める際に以下の制限を設定します。

• 最大の同時ゲームセッションアクティベーション – 1 つのインスタンスで同時にアクティブ化できるゲームセッションの数を制限します。この制限は、複数の新しいゲームセッションを起動することでインスタンスで実行中の他のゲームセッションのパフォーマンスに影響が出る可能性がある場合に役立ちます。

• 新しいアクティベーションタイムアウト – Amazon GameLift で新しいゲームセッションのアクティベーションに許容する時間を制限します。ゲームセッションアクティベーションが完了せず、ステータスが ACTIVE に移行しない場合、ゲームセッションアクティベーションは停止されます。

6. EC2 ポート設定。このフリートにデプロイされているサーバープロセスに接続するインバウンドトラフィックに対するアクセス許可を定義するには、[ポート設定の追加] をクリックします。フリートの複数のポート設定を作成できます。アクセスを許可する前に、少なくとも 1 つのポート設定をフリートに設定する必要があります。現時点でポート設定を指定しない場合は、後でフリートを編集できます。

• ポート範囲 – インバウンド接続を許可するためにゲームサーバーで使用できるポート番号の範囲を指定します。ポートの範囲は nnnnn[-nnnnn] 形式で、1025〜60000 の値を使用する必要があります。例: 1500 または 1500-20000。

• プロトコル – フリートで使用する通信プロトコルのタイプを選択します。• IP アドレス範囲 – このフリートのインスタンスに有効な IP アドレスの範囲を指定しま

す。CIDR 表記を使用します。例: 0.0.0.0/0 (この例は、接続を試行するすべてのユーザーにアクセスを許可します)。

7. [保護ポリシー] セクションで、このフリートのインスタンスにゲームセッションの保護を適用するかどうかを選択します。保護されたインスタンスが、アクティブなゲームセッションをホストしているなら、縮小イベントの間に終了されません。個々のゲームセッション用の保護も設定で

Version112

Page 119: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドカスタムゲームビルド用にフリートをデプロイする

きます。フリートが作成されると、フリートを編集して、フリート全体の保護ポリシーを変更できます。

8. 新しいフリートの構成を設定したら、[フリートの初期化] をクリックします。Amazon GameLiftは新しいフリートに ID を割り当て、フリートのアクティベーションプロセスを開始します。新しいフリートのステータスを [フリート] ページで追跡できます。

フリートのステータスにかかわらず、フリートのメタデータと設定をいつでも更新できます (「フリートのレコードの管理 (p. 117)」を参照)。フリート容量を更新できるのは、フリートが [アクティブ]ステータスになった後に限られます (「Amazon GameLift フリートの容量のスケーリング (p. 126)」を参照)。

AWS CLI

AWS CLI でフリートを作成するには、コマンドラインウィンドウを開き、create-fleet コマンドを使用して新しいフリートを定義します。このコマンドの詳しいドキュメントについては、「AWSCLI コマンドリファレンス」を参照してください。AWS Command Line Interface ツールを取得してインストールします。

次の create-fleet リクエスト例では、以下のような特徴を持つ新しいフリートを作成します。

• フリートは、選択されたゲームビルドに必要なオペレーティングシステムを搭載した c5.large オンデマンドインスタンスを使用します。

• 指定されたゲームサーバービルドをデプロイします。これは準備完了状態である必要があります。• TLS 証明書の生成が有効になっています。• フリートの各インスタンスはゲームサーバーの 10 個の同一プロセスを同時に処理するため、各イ

ンスタンスで最大 10 個のゲームセッションを同時にホストできます。• 各インスタンスで、Amazon GameLift によって同時にアクティブ化が許可される新しいゲームセッ

ションは 2 つのみです。また、アクティブ化されたゲームセッションのうち 300 秒以内にプレイヤーをホストする準備が完了しないものは終了されます。

• このフリートのインスタンスでホストされているすべてのゲームセッションでは、ゲームセッションの保護が有効になっています。これは、個々のゲームセッションでオフにできます。

• 各プレイヤーは 15 分以内に 3 つの新しいゲームセッションを作成できます。• このフリートでホストされている各ゲームセッションには、指定された IP アドレスおよびポート範

囲内にある接続ポイントがあります。• このフリートのメトリクスは EMEAfleets メトリクスグループに追加されます。これは、(この例で

は) EMEA リージョンのすべてのフリートのメトリクスを結合します。

$ aws gamelift create-fleet --name "SampleFleet123" --description "The sample test fleet" --ec2-instance-type "c5.large" --fleet-type "ON_DEMAND" --build-id "build-92f061ed-27c9-4a02-b1f4-6f85b2385620" --certificate-configuration "CertificateType=GENERATED" --runtime-configuration "GameSessionActivationTimeoutSeconds=300, MaxConcurrentGameSessionActivations=2, ServerProcesses=[{LaunchPath=C:\game\Bin64.dedicated\MultiplayerSampleProjectLauncher_Server.exe, Parameters=+sv_port 33435 +start_lobby, ConcurrentExecutions=10}]" --new-game-session-protection-policy "FullProtection" --resource-creation-limit-policy "NewGameSessionsPerCreator=3, PolicyPeriodInMinutes=15" --ec2-inbound-permissions "FromPort=33435,ToPort=33435,IpRange=0.0.0.0/0,Protocol=UDP" "FromPort=33235,ToPort=33235,IpRange=0.0.0.0/0,Protocol=UDP"

Version113

Page 120: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー フリートをデプロイする

--MetricGroups "EMEAfleets"

コピー可能バージョン:

aws gamelift create-fleet --name "SampleFleet123" --description "The sample test fleet" --fleet-type "ON_DEMAND" --MetricGroups "EMEAfleets" --build-id "build-92f061ed-27c9-4a02-b1f4-6f85b2385620" --certificate-configuration "CertificateType=GENERATED" --ec2-instance-type "c5.large" --runtime-configuration "GameSessionActivationTimeoutSeconds=300,MaxConcurrentGameSessionActivations=2,ServerProcesses=[{LaunchPath=C:\game\Bin64.dedicated\MultiplayerSampleProjectLauncher_Server.exe,Parameters=+sv_port 33435 +start_lobby,ConcurrentExecutions=10}]" --new-game-session-protection-policy "FullProtection" --resource-creation-limit-policy "NewGameSessionsPerCreator=3,PolicyPeriodInMinutes=15" --ec2-inbound-permissions "FromPort=33435,ToPort=33435,IpRange=0.0.0.0/0,Protocol=UDP" "FromPort=33235,ToPort=33235,IpRange=0.0.0.0/0,Protocol=UDP"

フリート作成のリクエストが成功すると、リクエストした構成設定と新しいフリート ID が含まれたフリート属性のセットが Amazon GameLift から返されます。Amazon GameLift は即座にフリートアクティベーションプロセスを開始し、フリートのステータスを新規に設定します。フリートのステータスをトラッキングし、他のフリート情報を表示するには、次の CLI コマンドを使用します。

• describe-fleet-events• describe-fleet-attributes• describe-fleet-capacity• describe-fleet-port-settings• describe-fleet-utilization• describe-runtime-configuration

以下のコマンドを使用して、必要に応じてフリートの容量と他の設定を変更できます。

• update-fleet-attributes• update-fleet-capacity• update-fleet-port-settings• update-runtime-configuration

リアルタイムサーバー フリートをデプロイするゲームのゲームセッションをホストするには、RealTime ゲームサーバーの新しいフリートを作成します。リアルタイムサーバー フリートを作成するには、RealTime スクリプトを作成して、Amazon GameLift にアップロードする必要があります。カスタムゲームサーバービルドがある場合は、カスタムゲームビルド用に GameLift フリートをデプロイする (p. 110) で、このビルドを使用したフリートの作成方法を参照してください。フリートを作成するには、Amazon GameLift コンソール、または AWS Command LineInterface (CLI) を使用します。フリートの設定は、フリートを編集する (p. 117)ことで変更できます。

リアルタイムフリートの作成 (コンソール)Amazon GameLift コンソールでリアルタイムフリートを作成するには:

1. Amazon GameLift コンソール (https://console.aws.amazon.com/gamelift/) を開きます。[フリート: フリートの作成] ページに移動して、新しいフリートを設定します。

2. フリートの詳細。

• 名前 – フリートをリストとメトリクスで簡単に識別できるように、わかりやすい名前を付けます。

Version114

Page 121: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー フリートをデプロイする

• 説明 – (オプション) さらに識別しやすくするために、このフリートの簡単な説明を追加します。• フリートタイプ – このフリートでオンデマンドインスタンスを使用するかスポットインスタンスを

使用するかを選択します。フリートのタイプの詳細については、「コンピューティングリソースの選択 (p. 105)」をご覧ください。

• メトリクスグループ – (オプション) 新規または既存のフリートメトリクスグループの名前を入力します。Amazon CloudWatch で Amazon GameLift メトリクスを追跡する場合は、複数のフリートのメトリクスを同じメトリクスグループに追加して、メトリクスを集約できます。

• インスタンスロールの ARN – (省略可能) このフリートに関連付ける IAM ロールの ARN 値を入力します。この設定で、フリート内のすべてのインスタンスはロールを引き受けることができます。これにより、定義した AWS のサービスのセットに対してアクセスが拡張されます。フリートからのAWS リソースへのアクセス (p. 48) 方法の詳細情報。

• 証明書タイプ – GameLift によってフリートの TLS 証明書が生成されるかどうかを選択します。リアルタイムフリートに対してこの機能を有効にすると、GameLift によってクライアント/サーバー接続が自動的に認証され、ゲームクライアントとサーバーの間のすべての通信が暗号化されます。フリートが作成された後は、証明書タイプを変更できません。

• バイナリ型 – バイナリ型「Script」を選択します。• スクリプト – ドロップダウンリストからデプロイするリアルタイムスクリプトを選択します。

3. インスタンスタイプ。リストから Amazon EC2 インスタンスタイプを選択します。リストされているインスタンスタイプは、現在のリージョン、選択されたゲームビルドのオペレーティングシステム、フリートタイプ (オンデマンドまたはスポット) など、さまざまな要因によって異なります。インスタンスタイプの選択の詳細については、「コンピューティングリソースの選択 (p. 105)」をご覧ください。フリートが作成された後は、インスタンスタイプを変更できません。

4. プロセス管理。サーバープロセスの実行方法をインスタンス別に設定します。

a. サーバープロセスの割り当て。

各インスタンスで実行するゲームサーバープロセスのタイプと数を指定します。フリートごとに、最低 1 つのサーバープロセス設定を定義する必要があります。複数の設定を持つことができます。たとえば、アップロードしたリアルタイムスクリプト内の別のファイルを使用してプロセスを起動する場合は、起動するプロセスの種類ごとに設定が必要です。

• 起動パス – 起動するスクリプトファイルの名前を入力します。起動スクリプトファイルで、Init() 関数を呼び出します。デプロイ時、アップロードされたリアルタイムスクリプトは解凍され、/local/game/ ディレクトリに保存されるため、スクリプトファイル名を指定するだけで済みます。例: MyRealtimeLaunchScript.js。

• 起動パラメータ – (オプション) 起動時にゲームのリアルタイムスクリプトに情報を渡すことができます。一連のコマンドラインパラメータとして情報を入力します。例: +mapWinter444。

• 同時プロセス – フリート内の各インスタンスで、この設定のサーバープロセスを同時に実行する数を示します。

サーバープロセス設定を入力したら、右側の緑色のチェックマークボタンをクリックして設定を保存します。さらに追加のサーバープロセス設定が必要な場合は、[Add configuration] をクリックします。

同時サーバープロセス数については、Amazon GameLift の制限を確認してください。インスタンスあたりの同時サーバープロセスの制限は、すべての設定の同時プロセスの合計に適用されます。たとえば、1 つのプロセスに制限されている場合、使用できる設定は 1 つのみであり、同時プロセス数を 1 に設定する必要があります。この制限を超えるようにフリートが設定されている場合、フリートは有効化されません。

サーバープロセス設定のコレクションはフリートのランタイム設定と呼ばれます。これにより、特定の時間にこのフリートの各インスタンスで実行されているすべてのサーバープロセスが記述されます。

Version115

Page 122: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー フリートをデプロイする

b. ゲームセッションアクティベーション (オプション):

このフリートのインスタンスで新しいゲームセッションをアクティブ化する方法を決める際に以下の制限を設定します。

• 最大の同時ゲームセッションアクティベーション – 1 つのインスタンスで同時にアクティブ化できるゲームセッションの数を制限します。この制限は、複数の新しいゲームセッションを起動することでインスタンスで実行中の他のゲームセッションのパフォーマンスに影響が出る可能性がある場合に役立ちます。

• 新しいアクティベーションタイムアウト – 新しいゲームセッションのアクティベーションでAmazon GameLift によって許容される時間を制限します。ゲームセッションのステータスがACTIVE に移行しない場合、ゲームセッションアクティベーションプロセスは停止します。

5. 保護ポリシー (オプション)。このフリートのインスタンスに、ゲームセッション保護を適用するかどうかを選択します。保護されたインスタンスが、アクティブなゲームセッションをホストしている場合は、スケールダウンイベントの間に終了することはありません。この設定を使用すると、フリート全体の保護ポリシーが適用されます。ゲームセッションを作成するときに、個々のゲームセッションに保護を設定することもできます。

6. 新しいフリートの設定が完了したら、[フリートの初期化] をクリックします。Amazon GameLift は新しいフリートに ID を割り当て、フリートのアクティベーションプロセスを開始します。新しいフリートのステータスを [フリート] ページで表示できます。フリートがアクティブ化すると、必要に応じてフリートの容量の変更 (p. 129)、ランタイム設定の変更、他の設定の変更ができます。

リアルタイムフリートの作成 (AWS CLI)AWS CLI でリアルタイムフリートを作成するには、コマンドラインウィンドウを開き、create-fleetコマンドを使用して新しいフリートを定義します。このコマンドの詳しいドキュメントについては、「AWS CLI コマンドリファレンス」を参照してください。AWS Command Line Interface ツールを取得してインストールします。

次の create-fleet リクエスト例では、以下のような特徴を持つ新しいフリートを作成します。

• c5.large スポットインスタンスがフリートで使用されます。• また、指定されたリアルタイムスクリプトがデプロイされます。• フリートの各インスタンスはリアルタイムスクリプトの 10 個の同一プロセスを同時に処理するため、

各インスタンスで最大 10 個のゲームセッションを同時にホストできます。• 各インスタンスで、Amazon GameLift によって同時にアクティブ化が許可される新しいゲームセッショ

ンは 2 つのみです。また、アクティブ化されたゲームセッションのうち 60 秒以内にプレイヤーをホストする準備が完了しないものは終了されます。

• このフリートのインスタンスでホストされているすべてのゲームセッションでは、ゲームセッションの保護が有効になっています。これは、個々のゲームセッションでオフにできます。

• 各プレイヤーは 15 分以内に 3 つの新しいゲームセッションを作成できます。• このフリートのメトリクスは EMEAfleets メトリクスグループに追加されます。これは、(この例では)

EMEA リージョンのすべてのフリートのメトリクスを結合します。

Note

リアルタイムサーバーフリートの場合、Amazon GameLift では、リアルタイムサーバーが使用する TCP と UDP の範囲が自動的に設定されます。自動設定を表示するには、CLI コマンドdescribe-fleet-port-settings を呼び出します。

$ aws gamelift create-fleet --name "SampleRealtimeFleet123"

Version116

Page 123: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートのレコードの管理

--description "A sample Realtime fleet" --ec2-instance-type "c5.large" --fleet-type "SPOT" --script-id "script-1111aaaa-22bb-33cc-44dd-5555eeee66ff" --certificate-configuration "CertificateType=GENERATED" --runtime-configuration "GameSessionActivationTimeoutSeconds=60, MaxConcurrentGameSessionActivations=2, ServerProcesses=[{LaunchPath=/local/game/myRealtimeLaunchScript.js, Parameters=+map Winter444, ConcurrentExecutions=10}]" --new-game-session-protection-policy "FullProtection" --resource-creation-limit-policy "NewGameSessionsPerCreator=3, PolicyPeriodInMinutes=15" --MetricGroups "EMEAfleets"

コピー可能バージョン:

aws gamelift create-fleet --name "SampleRealtimeFleet123" --description "A sample Realtime fleet" --ec2-instance-type "c5.large" --fleet-type "SPOT" --script-id "script-1111aaaa-22bb-33cc-44dd-5555eeee66ff" --certificate-configuration "CertificateType=GENERATED" --runtime-configuration "GameSessionActivationTimeoutSeconds=60,MaxConcurrentGameSessionActivations=2,ServerProcesses=[{LaunchPath=/local/game/myRealtimeLaunchScript.js,Parameters=+map Winter444,ConcurrentExecutions=10}]" --new-game-session-protection-policy "FullProtection" --resource-creation-limit-policy "NewGameSessionsPerCreator=3,PolicyPeriodInMinutes=15" --MetricGroups "EMEAfleets"

フリート作成のリクエストが成功すると、リクエストした構成設定と新しいフリート ID が含まれたフリート属性のセットが Amazon GameLift から返されます。Amazon GameLift は即座にフリートアクティベーションプロセスを開始し、フリートのステータスを新規に設定します。フリートのステータスをトラッキングし、他のフリート情報を表示するには、次の CLI コマンドを使用します。

• describe-fleet-events• describe-fleet-attributes• describe-fleet-capacity• describe-fleet-port-settings• describe-fleet-utilization• describe-runtime-configuration

フリートがアクティブ化すると、次のコマンドを使用して、必要に応じてフリートの容量の変更や、他の設定の変更ができます。

• update-fleet-attributes• update-fleet-capacity• update-fleet-port-settings• update-runtime-configuration

フリートのレコードの管理Amazon GameLift コンソールまたは AWS CLI を使用して、既存のフリートを管理します。これには、フリートの属性、ポート設定、およびランタイム設定の更新が含まれます。フリートを削除することもできます。

Version117

Page 124: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートのレコードの管理

フリートの更新Amazon GameLift コンソールの [フリートの編集] ページを使用して フリートの設定を変更します。ビルド ID とインスタンスタイプを除いて、フリートのすべてのプロパティを変更できます。スケーリング設定を変更するには、「Auto Scaling フリート容量 (p. 130)」を参照してください。

Note

アクティブなフリートをデプロイしたビルドが削除済みまたはエラー状態になっている場合があります。これは、フリートのステータスやゲームセッションをホストする機能には影響しません。このような場合は、ビルドのステータスとして [削除済み] または [エラー] (ビルド情報の取得中にエラーが発生した場合) と表示されます。

GameLift Console

フリート設定を更新するには

1. Amazon GameLift コンソール (https://console.aws.amazon.com/gamelift/) を開きます。2. メニューバーで [フリート] を選択して、フリートのリストを表示し、更新するフリートの名前を

クリックします。フリートを編集するには、そのステータスが ACTIVE になっている必要があります。

3. フリートの詳細ページで、[アクション] の [フリートの編集] を選択します。4. [フリートの編集] ページで、以下の更新を行うことができます (フィールドの詳細な説明について

は、「カスタムゲームビルド用に GameLift フリートをデプロイする (p. 110)」を参照してください)。

• 名前や説明などのフリート属性を変更します。• メトリクスグループを追加または削除します。これらのグループは、複数のフリートの集計さ

れた Amazon GameLift メトリクスを追跡するために Amazon CloudWatch で使用されます。• サーバープロセスを実行する方法とゲームセッションをホストする方法を変更します。そのた

めに、サーバープロセスの割り当て (ランタイム設定) とゲームセッションアクティベーションを更新します。

• このフリートのサーバープロセスに接続するための EC2 ポート設定を更新します。• リソース作成制限の設定を更新します。• ゲームセッション保護をオンまたはオフにします。

5. [Submit (送信)] をクリックして変更を保存します。

AWS CLI

以下の AWS CLI コマンドを使用してフリートを更新します。

• update-fleet-attributes• update-fleet-port-settings• update-runtime-configuration

フリートを削除する不要になったフリートは削除できます。フリートを削除すると、ゲームセッションとプレイヤーセッションに関連付けられているすべてのデータと、収集されたメトリクスデータも完全に削除されます。別の方法として、フリートを保持し、Auto Scaling を無効にして、手動でフリートをインスタンスゼロまでスケーリングできます。

Version118

Page 125: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートのレコードの管理

Note

削除するフリートに VPC ピア接続がある場合は、最初に、CreateVpcPeeringAuthorization を呼び出して承認をリクエストする必要があります。VPC ピア接続を明示的に削除する必要はありません。これはフリート削除プロセスの一環として行われます。

フリートを削除するには、Amazon GameLift コンソールまたは AWS CLI ツールを使用できます。

GameLift Console

フリートを削除するには

1. Amazon GameLift コンソール (https://console.aws.amazon.com/gamelift/) を開きます。2. メニューバーで [フリート] を選択して、フリートのリストを表示し、削除するフリートの名前を

クリックします。[アクティブ] または [エラー] ステータスのフリートのみを削除できます。3. 選択したフリートの [フリート] 詳細ページで、フリートのアクティブインスタンスがゼロである

ことを確認します。フリートにまだインスタンスがある場合は、[スケーリング] タブに移動して以下の手順を実行します。

• [Disable all scaling policies for the fleet (フリートのすべてのスケーリングポリシーを無効にする)] チェックボックスをオンにします。この操作により、手動のスケーリング設定の妨げになるすべての Auto Scaling が停止されます。

• 必要なインスタンス数を手動で「0」に調整します。

フリートがスケールダウンするのに数分かかることがあります。いずれかのインスタンスに保護されたアクティブなゲームセッションがある場合、ゲームセッションが終了するのを待つか、アクティブなゲームセッションの保護を停止する必要があります (この操作はコンソールでは行うことができません。「UpdateGameSession」を参照してください)。

4. フリートがアクティブインスタンスゼロまでスケールダウンされたら、フリートを削除できます。[フリート] 詳細ページの [アクション] で、[フリートの終了] を選択します。

5. [フリートの終了] ダイアログボックスで、フリートの名前を入力して、削除を確定します。6. [Delete (削除)] をクリックします。

AWS CLI

フリートを削除するには

AWS Command Line Interface ツールを取得してインストールします。

1. コマンドラインウィンドウで、describe-fleet-capacity を呼び出して、削除されるフリートがアクティブインスタンスゼロまでスケールダウンされていることを確認します。フリートにまだアクティブインスタンスがある場合:

a. Auto Scaling を無効にするには、stop-fleet-actions を呼び出します。b. update-fleet-capacity を呼び出し、desired-instances パラメータを「0」に設定します。c. フリートがアクティブインスタンスゼロまでスケールダウンされるのを待ちます。これには

数分かかる場合があります。いずれかのインスタンスに保護されたアクティブなゲームセッションがある場合は、ゲームセッションが終了するのを待つか、アクティブなゲームセッションの保護を停止する必要があります (「update-game-session」を参照)。

2. フリートがスケールダウンされたら、delete-fleet を呼び出してフリートを削除します。

Version119

Page 126: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートにエイリアスを追加する

Amazon GameLift フリートにエイリアスを追加するAmazon GameLift の エイリアスは、フリート指定を抽出するために使用されます。フリート指定はAmazon GameLift に、プレイヤー用新規ゲームセッションの作成時に使用可能なリソースを検索する場所を指定します。特定のフリート ID の代わりにエイリアスを使用すると、エイリアスのターゲットロケーションを変更することで、あるフリートから別のフリートへのプレイヤートラフィックの切り替えがより簡単でシームレスになります。

エイリアスのルーティング戦略は 2 種類があります。

• シンプル – シンプルエイリアスは、プレイヤートラフィックを指定されたフリート ID にルーティングします。エイリアスのフリート ID はいつでも更新することができます。

• ターミナル – ターミナルエイリアスはトラフィックをフリートに解決しません。代わりに、クライアントにメッセージを返します。たとえば、古いクライアントを使用しているプレイヤーを、アップデートを入手できる場所に誘導する場合があります。

フリートには有効期限があり、さまざまな理由で、ゲームの存続中にフリートを切り替える必要があります。具体的には、フリートのゲームサーバービルドを更新したり、既存のフリートの特定のコンピューティングリソース属性 (インスタンスタイプ、スポット/オンデマンドの使用状況) を変更することはできません。代わりに、変更された内容で新しいフリートを作成し、プレイヤーを新しいフリートに切り替える必要があります。エイリアスを使用すると、フリートの切り替えがゲームに与える影響が最小限になり、プレイヤーから見えなくなくなります。

エイリアスは主に、キューを使用しないゲームで役に立ちます。キュー内のフリートの切り替えは、単純に新しいフリートを作成し、それをキューに追加して古いフリートを削除するだけであり、どれもプレイヤーからは見えません。対照的に、キューを使用しないゲームクライアントでは、Amazon GameLift サービスと通信する際に使用するフリートを指定する必要があります。エイリアスを使用しない場合、フリートの切り替えにはゲームコードの更新が必要であり、場合によっては更新されたゲームクライアントをプレイヤーに配布する必要があります。エイリアスを使用すれば、どちらも回避できます。

新しいエイリアスの作成新しいエイリアスを作成してフリートに解決できます。

新規エイリアスを作成するには

1. Amazon GameLift コンソール (https://console.aws.amazon.com/gamelift/) を開きます。2. メニューバーから [エイリアス] を選択します。3. [エイリアス] ページで、[エイリアスの作成] をクリックします。4. [エイリアスの作成] ページの [エイリアスの詳細] セクションで、以下を実行します。

• エイリアス名 – カタログ内で簡単にエイリアスを識別できるように、わかりやすい名前を入力します。

• 説明 – (オプション) さらに識別しやすくするために、エイリアスの簡単な説明を入力します。5. [ルーティングオプション] のセクションの [タイプ] では、[シンプル] または [ターミナル] を選択しま

す。

• [シンプル] を選択した場合、エイリアスと関連付けるフリートを選択します。シンプルなエイリアスは、関連するフリートにプレイヤーのトラフィックをルーティングします。

• [ターミナル] を選択した場合、プレイヤーに表示されるメッセージを入力します。ターミナルエイリアスはフリートで解決することはなく、メッセージをクライアントへ送信するだけです。

6. [エイリアスの設定] をクリックします。

Version120

Page 127: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートの問題をデバッグする

エイリアスの編集Amazon GameLift コンソールの [エイリアスの編集] ページを使用してエイリアスの情報を更新します。

エイリアスを編集するには

1. Amazon GameLift コンソール (https://console.aws.amazon.com/gamelift/) を開きます。2. メニューバーから [エイリアス] を選択します。3. [エイリアス] ページで、編集するエイリアスの名前をクリックします。4. 選択したエイリアスのページの [アクション] で [エイリアスの編集] を選択します。5. [エイリアスの編集] ページで、以下の編集ができます。

• エイリアス名 – エイリアスのわかりやすい名前。• 説明 – エイリアスの簡単な説明。• タイプ – プレイヤーのトラフィックのルーティング戦略。[シンプル] を選択して関連するフリート

を変更するか、[ターミナル] を選択して終了メッセージを編集します。6. 送信をクリックします。

フリートの問題をデバッグするこのトピックでは、フリート関連の問題に関するガイダンスを提供します。その他のトラブルシューティングについては、フリートインスタンスにリモートでアクセスできます。「フリートインスタンスにリモートでアクセス (p. 124)」を参照してください。

フリート作成の問題フリート作成の仕組み新しいフリートを作成すると、Amazon GameLift サービスはフリートの設定に基づいて一連のタスクを実行し、1 つのインスタンスを準備します。フリート作成の各フェーズを完了するたびに、フリートに関する一連のイベントが生成され、フリートの現在のステータスが示されます。Amazon GameLift コンソールを使用してフリート作成に関するイベントを含むすべてのイベントを追跡できます (フリートの詳細ページの [イベント] タブを参照してください)。

フリート作成中に問題が発生すると、フリートのステータスは「エラー」となり、参考となるエラーメッセージングが表示されます。フリート作成が失敗したフェーズも指標として役立つ場合があります。フリート作成の各フェーズは以下のとおりです。

• 新規 – フリートのレコードを作成します。最初のインスタンスにリソースが割り当てられます。• ダウンロード中 – ゲームのビルドファイルをインスタンスにダウンロードして抽出します。• 検証しています – ダウンロードしたゲームのビルドファイルを検証します。• 構築 – インストールスクリプト (ある場合) を使用して、ゲームサーバービルドをインスタンスにインス

トールします。• アクティブ化中 – フリートのランタイム設定に基づいてサーバープロセスを開始します。少なくとも 1

つのプロセスが Amazon GameLift と通信し、ゲームセッションをホストする準備状態をレポートする必要があります。

1 つのサーバープロセスが、フリートの準備ができたことを Amazon GameLift に通知するとすぐに、フリートステータスがアクティブに変わります。

よくある問題ダウンロードと検証

Version121

Page 128: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートの問題をデバッグする

このフェーズでは、抽出したビルドファイルに問題がある場合、インストールスクリプトが実行しない場合、またはランタイム設定で指定した実行可能ファイルがビルドファイルに含まれていない場合、フリートの作成が失敗することがあります。Amazon GameLift は、これらの各問題に関するログを提供します。

ログから問題を確認できない場合、問題の原因は内部のサービスエラーである可能性があります。この場合は、再度フリートを作成してみます。問題が解決しない場合は、ゲームビルドの再アップロードを検討します (ファイルが破損している場合があるため)。Amazon GameLift サポートに問い合わせるか、フォーラムで質問を投稿することもできます。

構築

構築フェーズ中に失敗した場合は、ほぼ確実に、ゲームビルドファイルやインストールスクリプトに問題があります。ゲームビルドファイルを Amazon GameLift にアップロードして、適切なオペレーティングシステムが搭載されたマシンにインストールできることを確認します。既存の開発環境ではなく、新規のOS インストールを使用してください。

アクティブ化

フリート作成に伴う最も一般的な問題は、アクティブ化フェーズで発生します。このフェーズでは、たとえば、ゲームサーバーの実行可能性、ランタイム構成設定がテストされています。また、Server SDK を使用して Amazon GameLift サービスとやり取りするための、ゲームサーバーの機能もテストされています。フリートのアクティブ化中に発生する一般的な問題は以下のとおりです。

サーバープロセスが開始されない。

最初に、起動パスとオプションの起動パラメータをフリートのランタイム設定に正しく設定していることを確認します。フリートの現在のランタイム設定を表示するには、Amazon GameLift コンソールで [フリート] 詳細ページの [容量の割り当て (p. 184)] タブを使用するか、AWS CLI コマンドdescribe-runtime-configuration を呼び出します。ランタイム設定が正しいと思われる場合は、ゲームビルドファイルやインストールスクリプトの問題をチェックします。

サーバープロセスが起動するが、フリートがアクティブにならない。

サーバープロセスが正常に開始して実行するが、フリートが「アクティブ」ステータスに移行しない場合、サーバープロセスがゲームセッションをホストする準備ができていることを AmazonGameLift に通知していない可能性があります。ゲームサーバーが適切にサーバー API アクションProcessReady() (「サーバープロセスを準備する (p. 45)」を参照) を呼び出していることを確認します。

VPC ピア接続リクエストが失敗する。

作成されたフリートで VPC ピア接続が使用される場合 (「VPC ピア接続を使用して新しいフリートを作成する (p. 175)」を参照)、VPC ピア接続はこのアクティブ化フェーズ中に行われます。VPCピア接続が何らかの理由で失敗した場合、新しいフリートはアクティブステータスに移行しません。describe-vpc-peering-connections を呼び出すことでピア接続リクエストの成否を追跡できます。認証は 24 時間のみ有効であるため、有効な VPC ピア接続承認 (describe-vpc-peering-authorizations)が存在することを確認してください。

サーバープロセスの問題

サーバープロセスは開始するが、すぐに失敗するか障害がレポートされる。

ゲームビルドの問題以外にも、インスタンスで同時に多くのサーバープロセスを実行しようとすると、このような問題が発生する場合があります。同時処理の適正な数は、インスタンスタイプおよびゲームサーバーのリソース要件の両方に依存します。フリートのランタイム設定で定義している同時処理の数を減らして、パフォーマンスが向上するかどうか確認してください。フリートのランタイム設定を変更するには、Amazon GameLift コンソールでフリートの容量割り当て設定を編集するか、または AWS CLI コマンド update-runtime-configuration を呼び出します。

Version122

Page 129: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートの問題をデバッグする

フリート削除の問題最大インスタンス数のため、フリートを終了できない。

エラーメッセージは、削除されるフリートにまだアクティブインスタンスがあることを示しています。この状態は許可されていません。最初に、フリートをアクティブインスタンスゼロまでスケールダウンする必要があります。そのためには、フリートの必要なインスタンス数を手動で「0」に設定してから、スケールダウンが有効になるのを待ちます。手動設定の妨げにならないように、Auto Scalingをオフにしてください。

VPC アクションが承認されていない。

この問題は、VPC ピア接続専用に作成したフリートにのみ適用されます (「Amazon GameLift のVPC ピア接続 (p. 173)」を参照)。このシナリオが生じるのは、フリートを削除するプロセスによって、フリートのすべての VPC と VPC ピア接続も削除されるためです。最初に、GameLift サービスAPI CreateVpcPeeringAuthorization() を呼び出すか、AWS CLI コマンド create-vpc-peering-authorization を使用して、承認を取得する必要があります。承認を取得したら、フリートを削除できます。

リアルタイムサーバー フリートの問題ゾンビゲームセッション: ゲームセッションが開始して実行されるが、終了することがない。

この問題は、以下のシナリオで見られる場合があります。• スクリプトの更新をフリートの RealTime サーバーが受け取らない。• フリートがすぐに最大容量に達し、プレイヤーのアクティビティ (新しいゲームセッションリクエス

トなど) が減少してもスケールダウンされない。

この問題の原因はほとんど確実に、RealTime スクリプトで processEnding を正常に呼び出すことができなかったことです。フリートがアクティブになり、ゲームセッションが開始されますが、それらを停止する方法はありません。その結果、ゲームセッションを実行している RealTime サーバーは、新しいセッションを開始するために解放されなくなり、新しいゲームセッションは、新しいRealTime サーバーがスピンアップされたときにのみ開始できます。さらに、RealTime スクリプトの更新は、すでに実行中のゲームセッションには影響しません。

この問題を回避するには、スクリプトに processEnding の呼び出しをトリガーするメカニズムを提供する必要があります。「リアルタイムサーバー スクリプト例 (p. 70)」に示しているように、1 つの方法はアイドルセッションタイムアウトをプログラムすることにより、一定時間プレイヤーからの接続がない場合に現在のゲームセッションが終了するようにすることです。

ただし、このシナリオが生じた場合は、RealTime サーバーがスタックから抜け出すための回避策がいくつかあります。効果的なのは、RealTime サーバープロセス (基になるフリートインスタンス) をトリガーして再始動することです。この場合、GameLift によってゲームセッションは自動的に終了されます。RealTime サーバーが解放されると、最新バージョンの RealTime スクリプトを使用して新しいゲームセッションを開始できます。

そのための方法は、この問題の波及範囲に応じていくつかあります。• フリート全体をスケールダウンする。この方法は最も簡単に実行できますが、広範な効果がありま

す。フリートをインスタンスゼロまでスケールダウンし、フリートが完全にスケールダウンするのを待ってから、再びスケールアップします。これにより、既存のすべてのゲームセッションが消去されてから、直近に更新された RealTime スクリプトが開始されます。

• インスタンスにリモートアクセスしてプロセスを再開する。この方法は、修正するプロセスがわずかしかない場合にお勧めします。ログ記録やデバッグなどのために、すでにインスタンスにログオンしている場合は、これが最も迅速な方法です。「フリートインスタンスにリモートでアクセス (p. 124)」を参照してください。

Version123

Page 130: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートインスタンスにリモートでアクセス

RealTime スクリプトに processEnding を呼び出す方法を含めないことを選択した場合、フリートがアクティブになってゲームセッションが開始されたとしても、いくつかの予想外の状況が生じることがあります。1 つは、実行中のゲームセッションが終了しない状況です。この結果、そのゲームセッションを実行しているサーバープロセスが解放されず、新しいゲームセッションを開始できなくなります。もう 1 つは、RealTime サーバーがスクリプトの更新を受け取らない状況です。

フリートインスタンスにリモートでアクセスAmazon GameLift フリートで現在実行されている任意のフリートインスタンスにリモートでアクセスすることができます。この機能はフリートのアクティベーションの問題をトラブルシューティングするのに役立ちます。またこの機能を使用して、ログ更新のトラッキングなどリアルタイムのゲームサーバーアクティビティを取得したり、実際のプレイヤートラフィックを使用してベンチマークツールを実行したりできます。

個別の Amazon GameLift インスタンスにリモートでアクセスする場合、次の点に留意します。

• Amazon GameLift サービスはフリートのアクティビティと容量を継続的に管理します。インスタンスへのリモート接続を確立しても、Amazon GameLift の管理方法に影響はありません。その結果、インスタンスはフリートランタイム設定の実行、サーバープロセスの停止と開始、ゲームセッションの作成と終了、およびプレイヤー接続の許可を継続します。また、Amazon GameLift サービスは縮小イベントの一部としてインスタンスをいつでも終了する可能性があります。

• アクティブなゲームセッションをホストしていて、ライブプレイヤーが接続されているインスタンスをローカルで変更すると、プレイヤーエクスペリエンスに大きな影響が及ぶ可能性があります。たとえば、ローカルな変更によって個別のプレイヤーがドロップされる、ゲームセッションがクラッシュする、さらにはインスタンス全体がシャットダウンして、複数のゲームセッションやプレイヤーに影響が及ぶことがあります。

Amazon GameLift インスタンスでゲームがデプロイおよび管理される方法については、次のトピックを参照してください。

• Amazon GameLift の仕組み (p. 3)• フリートの問題をデバッグする (p. 121)• フリートが複数のプロセスを管理する方法 (p. 108)

インスタンスに接続Windows または Linux を実行しているリモートインスタンスにアクセスできます。Windows インスタンスに接続するには、リモートデスクトッププロトコル (RDP) クライアントを使用します。Linux インスタンスに接続するには、SSH クライアントを使用します。

AWS CLI を使用して、リモートインスタンスにアクセスするために必要な情報を入手します。ヘルプについては、AWS CLI コマンドリファレンスを参照してください。AWS Command Line Interface ツールを取得してインストールします。 AWS SDK を使用することもできます。関連ドキュメントは、AmazonGameLift サービス API リファレンスにあります。

1. 接続したいインスタンスの ID を見つけます。 アクセスをリクエストする場合、インスタンス ID を指定する必要があります。AWS CLI コマンド describe-instances (または API コール DescribeInstances)と フリート ID を使用して、フリート内のすべてのインスタンスに関する情報を取得します。リクエストやレスポンスの例などのヘルプについては、CLI または API リファレンスガイドを参照してください。

2. インスタンスのアクセス認証情報をリクエストします。 インスタンス ID を確認したら、コマンドget-instance-access (または API コール GetInstanceAccess) を使用してアクセスの認証情報や他の情報をリクエストします。リクエストやレスポンスの例などのヘルプについては、CLI または API リファレンスガイドを参照してください。成功すると、Amazon GameLift はインスタンスのオペレーティングシステム、IP アドレス、および認証情報のセット (ユーザー名とシークレットキー) を返しま

Version124

Page 131: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートインスタンスにリモートでアクセス

す。認証情報の形式は、インスタンスのオペレーティングシステムによって決まります。次の手順を使用して、RDP または SSH の認証情報を取得します。

• Windows インスタンスの場合 – Windows インスタンスに接続する場合、RDP はユーザー名とパスワードを必要とします。get-instance-access リクエストはこれらの値をシンプルな文字列として返すため、返された値をそのまま使用できます。認証情報の例:

"Credentials": { "Secret": "aA1bBB2cCCd3EEE", "UserName": "gl-user-remote"}

• Linux インスタンスの場合 – Linux インスタンスに接続する場合、SSH はユーザー名とプライベートキーを必要とします。Amazon GameLift は、RSA プライベートキーを発行し、これらを 1 つの文字列として返します。改行文字 (\n) で改行を示します。プライベートキーを使用可能にするには、(1) 文字列を .pem ファイルに変換し、(2) この新しいファイルへのアクセス許可を設定します。返される認証情報の例:

"Credentials": { "Secret": "-----BEGIN RSA PRIVATE KEY-----nEXAMPLEKEYKCAQEAy7WZhaDsrA1W3mRlQtvhwyORRX8gnxgDAfRt/gx42kWXsT4rXE/b5CpSgie/\nvBoU7jLxx92pNHoFnByP+Dc21eyyz6CvjTmWA0JwfWiW5/akH7iO5dSrvC7dQkW2duV5QuUdE0QW\nZ/aNxMniGQE6XAgfwlnXVBwrerrQo+ZWQeqiUwwMkuEbLeJFLhMCvYURpUMSC1oehm449ilx9X1F\nG50TCFeOzfl8dqqCP6GzbPaIjiU19xX/azOR9V+tpUOzEL+wmXnZt3/nHPQ5xvD2OJH67km6SuPW\noPzev/D8V+x4+bHthfSjR9Y7DvQFjfBVwHXigBdtZcU2/wei8D/HYwIDAQABAoIBAGZ1kaEvnrqu\n/uler7vgIn5m7lN5LKw4hJLAIW6tUT/fzvtcHK0SkbQCQXuriHmQ2MQyJX/0kn2NfjLV/ufGxbL1\nmb5qwMGUnEpJaZD6QSSs3kICLwWUYUiGfc0uiSbmJoap/GTLU0W5Mfcv36PaBUNy5p53V6G7hXb2\nbahyWyJNfjLe4M86yd2YK3V2CmK+X/BOsShnJ36+hjrXPPWmV3N9zEmCdJjA+K15DYmhm/tJWSD9\n81oGk9TopEp7CkIfatEATyyZiVqoRq6k64iuM9JkA3OzdXzMQexXVJ1TLZVEH0E7bhlY9d8O1ozR\noQs/FiZNAx2iijCWyv0lpjE73+kCgYEA9mZtyhkHkFDpwrSM1APaL8oNAbbjwEy7Z5Mqfql+lIp1\nYkriL0DbLXlvRAH+yHPRit2hHOjtUNZh4Axv+cpg09qbUI3+43eEy24B7G/Uh+GTfbjsXsOxQx/x\np9otyVwc7hsQ5TA5PZb+mvkJ5OBEKzet9XcKwONBYELGhnEPe7cCgYEA06Vgov6YHleHui9kHuws\nayav0elc5zkxjF9nfHFJRry21R1trw2Vdpn+9g481URrpzWVOEihvm+xTtmaZlSp//lkq75XDwnU\nWA8gkn6O3QE3fq2yN98BURsAKdJfJ5RL1HvGQvTe10HLYYXpJnEkHv+Unl2ajLivWUt5pbBrKbUC\ngYBjbO+OZk0sCcpZ29sbzjYjpIddErySIyRX5gV2uNQwAjLdp9PfN295yQ+BxMBXiIycWVQiw0bH\noMo7yykABY7Ozd5wQewBQ4AdSlWSX4nGDtsiFxWiI5sKuAAeOCbTosy1s8w8fxoJ5Tz1sdoxNeGs\nArq6Wv/G16zQuAE9zK9vvwKBgF+09VI/1wJBirsDGz9whVWfFPrTkJNvJZzYt69qezxlsjgFKshy\nWBhd4xHZtmCqpBPlAymEjr/TOlbxyARmXMnIOWIAnNXMGB4KGSyl1mzSVAoQ+fqR+cJ3d0dyPl1j\njjb0Ed/NY8frlNDxAVHE8BSkdsx2f6ELEyBKJSRr9snRAoGAMrTwYneXzvTskF/S5Fyu0iOegLDa\nNWUH38v/nDCgEpIXD5Hn3qAEcju1IjmbwlvtW+nY2jVhv7UGd8MjwUTNGItdb6nsYqM2asrnF3qS\nVRkAKKKYeGjkpUfVTrW0YFjXkfcrR/V+QFL5OndHAKJXjW7a4ejJLncTzmZSpYzwApc=\n-----END RSA PRIVATE KEY-----", "UserName": "gl-user-remote"}

AWS CLI を使用する場合は、適切な形式の .pem ファイルを自動的に生成できます。そのためには、--query パラメータと --output パラメータを get-instance-access リクエストに含めます。

.pem ファイルでアクセス許可を設定するには、次のコマンドを実行します。

$ chmod 400 MyPrivateKey.pem

3. リモート接続でポートを開きます。 Amazon GameLift フリート内のインスタンスには、フリート設定で許可されているポートを通じてのみアクセスできます。フリートのポート設定は、コマンドdescribe-fleet-port-settings を使用して表示できます。

ベストプラクティスとして、必要な場合にのみリモートアクセス用のポートを開き、完了したらそれを閉じることをお勧めします。コマンド update-fleet-port-settings を使用してリモート接続にポート設定を追加します (SSH 用に 22 または RDP 用に 3389)。IP 範囲値には、接続に使用する予定のデバイスの IP アドレスを指定します (CIDR 形式に変換)。例:

Version125

Page 132: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートの容量のスケーリング

$ aws gamelift update-fleet-port-settings --fleet-id "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa" --inbound-permission-authorizations "FromPort=22,ToPort=22,IpRange=54.186.139.221/32,Protocol=TCP"

4. リモート接続クライアントを開きます。 Windows インスタンスにはリモートデスクトップ、Linux インスタンスには SSH を使用します。IP アドレス、ポート設定、アクセス認証情報を使用してインスタンスに接続します。

SSH の例:

ssh -i MyPrivateKey.pem [email protected]

リモートインスタンスの表示と更新インスタンスにリモートで接続すると、完全なユーザーおよび管理アクセスがあります。これは、ゲームホスティングでエラーや障害を引き起こす可能性があることも意味します。インスタンスがホスティングしているゲームにアクティブなプレイヤーがいる場合、ゲームセッションのクラッシュ、プレイヤーのドロップ、ゲームのシャットダウンプロセスの障害、保存したゲームのデータやログでのエラーが発生する恐れがあります。

インスタンスのホスティングリソースは次の場所にあります。

• ゲーム用のビルドファイル。 これらは、Amazon GameLift にアップロードしたゲームビルドに含まれるファイルです。これには、1 つ以上のゲームサーバー実行可能ファイル、資産、依存関係が含まれます。これらのファイルは game という名前のルートディレクトリにあります:• Windows の場合: c:\game• Linux の場合: /local/game

• ゲームログファイル。 ゲームサーバーで生成されるすべてのログファイルは、指定した任意のディレクトリパスの game ルートディレクトリに保存されます。

• Amazon GameLift ホスティングリソース。 ゲームホスティングを管理するために Amazon GameLiftサービスで使用されるファイルは、Whitewater というルートディレクトリにあります。これらのファイルはいかなる理由でも変更しないでください。

• ランタイム設定。 フリートのランタイム設定に個別のインスタンスはアクセスできません。ランタイム設定 (起動パス、起動パラメータ、同時プロセスの最大数) に対する変更をテストするには、フリート全体のランタイム設定を更新する必要があります (AWS SDK アクション UpdateRuntimeConfiguration または AWS CLI update-runtime-configuration を参照してください)。

• TLS 証明書。 インスタンスがあるフリートに対して TLS 証明書の生成が有効になっている場合、証明書、証明書チェーン、プライベートキー、ルート証明書などの証明書ファイルは以下の場所に保存されます。• Windows の場合: c:\\GameMetadata\Certificates• Linux の場合: /local/gamemetadata/certificates/

Amazon GameLift フリートの容量のスケーリングフリート容量はインスタンスで測定され、フリートがホストできるゲームセッション (およびプレイヤー)の数を決定します。ゲームホスティングで最も難しいタスクの 1 つが、すべての新規プレイヤーを取り込むために十分な容量を維持することと不必要なリソースに無駄なコストを当てないことのバランスを取ることです。Amazon GameLift で容量のスケーリング方法 (p. 6)を参照してください。

フリートをスケーリングするための完全制御ができます。特定数のインスタンスに容量を設定することも、実際のプレイヤーの需要に基づいて容量を調整できる Auto Scaling の利点を活用することもできま

Version126

Page 133: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートの容量制限を設定する

す。最初は Auto Scaling オプションのターゲット追跡をオンにすることをお勧めします。ターゲット追跡は、実際のプレイヤーの需要に対応するために十分なホスティングリソースを維持し、突然の急増に対処するために役立つツールの使用に効果的で簡単な方法です。ほとんどのゲームの場合、ターゲットの追跡は必要となる唯一のソリューションです。

このセクションのトピックでは、次のタスクの詳細を提供します。

• 容量のスケーリングの上限と下限を設定する (p. 127)• 容量レベルを手動で設定する (p. 129)• Auto Scaling をターゲット追跡でオンにする (p. 131)• ルールベースの Auto Scaling を管理する (高度な機能) (p. 132)• Auto Scaling を一時的に無効にする (p. 129)

ほとんどのフリートスケーリングアクティビティは、Amazon GameLift コンソールを使用して行うことができます。また、すべてのフリートのスケーリングで AWS SDK または AWS CLI を Amazon GameLiftサービス API で使用することもできます。

コンソールでフリート容量設定にアクセスするには。

1. Amazon GameLift コンソール (https://console.aws.amazon.com/gamelift/) を開きます。2. [フリート] ページで、アクティブなフリートの名前をクリックしてフリートの詳細ページを開きま

す。([ダッシュボード] からもフリートの詳細ページにアクセスできます。)3. [スケーリング] タブを開き、スケーリングメトリクスの履歴を表示し、現在の設定を表示あるいは変

更します。設定は、メトリクスグラフの下に配置されています。このセクションでは、スケーリング制限の表示あるいは更新、フリート容量の手動設定、Auto Scaling の有効化/無効化、ターゲットベースの Auto Scaling の有効化、すべての有効な Auto Scaling ポリシーの表示ができます。

トピック• フリートの容量制限を設定する (p. 127)• フリートの容量を手動で設定する (p. 129)• Auto Scaling フリート容量 (p. 130)

フリートの容量制限を設定するフリートのサイズは、含まれるインスタンスの数で決まります。各フリートには定義された最小値と最大値の制限があり、ゲームのニーズに応じて設定することができます。フリートの容量を変更するすべてのリクエスト (Auto Scaling あるいは手動による調整のどちらの場合でも) は、現在の制限内に収まる必要があります。デフォルトでは、新しいフリートの制限の最小値は 0 インスタンス、最大値が 1 インスタンスに設定されています。フリートをスケールアップする前に、フリートの制限を調整する必要があります。

フリートを Auto Scaling する場合、最大値の制限によって Amazon GameLift はプレイヤーの需要に合わせて必要なだけフリートをスケールアップしながら、DDOS 攻撃中に発生する可能性があるようなホスティング費用のランナウェイも防止します。容量が最大限に到達するとアラームが鳴るようにCloudWatch を設定することで、状況を評価して必要に応じて手動で調整できます。(また、請求アラートを設定して、AWS コストをモニタリングすることもできます。) 最小限は、ホスティングの可用性を常時確保する場合に便利です。

制限は手動でスケールしたフリートにも適用できます。制限範囲外の値にフリート容量を調整する前に、制限を変更する必要があります。フリート容量はゲームの可用性とプレイヤーのエクスペリエンスに大きな影響を及ぼすため、制限機能は容量に追加の制御レイヤーを提供します。

フリート容量制限を設定するには、Amazon GameLift コンソールまたは AWS CLI を使用します。フリートのステータスは、Active (アクティブ) である必要があります。

Version127

Page 134: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートの容量制限を設定する

容量制限を設定するには (コンソール)1. Amazon GameLift コンソール (https://console.aws.amazon.com/gamelift/) を開きます。2. [フリート] ページで、アクティブなフリートの名前をクリックしてフリートの詳細ページを開きま

す。([ダッシュボード] からもフリートの詳細ページにアクセスできます。)3. [スケーリング] タブを開き、スケーリングメトリクスの履歴を表示し、現在の設定を表示あるいは変

更します。スケーリング設定は、メトリクスグラフの下に配置されています。4. [インスタンス制限] で、インスタンス数の最小限と最大限を設定します。コントロールごとにチェッ

クマークボタン をクリックして変更をコミットします。

フリートの現在希望するインスタンス数が新しい制限範囲を超過している場合、エラーが表示されます。この場合、まずフリートで希望するインスタンス数を調整して、新しい制限範囲に収まるようにします。これは、[スケーリング] タブで行うことができます。フリートで Auto Scaling を使用している場合、Auto Scaling を無効にし、手動で希望するインスタンス数を調整して新しい制限範囲を設定してから、Auto Scaling を再度有効にします。

新しい制限は、[スケーリング] タブの上部のグラフにすぐに反映されます。

容量制限を設定するには (AWS CLI)1. 現在の容量設定を確認します。コマンドラインウィンドウで、容量を変更するフリートの ID で

describe-fleet-capacity コマンドを使用します。このコマンドは、現在のインスタンス数および容量制限をふくむ FleetCapacity オブジェクトを返します。新しいインスタンスの制限が現在機能するインスタンス設定に合うかどうかを決定します。

aws gamelift describe-fleet-capacity --fleet-id <unique fleet identifier>

2. 制限設定を更新します。 コマンドラインウィンドウで、以下のパラメータを使用して update-fleet-capacity コマンドを実行します。インスタンス制限および希望するインスタンス数の両方を同じコマンドで調整できます。

--fleet-id <unique fleet identifier>--max-size <maximum capacity for auto-scaling>--min-size <minimum capacity for auto-scaling>--desired-instances <fleet capacity as an integer> [Optional]

例:

aws gamelift update-fleet-capacity--fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa--max-size 10--min-size 1--desired-instances 10

コピー可能バージョン:

aws gamelift update-fleet-capacity --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa --max-size 10 --min-size 1 --desired-instances 10

リクエストが成功すると、フリート ID が返されます。新しい上限値あるいは下限値が現在の希望するインスタンス設定と競合する場合、エラーが返されます。

Version128

Page 135: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートの容量を手動で設定する

フリートの容量を手動で設定する新しいフリートを作成すると、フリート容量が自動的に 1 つのインスタンスに設定されます。レスポンスでは、Amazon GameLift によって設定されたように 1 つの新しいインスタンスがゲームサーバープロセスで開始します。フリートの容量を変更するには、Auto Scaling を有効にするか、または手動でフリートに必要なインスタンスの数を設定します。詳細情報 フリートの容量のスケーリング (p. 6).

フリートの容量を手動で設定することは、Auto Scaling が必要でない場合、あるいは任意の数のインスタンスで一時的または恒久的に容量を確保することが必要な場合に便利となります。手動で希望する容量を設定する場合、このアクションは、(1) フリートに Auto Scaling ポリシーがないとき、あるいは (2)Auto Scaling が無効化されているときには、実際のフリート容量のみに反映することに注意してください。Auto Scaling が有効になっている場合、独自のスケーリングルールに基づく希望する容量が即時にリセットされます。

フリートの容量を手動で設定するには、Amazon GameLift コンソールまたは AWS CLI を使用します。フリートのステータスは、Active (アクティブ) である必要があります。

Auto Scaling を無効にするAuto Scaling を無効にすると、フリートのすべての Auto Scaling をオフにして、手動スケーリングに戻ることができます。フリートの Auto Scaling ポリシーはいつでも削除することができますが、この機能では Auto Scaling を一時的にオフにしながらも、後で使用できるようにポリシーを保持します。たとえば、予定されている主要なイベントの準備としてスケールアップするときに、Auto Scaling を無効にして希望するフリート容量を手動で設定し、イベントが進行したら Auto Scaling を再度有効にできます。AutoScaling が無効になると、現在アクティブなすべてのポリシーや今後作成されるすべてのポリシーを含む、フリートのすべての Auto Scaling アクティビティが中断します。Amazon GameLift コンソールで AutoScaling を有効 / 無効にできます (「手動で容量を設定するには」のステップ 4 を参照)。

手動で容量を設定するには (コンソール)1. Amazon GameLift コンソール (https://console.aws.amazon.com/gamelift/) を開きます。2. [フリート] ページで、アクティブなフリートの名前をクリックしてフリートの詳細ページを開きま

す。([ダッシュボード] からもフリートの詳細ページにアクセスできます。)3. [スケーリング] タブを開き、スケーリングメトリクスの履歴を表示し、現在の設定を表示あるいは変

更します。スケーリング設定は、メトリクスグラフの下に配置されています。4. [Auto-Scaling Policies (Auto Scaling ポリシー)] で [Disable all scaling policies (すべてのスケーリング

ポリシーを無効にする)」チェックボックスをオンにして、チェックマークボタン をクリックして変更をコミットしますこの設定は、フリートのすべての Auto Scaling アクションを停止します。現在フリートにポリシーがない場合でも、新しく作成されるポリシーが有効になることを防ぐことになるため、この実行は推奨されます。この変更を確定すると、アクティブなスケーリングポリシーをリストアップする表ですべてのポリシーが「無効」と表示されます。

5. [Auto Scaling ポリシー] の「手動で目的のインスタンス数を調整する」オプションで、フリートのインスタンス数を指定します。この値は、ゲームセッションに使用できるアクティブな状態で維持するインスタンスの数を Amazon GameLift に伝えます。チェックマークボタン をクリックして変更をコミットします

新しく希望するインスタンス値がフリートの容量限度を超えている場合、エラーが表示されます。この場合、まずフリートのインスタンス制限が新しく希望するインスタンス数を許可するよう調整します。インスタンスの制限は、[スケーリング] タブでも設定できます。

インスタンスの制限と手動スケーリングレベルに変更をコミットすると同時に、新しい値が [スケーリング] タブの上部のグラフに反映されます。Amazon GameLift は、変更に即応して追加のインスタンスをデプロイするか、不要なインスタンスをシャットダウンします。このプロセスが完了すると、[アクティブ]インスタンスの数が新しく更新された目標値に一致するように変わります。このプロセスには多少時間がかかることがあります。

Version129

Page 136: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAuto Scaling フリート容量

手動で容量を設定するには (AWS CLI)1. 現在の容量設定を確認します。コマンドラインウィンドウで、容量を変更するフリートの ID で

describe-fleet-capacity コマンドを使用します。このコマンドは、現在のインスタンス数および容量制限をふくむ FleetCapacity オブジェクトを返します。新しいインスタンス数が上限と下限内に収まっていることを確認します。

aws gamelift describe-fleet-capacity --fleet-id <unique fleet identifier>

2. 希望する容量を更新します。 フリート ID と新しい desired-instances 値を使用して update-fleet-capacity コマンドを実行します。この値が現在の制限範囲外にある場合、同じコマンドに調整した制限値を含めます。

--fleet-id <unique fleet identifier>--desired-instances <fleet capacity as an integer>--max-size <maximum capacity for auto-scaling> [Optional]--min-size <minimum capacity for auto-scaling> [Optional]

例:

aws gamelift update-fleet-capacity--fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa--desired-instances 5--max-size 10--min-size 1

コピー可能バージョン:

aws gamelift update-fleet-capacity --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa --desired-instances 5 --max-size 10 --min-size 1

リクエストが成功すると、フリート ID が返されます。新しく希望するインスタンス設定が上限と下限の制限外にある場合、エラーが返されます。

Auto Scaling フリート容量ゲームサーバーアクティビティに応じてフリート容量を動的にスケールするために Auto Scaling を使用します。プレイヤーが参加してゲームセッションが開始すると、Auto Scaling はさらにインスタンスを追加できます。プレイヤーの需要が低くなると、Auto Scaling は不必要なインスタンスを終了できます。AutoScaling はホスティングリソースとコストを最小化するための効果的な方法である一方で、スムーズで高速なプレイヤーエクスペリエンスを提供します。Amazon GameLift での Auto Scaling の動作 (p. 6)について詳しく説明します。

Auto Scaling は、スケールアップやスケールダウンのための指示を Amazon GameLift に提供するスケーリングポリシーを作成することで終了します。スケーリングポリシーには、ターゲットベースとルールベースの 2 タイプがあります。ターゲットベースのアプローチ — ターゲット追跡—は完全なソリューションを提供します。最もシンプルで効果的なオプションとして推奨されます。ルールベースのスケーリングポリシーは、Auto Scaling の意思決定プロセスにおける各要素を定義するために必要となり、特定の問題の対処に役立ちます。これは、ターゲットベースの Auto Scaling を補足するものとして最適です。

ターゲットベースの Auto Scaling は、Amazon GameLift コンソール、AWS CLI あるいは AWS SDK のいずれかを使用して管理することができます。ルールベースの Auto Scaling は AWS CLI または AWS SDKを使用して管理できますが、コンソールでルールベースのスケーリングポリシーを表示できます。

Version130

Page 137: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAuto Scaling フリート容量

トピック• ターゲット追跡で Auto Scaling する (p. 131)• ルールベースのポリシーによる自動スケール (p. 132)

ターゲット追跡で Auto Scaling するターゲット追跡は、単一キーフリートメトリクス「使用可能なゲームセッションパーセント」に基づいて容量レベルを調整します。このメトリクスは、使用可能なゲームセッションスロットの数を現在の容量(すぐに開始できる追加ゲームセッション) で測定します。実際には、このメトリクスはプレイヤーの急激な需要に対するフリートのバッファを示します。

容量バッファを維持する主な利用は、プレイヤーの待機時間です。ゲームセッションスロットの準備ができ、待機中の場合、ゲームセッションに新規プレイヤーを取得するためにかかる時間は秒単位で測定できます。使用可能なリソースがない場合、プレイヤーは既存のゲームセッションが終了するまで、あるいは新しいリソースが使用可能になるまで待機する必要があります。新しいインスタンスとサーバープロセスを起動するために必要な時間は、分単位でも測定できます。

ターゲット追跡を設定するには、フリートが維持するバッファのサイズを指定するだけです。「使用可能なゲームセッションのパーセント」メトリクスでは、使用可能なリソースの割合 (%) を測定するため、実際のバッファサイズは、全フリート容量に占める割合になります。Amazon GameLift は、ターゲットバッファサイズを維持するために必要なだけのインスタンス数を追加あるいは削除します。ホスティング費用に対してプレイヤーの待機時間の最小化をどれだけ優先するかによって、バッファサイズを選択します。より大きなバッファでは待機時間が少なくなりますが、通常以上の追加リソース分を支払うことになる場合があります。待機時間に対してより耐性のあるプレイヤーの場合、バッファを小さく設定することでコストをより低く抑えることができます。

ターゲット追跡の設定 (コンソール)

1. Amazon GameLift コンソール (https://console.aws.amazon.com/gamelift/) を開きます。2. [フリート] ページで、アクティブなフリートの名前をクリックしてフリートの詳細ページを開きま

す。([ダッシュボード] からもフリートの詳細ページにアクセスできます。)3. [スケーリング] タブを開きます。このタブには、フリートのスケーリングメトリクスの履歴が表示さ

れ、現在のスケーリング設定を調整するコントロールを含んでいます。スケーリング設定は、メトリクスグラフの下に配置されています。

4. [インスタンス制限] で、上限と下限がフリートに適しているかを確認します。Auto Scaling を有効にすると、この上下制限間で容量を調整できます。

5. [Auto Scaling ポリシー] では、[Maintain a buffer of X percent game session availability (ゲームセッションの可用性の X パーセントのバッファを維持する)] のオプションを確認します。バッファサイズを設定し、チェックマークボタン をクリックして Auto Scaling 設定を保存します。設定を保存すると、新しいターゲットベースのポリシーが [スケーリングポリシー] テーブルを追加されます。

6. フリートの Auto Scaling を有効にするには、[フリートのすべてのスケーリングポリシーを無効にする] オプションがオフになっていることを確認します。このオプションがオンになっていると、新しいターゲット追跡ポリシーを含むすべてのポリシーが無効になります。この状態は [スケーリングポリシー] テーブルに反映されます。

ターゲットの追跡 (AWS CLI) の設定

1. 容量制限を設定します。 update-fleet-capacity コマンドを使用して両方またはどちらかの制限値を設定します。ヘルプについては、「容量制限を設定するには (AWS CLI) (p. 128)」を参照してください。

2. 新規ポリシーを作成します。 コマンドラインウィンドウを開き、ポリシーのパラメータ設定で put-scaling-policy コマンドを使用します。既存のポリシーを更新するには、ポリシー名を指定して、更新されたポリシーの完全バージョンを提供します。

Version131

Page 138: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAuto Scaling フリート容量

--fleet-id <unique fleet identifier>--name "<unique policy name>"--policy-type <target- or rule-based policy>--metric-name <name of metric>--target-configuration <buffer size>

例:

$aws gamelift put-scaling-policy--fleet-id "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa"--name "My_Target_Policy_1"--policy-type "TargetBased" --metric-name "PercentAvailableGameSessions"--target-configuration "TargetValue=5"

コピー可能バージョン:

$aws gamelift put-scaling-policy --fleet-id "fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa" --name "My_Target_Policy_1" --policy-type "TargetBased" --metric-name "PercentAvailableGameSessions" --target-configuration "TargetValue=5"

ルールベースのポリシーによる自動スケールルールベースのスケーリングポリシーは、プレイヤーのアクティビティに対応してフリートの容量を AutoScaling するための詳細な制御を提供します。各ポリシーでは、使用できる複数のフリートメトリクスの 1つにフリートスケーリングをリンクし、トリガーポイントを識別して、スケールアップレスポンスをカスタマイズするか、あるいはイベントをスケールダウンすることができます。ルールベースのポリシーは、特別な状況を処理するためにターゲットベースのスケーリングの補助として特に便利です。

ルールベースのポリシーは、次のステートメントを作成します。"If a fleet metric meets or crosses athreshold value for a certain length of time, then change the fleet's capacity by a specified amount." (フリートメトリクスが一定期間しきい値以上になる場合、フリートの容量を指定された量に変更する)。 このトピックでは、ポリシーステートメントを構成するために使用する構文を説明し、ルールベースのポリシーを作成して管理するためのヘルプを提供します。

ルールベースのポリシーを管理するAWS SDK または AWS CLI を Amazon GameLift サービス API で使用して、ルールベースのポリシーを作成、更新、または削除します。すべてのアクティブなポリシーは、Amazon GameLift コンソールで表示できます。

フリートのすべてのスケーリングポリシーを一時的に無効にするには、AWS CLI コマンド stop-fleet-actions を使用します。

ルールベースのスケーリングポリシーを作成または更新するには (AWS CLI)

1. 容量制限を設定します。 update-fleet-capacity コマンドを使用して両方またはどちらかの制限値を設定します。ヘルプについては、「容量制限を設定するには (AWS CLI) (p. 128)」を参照してください。

2. 新規ポリシーを作成します。 コマンドラインウィンドウを開き、ポリシーのパラメータ設定で put-scaling-policy コマンドを使用します。既存のポリシーを更新するには、ポリシー名を指定して、更新されたポリシーの完全バージョンを提供します。

--fleet-id <unique fleet identifier>

Version132

Page 139: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAuto Scaling フリート容量

--name "<unique policy name>"--policy-type <target- or rule-based policy>--metric-name <name of metric>--comparison-operator <comparison operator>--threshold <threshold integer value>--evaluation-periods <number of minutes>--scaling-adjustment-type <adjustment type>--scaling-adjustment <adjustment amount>

例:

aws gamelift put-scaling-policy--fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa--name "Scale up when AGS<50"--policy-type RuleBased--metric-name AvailableGameSessions--comparison-operator LessThanThreshold--threshold 50--evaluation-periods 10--scaling-adjustment-type ChangeInCapacity--scaling-adjustment 1

コピー可能バージョン:

aws gamelift put-scaling-policy --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa --name "Scale up when AGS<50" --policy-type RuleBased --metric-name AvailableGameSessions --comparison-operator LessThanThreshold --threshold 50 --evaluation-periods 10 --scaling-adjustment-type ChangeInCapacity --scaling-adjustment 1

AWS CLI を使用して、ルールベースのスケーリングポリシーを削除するには。

• コマンドラインウィンドウを開き、フリート ID とポリシー名で delete-scaling-policy コマンドを使用します。

例:

aws gamelift delete-scaling-policy--fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa--name "Scale up when AGS<50"

コピー可能バージョン:

aws gamelift delete-scaling-policy --fleet-id fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa --name "Scale up when AGS<50"

Auto Scaling ルールの構文

ルールベースのスケーリングポリシーステートメントを作成するには、6 つの主要な変数を指定する必要があります。

&lt;メメメメメメ&gt; が &lt;メメメメ&gt; にわたって &lt;メメメメ&gt; &lt;メメメメメ&gt; である場合は、&lt;メメメメメ&gt; を使用してフリートの容量を &lt;メメメ&gt; に変更します。

たとえば、このポリシーステートメントは、フリートの余分な容量 (現在使用されていない利用可能なホスティングリソース) が 50 の新規ゲームセッションを処理するために必要な数より少ない場合に、スケールアップをトリガーします。

Version133

Page 140: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAuto Scaling フリート容量

AvailableGameSessions が less than 50 で 10 minutes の場合、ChangeInCapacity を使用してフリート容量を 1 instances で調整します。

メトリクス名

スケーリングイベントをトリガーするには、Auto Scaling ポリシーを次のフリート指定のメトリクスの 1 つにリンクします。メトリクスのさらに詳しい説明については、「フリートの Amazon GameLiftメトリクス (p. 187)」を参照してください。• ゲームセッションのアクティブ化• アクティブなゲームセッション• 使用可能なゲームセッション• 使用可能なゲームセッションの割合• アクティブなインスタンス• 使用可能なプレイヤーセッション• 現在のプレイヤーセッション• アイドル状態のインスタンス• アイドル状態のインスタンスの割合

次のメトリクスは、フリートがゲームセッションキューに含まれている場合に使用できます。• キューの深さ (フリート固有) – このフリートを最適なホスティング場所とする保留中のゲームセッ

ションリクエストの数を示します。• 待機時間 (フリート固有) – フリート固有の待機時間。保留中の最も古いゲームセッションリクエス

トが受理されるまでに待機する時間です。キューの深さと同じく、このメトリクスが反映するのは、このフリートが、ホスティングの最適な場所であるゲームセッションリクエストのみです。フリートの待機時間は、現在のキュー内で最も古いリクエストの時間と同じです。

比較演算子

この変数は、メトリクスデータとしきい値を比較する方法を Amazon GameLift に伝えます。有効な比較演算子は、より大きい (>)、より小さい (<)、以上 (>=)、または以下 (<=) です。

しきい値

指定したメトリック値がそのしきい値に到達したか超えた場合、スケーリングイベントがトリガーされます。選択されたメトリクスに応じて、プレイヤーセッション、ゲームセッション、インスタンスまたはゲームセッションリクエストの量が示されることがあります。この値は常に正の整数です。

評価期間

スケーリングイベントをトリガーする前に、メトリクスが全評価期間にわたってしきい値に到達するか、超える必要があります。評価期間は連続しています。メトリクスがしきい値を下回ると、評価期間が再度開始します。

調整値と調整タイプ

この一連の変数は連動して、スケーリングイベントがトリガーされるときに Amazon GameLift がフリート容量を調整する方法を指定します。3 つの調整タイプから選択します。• 容量の変更 – 指定したインスタンス数だけ現在の容量を増減させます。調整値は、フリートに追加

または削除するインスタンス数に設定します。正の値はインスタンスを追加し、負の値はインスタンスを削除します。たとえば、「-10」の値は、フリートの合計サイズに関係なく、フリートを 10インスタンス分スケールダウンします。

• 容量の割合変更 – 指定したパーセントだけ現在の容量を増減させます。調整値は、フリート容量を増減させるパーセントに設定します。正の値はインスタンスを追加し、負の値はインスタンスを削除します。たとえば、50 個のインスタンスがあるフリートでは、「20」パーセントの変更によって10 個のインスタンスがフリートに追加されます。

Version134

Page 141: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマルチリージョンキューの使用

• 正確な容量 – 目的のインスタンスを特定の値に設定します。調整値では、フリート内で維持する正確なインスタンス数を設定します。

ルールベースの Auto Scaling のヒント

次の推奨事項は、ルールベースのポリシーの Auto Scaling を最大限に活用するのに役立ちます。

複数のポリシーの使用

フリートには、複数の Auto Scaling ポリシーを同時に適用できます。最も一般的なシナリオでは、ターゲットベースのポリシーでほとんどのスケーリングニーズを管理し、特別なケースを処理するためにルールベースのポリシーを使用します。ただし、複数のポリシーを使用することに制限はありません。

複数のポリシーは個別に機能します。スケーリングイベントの順序を制御する方法はないことに注意してください。たとえば、スケールアップを扱う複数のポリシーがある場合、プレイヤーアクティビティによって複数のスケーリングポリシーが同時にトリガーされる可能性があります。たとえば、プレイヤーアクティビティが両方のメトリクスをトリガーする可能性がある場合、2 つのスケールアップポリシーの効果を簡単に組み合わせることができます。さらに、相互にトリガーするポリシーも待機できます。たとえば、互いのしきい値を超えた容量を設定するスケールアップポリシーとスケールダウンポリシーを作成した場合、無限ループを作成できます。

最大容量と最小容量の設定

各フリートには、最大容量と最小容量の制限があります。この機能は、Auto Scaling を使用するときに特に重要です。Auto Scaling が、容量をこの範囲外の値に設定することはありません。デフォルトでは、新しく作成されたフリートの最小値は 0、最大値は 1 です。Auto Scaling ポリシーが意図どおりに容量に影響を与えるには、最大値を大きくする必要があります。

フリート容量は、フリートのインスタンスタイプおよび AWS アカウントにおける制限の制約も受けます。サービスとアカウントの制限を超えて最小値と最大値を設定することはできません。

容量の変更後のメトリクスの追跡

Auto Scaling ポリシーに応じて容量を変更した後、Amazon GameLift は同じポリシーからのトリガーに応答するまで 10 分間待ちます。この待機により、Amazon GameLift は新しいインスタンスの追加、ゲームサーバーの起動、プレイヤーの接続、新しいインスタンスからのデータ収集の開始を行う時間を確保できます。この間、Amazon GameLift はメトリクスに対するポリシーの評価と、ポリシーの評価期間 (スケーリングイベントがトリガーされると再開します) の追跡を続けます。これは、待機時間が終わるとすぐに、スケーリングポリシーにより別のスケーリングイベントがトリガーされる可能性があることを意味します。

異なる Auto Scaling ポリシーによりトリガーされたスケーリングイベント間に待機時間はありません。

マルチリージョンキューの使用キューを使用して、複数のリージョンにまたがるフリートグループを作成し、キュー内の任意のフリートにゲームセッションを配置できるようにします。キューには、ゲームセッションの配置の効率化や、ゲームの場所を選択するときにプレイヤーのレイテンシーを使用できるなど、フリートを個々に使用するよりも多くの利点があります。クライアントサーバーサービスでは、新しいゲームセッションの配置のリクエストまたはマッチメーキングの際にキューを指定します。キューメトリクスの作成、編集、または追跡を行うには、AWS Command Line Interface (CLI) または Amazon GameLift コンソールを使用します。

トピック• ゲームセッションキューの設計 (p. 136)

Version135

Page 142: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドキューの設計

• キューの作成 (p. 141)• キューの表示 (p. 143)

ゲームセッションキューの設計Amazon GameLift は、キューを使用してゲームセッションの配置リクエストを処理し、新しいゲームセッションのホスティングリソースを見つけます。キューの設計方法により、(1) Amazon GameLift が利用可能なリソースを検索する場所、および (2) Amazon GameLift が利用可能なリソースを評価して、新しいゲームセッションごとに最適な選択肢を見つける方法が決まります。プレイヤーに対する可能な最善のエクスペリエンスを提供し、お支払いいただくホスティングリソースが効率的に使用されるようにするには、キューを使用します。

以下の Amazon GameLift 機能では、キューが必須です。

• FlexMatch でのマッチメーキング (「FlexMatch マッチメーカーの設計 (p. 73)」を参照)• スポットフリート (「スポットフリート統合ガイド (p. 109)」を参照)

キューの詳細については、「the section called “ゲームセッションの実行” (p. 5)」を参照してください。キューの作成方法については、「キューの作成 (p. 141)」を参照してください。キューを使用して新しいゲームセッションを作成する方法については、「ゲームセッションの作成 (p. 51)」を参照してください。

キューを使用する理由キューを必要とする Amazon GameLift 機能を使用していない場合でも、ゲームセッションを配置するにはキューを使用することを強くお勧めします。特定のフリートでゲームセッションを手動で作成することはいつでもできます (CreateGameSession) が、キュー (特に複数のリージョンにまたがるもの) を使用することでお客様とプレイヤーは重要な利点を得られます。

• プレイヤーエクスペリエンスの向上のために、レイテンシーを最小限に抑えます。 ゲームセッションの配置リクエストにプレイヤーレイテンシーデータが含まれている場合、FleetIQ により、ゲームサーバーに対するプレイヤーレイテンシーが最小限になります。プレイヤー間のレイテンシーの違いを最小限に抑え、プレイヤーをゲームに高速に参加させることと、可能な限り最善のゲームエクスペリエンスをプレイヤーに提供することのバランスを取ります。

• 低料金のスポットフリートを活用します。 いつでもスポットフリートをキューに追加して、ホスティングコストを大幅に削減できます。スポットフリートが利用可能な場合、FleetIQ はレイテンシーとスポット料金の両方が最小限であるフリートに新しいゲームセッションを配置します。

• 新しいゲームを高容量で高速に配置します。 単一のフリートの容量は制限されているため、その制限に達すると、プレイヤーは新しいゲームセッションが開始される前に、追加のインスタンスがスケールアップされるのを待つ必要があります。ただし、目的のフリートがいっぱいの場合、キューは直ちにフォールバックし、他のフリートで配置を行うことができます。さらに、Auto Scaling では、キューの各フリートは完全な容量に近づくとスケールアップするため、キューのすべてのフリートが同時にいっぱいになることは滅多にありません。その結果、プレイヤーの待機時間が、プレイヤーの需要の急増中に影響を受ける可能性は低くなります。

• ゲームの回復性を高めます。 フリートとリージョンレベルの機能停止が発生することがあります。マルチリージョンキューを使用すれば、速度の低下または停止によって、ゲームへのプレイヤーアクセスが影響を受けることはありません。代わりに、1 つまたは複数の対象フリートが利用できない場合、Amazon GameLift は利用できる次に最善のフリートに新しいゲームセッションを配置できます。続いて、Auto Scaling により、対象フリートが再び利用可能になるまで、フリートアクティビティのこの一時的な変化に対する調整が行われます。

• 追加のフリート容量をより効率的に使用します。 予期しないプレイヤーの需要の急増を処理するうえで、追加のホスティング容量にすばやくアクセスできると有効です。ゲームへのプレイヤーアクセスをサポートするために単一のフリートに依存する場合は、念のために未使用の容量を維持する必要があります。対照的に、キューのフリートはフォールバックとして機能することができ、プレイヤーの需要が増加した場合、必要に応じて他のリージョンの使用の少ないフリートに移行されます。たとえば、需要

Version136

Page 143: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドキューの設計

がアジアで高い場合、一般的に需要は欧州では低くなります。欧州のフリートは、需要が低いためにスケールダウンされているときでも、追加の容量を提供してアジアの急増をサポートできます。

• ゲームセッションの配置とキューパフォーマンスのメトリクスを取得します。Amazon GameLift はキュー固有のメトリクスを提供します。これには、配置の成功と失敗、キューのリクエスト数、キューでリクエストにかかる平均時間の統計が含まれます。これらのメトリクスは、Amazon GameLift コンソールまたは CloudWatch で表示できます。

キューの送信先の設定に関するヒントキューには、ゲームセッションの配置リクエストを満たすことができる送信先のリストが含まれます。ほとんどの場合、送信先はフリートであり、フリート ID またはエイリアス ID で指定できます。キューの送信先を選択するときは、次のガイドラインおよびベストプラクティスを考慮します。

• どのリージョンからでも、既存のフリートまたはエイリアスを追加することができます。特に、配置にプレイヤーレイテンシーを使用している場合は、プレイヤーをサポートする各リージョンでフリートを追加します。

• フリートにエイリアスを (推奨に従って) 割り当てる場合、キューで送信先を設定するときにエイリアス名を使用することが推奨されます。

• キューにあるすべての送信先は、キューを使用するゲームクライアントと互換性があるゲームビルドを実行している必要があります。キューにより処理される新しいゲームセッションリクエストは、キュー内の任意の送信先に配置できることに留意してください。

• キューには少なくとも 2 つのフリートがあり、少なくとも 2 つのリージョンにまたがる必要があります。この設計により、フリートまたはリージョンの速度の低下による影響を減らし、プレイヤーの需要の予期しない変化をより効率的に管理することで、ホスティングの弾力性が向上します。

• キューにおける送信先のリスト順序は重要です。ゲームセッションの配置リクエストにレイテンシーデータを含めると、Amazon GameLift は送信先の優先順位を再設定して、(1) 最小のプレイヤーレイテンシーと (2) 最低スポット料金 (該当する場合) で利用可能なリソースを見つけます。レイテンシーデータを指定しない場合、Amazon GameLift は送信先リストの順序に従います。通常、このような状況では、ゲームセッションは最初にリストされているフリートでホストされ、必要な場合のみバックアップフリートに配置されます。

• キューを作成する場所 (どのリージョンか) を決定する必要があります。理想的には、セッションディレクトリサービスなど、ゲームクライアントサービスを通じてゲームセッションの配置リクエストを行います。その場合は、クライアントサービスがデプロイされている場所に地理的に近いリージョンにキューを作成することをお勧めします。この配置により、ゲームセッション配置リクエストを送信するときのレイテンシーが最小限に抑えられます。

• 同じキューに証明書設定の異なるフリートを含めることはできません。キュー内のすべてのフリートに対して TLS 証明書の生成を有効にするか無効にするかのいずれかにする必要があります。

マルチリージョンキューの設計FlexMatch マッチメーキングやスポットフリートなど、特別な機能を使用しているかどうかにかかわらず、マルチリージョンの設計がすべてのキューに対して推奨されます。この設計により、配置速度とホスティングの弾力性が向上します。これは、プレイヤーレイテンシーデータを操作する場合に非常に重要です。

このトピックでは、基本的なマルチリージョンキューの設計プロセスについて説明します。この例では、北米の東海岸のプレイヤーに配信するゲームサーバービルドを使用します。ここでは、us-east-1 および ca-central-1 リージョンでゲームをホストすることを選択しました。ゲームビルドをアップロードし、各リージョンでフリートを作成しました。

1. キューを作成するリージョンを選択します。キューの場所が重要ではない場合もありますが、クライアントサービスを通じて配置リクエストを行う場合、クライアントサービスがデプロイされている場所の近くのリージョンにキューを配置して、リクエストのレイテンシーを最小化することができます。

2. 新しいキューを作成し、キューの送信先としてフリートを追加します。

Version137

Page 144: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドキューの設計

3. 送信先のデフォルトのリストの順序を決定します。GameLift は、利用可能なホスティングリソースを検索するときに、この順序でフリートを評価する場合があります。配置リクエストにプレイヤーレイテンシーデータが含まれている場合、Amazon GameLift は送信先の順序を変更して、最も低いレイテンシーレートを優先します。レイテンシーデータが提供されていない場合、Amazon GameLift はデフォルトの順序を使用します。• レイテンシーデータのない大量のリクエストが予期される場合は、デフォルトのリストの順序と、最

初にリストするフリートにより注目します。レイテンシーデータがない場合、Amazon GameLift は、残りのフリートをバックアップとしてのみ使用し、利用可能な場合にリストされる最初のフリートに新しいゲームセッションを配置します。その結果、(1) ほとんどのプレイヤーベースを処理するために十分な性能を持ち、(2) 大部分のプレイヤーに最大の可用性と最小のレイテンシーを提供する可能性の高い最上位のスポットにフリートを配置します。

このシナリオでは、us-east-1 フリートがほとんどのプレイヤーに最適に対応することが予期されます。したがって、高パフォーマンスのインスタンスタイプを選択し、複数の同時ゲームセッション用にそのインスタンスタイプを設定します。次に、高いプレイヤーボリュームに合わせてスケールし、キューの最初にリストします。バックアップ ca-central-1 フリートは小さく安価なインスタンスタイプを使用し、最小限の容量を維持します。追加のバックアップフリート (追加された場合) を順序付ける必要はありませんが、レイテンシーレートが高くなる可能性があるリージョンの優先順位は低くなる場合があります。

• ほとんどのリクエストにレイテンシーデータがあることが予期される場合、FleetIQ によって優先順位が再設定されるため、リストの順序の重要性は下がります。レイテンシーレートを最小化するため、ターゲットプレイヤーに近いすべてのリージョンにフリートを配置します。一般的に、予期されるプレイヤーの需要を処理するように設定されたフリートが必要です。最上位のスポットのフリートが、レイテンシーデータのないリクエストを処理するために優れた選択であることを確認します。

このシナリオでは、us-east-1 と ca-central-1 の両方のフリートが低いレイテンシーレートを提供し、頻繁に使用されることが予期されます。両方のフリートとも高パフォーマンスのインスタンスタイプを使用し、複数の同時ゲームセッション用に設定されます。ca-central-1 フリートの需要は少し低くなるため、低い容量が維持されます。

キューが実行される際に、メトリクスデータを使用して、設計がどれだけ優れているか判断できます。キューにより、既存のフリートを再設定するか、削除してホスティングのニーズにより適合する新しいフリートを追加し、必要に応じてフリートを変更します。

プレイヤーレイテンシーポリシーの設計ゲームセッションの配置リクエストにプレイヤーレイテンシーデータが含まれている場合、AmazonGameLift は FleetIQ を使用して、最小限のレイテンシーでプレイヤーがゲームに参加できるようにします。FleetIQ は、リクエストのすべてのプレイヤーのリージョン別の平均レイテンシーに基づいて、キューの送信先の優先順位を設定します。

プレイヤーレイテンシーポリシーを設定して、Amazon GameLift がプレイヤーレイテンシーデータを使用する方法を指定できます。プレイヤーレイテンシーポリシーを設定して、次のことができます。

• 個々のプレイヤーの最大レイテンシーを設定します。Amazon GameLift は、デフォルトでリクエストのすべてのプレイヤーの平均レイテンシーに基づいてゲームセッションを配置します。このポリシーにより、プレイヤーに対するレイテンシーが最大値を超える場所にはゲームセッションが配置されないようになります。

• 複数のポリシーを使用して、継続した最大レイテンシーを緩和します。最大レイテンシーを設定すると、プレイヤーをレイテンシーの高いゲームから保護できますが、レイテンシー値が高いゲームセッションリクエストが満たされないリスクが高まります。一連のポリシーを使用して、時間と共に最大レイテンシーを徐々に引き上げることができます。このアプローチを使用して、優れたゲーム体験を提供することと、最小の待機時間でプレイヤーをゲームに参加させることのバランスを取ります。

たとえば、タイムアウトが 5 分間のキューを持つ次のポリシーを定義することができます。最大レイテンシー値が最も小さいポリシーから順に、複数のポリシーが連続して適用されます。このポリシーのセット

Version138

Page 145: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドキューの設計

は 50 ミリ秒の最大レイテンシーで開始し、時間と共に 200 ミリ秒に増やします。最後のポリシーでは、すべてのプレイヤーに許可される絶対最大レイテンシーを設定します。レイテンシーにかかわらず、すべてのゲームセッションが配置されるようにする場合は、最後のポリシーの最大数を非常に高い値に設定できます。

1. 120 秒かけて、すべてのプレイヤーレイテンシーが 50 ミリ秒未満の送信先を検索します。2. 次に、120 秒かけて、すべてのプレイヤーレイテンシーが 100 ミリ秒未満の送信先を検索します。3. 次に、キュータイムアウトまでの残り時間を使って、すべてのプレイヤーレイテンシーが 200 ミリ秒未

満の送信先を検索します。

この例では、最初の 2 分間は最初のポリシー、次の 2 分間は 2 番目のポリシー、配置リクエストがタイムアウトするまでの残り 5 分間は 3 番目のポリシーが適用されます。

スポットインスタンスのキューの設計フリートにスポットインスタンスを使用する予定がある場合は、キューを設定する必要があります。理想的には、スポットフリートによるコスト削減を活用する耐障害性に優れたキューを設定しながら、ゲームセッションの中断の可能性を最小限に抑えます。以下のベストプラクティスを使用します。

• 複数のリージョンからフリートを含めます。マルチリージョンキューは、新しいゲームセッションをホストするために常にフリートを利用可能にすることで、弾力性を向上させます。

• 各リージョンに、少なくとも 1 つのスポットフリートとオンデマンドフリートを含めます。この設計により、リージョンで現在実行可能なスポットフリートがない場合でも、任意のリージョンにゲームセッションを配置できます。

• 各リージョンに複数のスポットフリートを含める場合は、フリートごとに異なるインスタンスタイプを使用します。できれば、同じインスタンスファミリー (c5.large、c5.xlarge など) を含めます。この設計により、複数のスポットフリートが利用できなくなったり、同時に中断されたりする可能性が低くなります。Amazon GameLift コンソールで料金履歴データを参照し、希望のインスタンスタイプをスポットで利用した場合に通常得られる大きなコスト削減を確認します。このデータは、スポットインスタンスとオンデマンドインスタンスの料金を表示し、インスタンスごとに予想されるスポットのコスト削減を提供します。

• FleetIQ が最低料金のスポットインスタンスを選択する機能を最適化するには、すべてのリージョンのプレイヤーレイテンシーデータを含めるように計画します。「FleetIQ の詳細 (p. 139)」で説明しているように、FleetIQ は、送信先がリージョン別に優先順位が再設定されていれば、より効果的に動作します。これは、レイテンシーデータが提供されている場合に行われます。

• ゲームセッションの配置リクエストでプレイヤーレイテンシーデータを提供しない場合は、お客様の希望する送信先の順序を指定します。たとえば、リージョンの希望に基づいて送信先をリストします (スポットフリートの後にオンデマンドフリート)。または、すべてのスポットフリートを最初にリストします。

FleetIQ の詳細FleetIQ は、新規のゲームセッションで可能な限り最適な配置を検索するために以下の意思決定プロセスを使用します。

1. FleetIQ はキューの送信先をフィルタリングして、以下に該当するフリートを削除します。• リクエストにプレイヤーレイテンシーデータが含まれている場合、FleetIQ はキューのプレイヤーレ

イテンシーポリシーを評価して、プレイヤーレイテンシーがポリシーの上限を超えているリージョンのすべてのフリートを削除します。

• FleetIQ は、許容できない中断率のせいで現在無効になっているすべてのスポットフリートを削除します。

2. FleetIQ は、以下に基づいて残りのキュー送信先に優先順位を付けます。

Version139

Page 146: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドキューの設計

• プレイヤーレイテンシーデータが指定されている場合、FleetIQ はリージョン単位でキューの送信先の順序を並べ替えます。プレイヤーレイテンシーの平均が最も低い送信先がリストの先頭になります。

• プレイヤーレイテンシーデータが指定されていない場合、FleetIQ はキュー送信先の元のリストを使用します。

3. FleetIQ は優先順位リストから送信先を選択します。• 送信先リストがリージョン単位で優先順位が付けられている場合、FleetIQ はレイテンシーが最低で

料金も最低のリージョンのフリートを選択します。有効なスポットフリートがない場合には、このリージョンの任意のフリートが選択されます。

• 送信先リストに優先順位が付けられていない場合、FleetIQ は、より低い料金のスポットフリートが元のリストにあるときでも、リストの最初の有効なフリートを選択します。

4. FleetIQ は、選択されたフリートで新しいゲームセッションをホストするためのサーバープロセスが利用可能であるかどうかを評価します。新しいゲームセッションの配置先のフリートが、レイテンシーと価格の両方またはいずれかで最低である場合に、「最適な」配置とみなされます。

5. 選択したフリートに使用可能なリソースがない場合、FleetIQ は次のリストの送信先に移動し、新しいゲームセッションをホストするフリートが見つかるまでこれを繰り返します。

キューメトリクスの評価キューのパフォーマンスを評価するには、メトリクスを使用します。キュー固有のメトリクスは、Amazon GameLift コンソール (キューの詳細を表示 (p. 144)) または Amazon CloudWatch で表示できます。キューメトリクスの説明については、「キューの Amazon GameLift メトリクス (p. 192)」を参照してください。

キューメトリクスは、3 つの主要分野でインサイトを提供できます。

• キューの全体的なパフォーマンス – メトリクスは、キューが配置リクエストに正常に対応している度合いを示し、配置が失敗したタイミングと理由を確認するのに役立ちます。フリートを手動でスケールしたキューの場合、メトリクスの平均待機時間とキューの深さは、キューの容量を調整する必要があることを示す場合があります。

• FleetIQ パフォーマンス – FleetIQ のフィルタ処理と優先度設定を使用する配置リクエスト (プレイヤーレイテンシーデータがあるリクエスト) の場合、メトリクスは FleetIQ が新しいゲームセッションの最適な配置を見つける確率を示します。最適な配置には、プレイヤーレイテンシーが最低であるリソースを見つけること、またはスポットフリートがある場合は、価格が最低であるリソースを見つけることが含まれます。また、最適な配置が失敗した一般的な理由を特定するためのエラーメトリクスもあります。

• リージョン固有の配置 – マルチリージョンキューの場合、メトリクスは正常な配置のリージョン別内訳を示します。FleetIQ を使用するキューの場合、このデータはプレイヤーのアクティビティの発生箇所に関する有益なインサイトを提供します。

FleetIQ のパフォーマンスメトリクスを評価する場合は、以下のヒントを参考にしてください。

• 「成功した配置」メトリクスと最低のレイテンシー/価格に関する FleetIQ のメトリクスを併用して、キューの最適な配置率を追跡します。

• キューの最適な配置率を向上させるには、以下のエラーメトリクスを確認します。• 「最初の選択肢が使用できない」というエラーメトリクスの値が高い場合、これはキューのフリート

の容量のスケーリングを調整する必要があることを示します。キューのすべてのフリートについてスケーリングが過小であるか、特定のフリートまたはリージョンがほとんどの配置に対して最適なフィットになっている可能性があります。

• 「最初の選択肢が有効でない」というエラーメトリクスの値が高い場合、これはスポットフリートを確認する必要があることを示します。特定のインスタンスタイプの中断率が高すぎる場合、スポットフリートは「有効でない」とみなされます。この問題を解決するには、キューを変更して異なるインスタンスタイプのスポットフリートを使用します。スポットフリートのキューに関するベストプラク

Version140

Page 147: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドキューの作成

ティスで示したように、リージョンごとに異なるインスタンスタイプのスポットフリートを含めるのが適切です。

キューの作成キューは、複数のフリートおよびリージョン間で最適なホスティングリソースに新しいゲームセッションを配置するために使用されます。ゲームのキューを構築する方法の詳細については、「ゲームセッションキューの設計 (p. 136)」を参照してください。

ゲームクライアントで、配置リクエストを使用して、新しいゲームセッションがキューで開始されます。ゲームセッションの配置の詳細については、「ゲームセッションの作成 (p. 51)」を参照してください。

キューを作成するには、Amazon GameLift コンソールまたは AWS Command Line Interface (CLI) を使用します。AWS Command Line Interface ツールを取得してインストールします。

キューを作成 (コンソール)AWS マネジメントコンソールでキューを作成します。

キューを作成するには

1. Amazon GameLift コンソール (https://console.aws.amazon.com/gamelift/) を開き、キューを作成するリージョンを選択します。

2. Amazon GameLift のメニューで、[キューを作成する] を選択します。3. [Create queue] ページで、[Queue Details] セクションに入力します。

• [キュー名] – わかりやすいキュー名を作成し、リストとメトリクスで簡単に識別できるようにします。新しいゲームセッションのリクエスト ( セッション (StartGameSessionPlacement を使用) を指定する必要があります。スペースと特殊文字は許可されていません。

• [キュータイムアウト] – 新しいゲームセッションの配置を試みてから Amazon GameLift が停止するまでの時間を指定します。Amazon GameLift はリクエストがタイムアウトするまで、フリートで使用可能なリソースの検索を続けます。

4. [Player latency policies] で、キューのポリシーを 0 個以上定義します。配置リクエストごとに、Amazon GameLift は自動的にすべてのプレイヤーの平均レイテンシーを最小限に抑えます。個別のプレイヤーごとの上限を設定するレイテンシーポリシーを作成することもできます。プレイヤーレイテンシーポリシーは、プレイヤーのレイテンシーデータが配置リクエストで提供される場合のみを評価します。配置プロセスを通して 1 つの制限を適用する選択も、徐々に制限を緩和することもできます。詳細については、プレイヤーレイテンシーポリシーの設計 (p. 138) を参照してください。

a. 最初のポリシーを追加するには、[Add player latency policy] を選択します。このポリシーの最大プレイヤーレイテンシー値を入力します (デフォルトは 150 ミリ秒)。ポリシー言語に示されるように、最初のポリシーは配置プロセス全体に対して (追加ポリシーを作成する場合)、あるいは他のポリシーが期限切れとなった後の残りの時間に対してのどちらにも適用されます。——

b. 別のプレイヤーレイテンシーポリシーを追加するには、[Add player latency policy] を再び選択します。追加のポリシーの場合、最大プレイヤーレイテンシー値と時間の長さ (秒単位) を設定して適用します。これらのポリシーの最大レイテンシー値は、最初のポリシーより小さくする必要があります。

ポリシーを追加すると、コンソールでは最大プレイヤーレイテンシー値に基づいてポリシーが自動的に並べ替えられます (値の小さい順)。これは、ゲームセッション配置処理中にポリシーが適用される順序です。

5. [Destinations] で、キューに 1 つ以上の送信先を追加します。キューには、複数のリージョンおよびオンデマンドフリートとスポットフリート両方のフリートを含めることができます。キュー内のすべてのフリートに対して証明書設定を同じ (GENERATED または DISABLED) にする必要があります。す

Version141

Page 148: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドキューの作成

べてのフリートは、キューを使用するゲームクライアントと互換性のあるゲームビルドを実行している必要があります。たとえば、複数のリージョンにあり同じゲームビルドを実行しているフリートです。フリートとエイリアスは、送信先として追加する前に存在している必要があります。

a. [Add destination] を選択します。b. 送信先のリージョンとタイプ (フリートまたはエイリアス) を指定するには、列を使用します。表

示されたフリートまたはエイリアス名のリストから、追加するフリートまたはエイリアスを選択します。

c. 送信先を保存するには、緑色のチェックマークのアイコンを選択します。別の送信先の追加、デフォルト順序の変更、キューの保存を行う前に各送信先を保存する必要があります。

d. 送信先が複数ある場合、[Priority (default)] 列の矢印アイコンを使用してデフォルト順序を設定します。この順序は、新しいゲームセッションを配置に使用可能なリソースの送信先を検索する際に Amazon GameLift により使用されます(ゲームセッション配置リクエストにプレイヤーレイテンシーデータが含まれる場合、デフォルト順序が上書きされます)。

6. 新しいキューの設定が完了したら、[Create queue] を選択します。新しいキューが保存され、新しいキューと他の既存のキューが [Queues] ページに表示されます。このページからキューを選択して、キューメトリクスを含む詳細情報を表示できます。キュー設定はいつでも編集できます。

キューの作成 (AWS CLI)AWS Command Line Interface (AWS CLI) を使用してキューを作成できます。AWS Command LineInterface ツールを取得してインストールします。

キューを作成するには

• コマンドラインウィンドウを開き、create-game-session-queue コマンドを使用してキューを定義します。詳細については、AWS CLI コマンドリファレンスを参照してください。

次の例では、5 分でタイムアウトする前に複数のフリートのいずれかに新しいゲームセッションを配置するためのキューを作成します。フリートは送信先として表示され、フリート ARN またはエイリアス ARNによって識別されます。すべてのフリートとエイリアスは存在する必要があります。Amazon GameLift は、ここに表示されている順序で新しいゲームセッションをフリートに配置しようとします (個々のゲームセッション配置リクエストによって順序が上書きされない場合)。

Note

フリート/エイリアス ARN の値を取得するには、フリート/エイリアス ID を指定して describe-fleet-attributes または describe-alias を呼び出します。ARN (Amazon リソースネーム) 形式の詳細については、「ARN と AWS サービスの名前空間」を参照してください。

$ aws gamelift create-game-session-queue --name "Sample test queue"--timeout-in-seconds 300--destinations DestinationArn=arn:aws:gamelift:us-east-1::alias/alias-a1234567-b8c9-0d1e-2fa3-b45c6d7e8910 DestinationArn=arn:aws:gamelift:us-west-2::alias/alias-b0234567-c8d9-0e1f-2ab3-c45d6e7f8901 DestinationArn=arn:aws:gamelift:us-west-2::fleet/fleet-f1234567-b8c9-0d1e-2fa3-b45c6d7e8912

コピー可能バージョン:

aws gamelift create-game-session-queue --name "Sample test queue" --timeout-in-seconds 300 --destinations DestinationArn=arn:aws:gamelift:us-east-1::alias/alias-a1234567-b8c9-0d1e-2fa3-b45c6d7e8910 DestinationArn=arn:aws:gamelift:us-west-2::alias/alias-b0234567-c8d9-0e1f-2ab3-c45d6e7f8901

Version142

Page 149: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドキューの表示

DestinationArn=arn:aws:gamelift:us-west-2::fleet/fleet-f1234567-b8c9-0d1e-2fa3-b45c6d7e8912

create-game-session-queue リクエストが成功すると、Amazon GameLift は新しいキュー設定を含むGameSessionQueue オブジェクトを返します。これで、StartGameSessionPlacement を使用してリクエストをキューに送信できます。

プレイヤーレイテンシーポリシーを使用してキューを作成するには

• コマンドラインウィンドウを開き、create-game-session-queue コマンドを使用してキューを定義します。詳細については、AWS CLI コマンドリファレンスを参照してください。

次の例では、10 分間のタイムアウト、3 つの送信先、および一連のプレイヤーレイテンシが設定されたキューを作成します。この例では、最初の 2 分間は最初のプレイヤーポリシー、次の 2 分間は 2 番目のポリシー、配置リクエストがタイムアウトするまでの残り 6 分間は 3 番目のポリシーが適用されます。

$ aws gamelift create-game-session-queue--name "matchmaker-queue"--timeout-in-seconds 600--destinations DestinationArn=arn:aws:gamelift:us-east-1::alias/alias-a1234567-b8c9-0d1e-2fa3-b45c6d7e8910 DestinationArn=arn:aws:gamelift:us-west-2::alias/alias-b0234567-c8d9-0e1f-2ab3-c45d6e7f8901 DestinationArn=arn:aws:gamelift:us-west-2::fleet/fleet-f1234567-b8c9-0d1e-2fa3-b45c6d7e8912--player-latency-policies "MaximumIndividualPlayerLatencyMilliseconds=50,PolicyDurationSeconds=120" "MaximumIndividualPlayerLatencyMilliseconds=100,PolicyDurationSeconds=120" "MaximumIndividualPlayerLatencyMilliseconds=150"

コピー可能バージョン:

aws gamelift create-game-session-queue --name "matchmaker-queue" --timeout-in-seconds 600 --destinations DestinationArn=arn:aws:gamelift:us-east-1::alias/alias-a1234567-b8c9-0d1e-2fa3-b45c6d7e8910 DestinationArn=arn:aws:gamelift:us-west-2::alias/alias-b0234567-c8d9-0e1f-2ab3-c45d6e7f8901 DestinationArn=arn:aws:gamelift:us-west-2::fleet/fleet-f1234567-b8c9-0d1e-2fa3-b45c6d7e8912 --player-latency-policies "MaximumIndividualPlayerLatencyMilliseconds=50,PolicyDurationSeconds=120" "MaximumIndividualPlayerLatencyMilliseconds=100,PolicyDurationSeconds=120" "MaximumIndividualPlayerLatencyMilliseconds=150"

create-game-session-queue リクエストが成功すると、Amazon GameLift は新しいキュー設定を含むGameSessionQueue オブジェクトを返します。

キューの表示既存のすべてのゲームセッション配置キュー (p. 135)に関する情報を表示できます。表示されるキューには、選択されたリージョンで作成されたフリートのみが含まれます。[Queues] ページから、新しいキューの作成、既存のキューの削除、選択したキューの詳細ページの表示を行うことができます。キュー詳細ページには、キューの設定とメトリクスデータが含まれます。キューを編集または削除することもできます。

[Queues] ページを表示するには

1. Amazon GameLift コンソールのメニューで [キュー] を選択します。

[Queues] ページには、各キューに関する次の概要情報が表示されます。

Version143

Page 150: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドキューの表示

• [キュー名] – キューに割り当てられた名前です。新しいゲームセッションのリクエストはこの名前でキューを指定します。

• [キュータイムアウト] – ゲームセッション配置リクエストがキューに残る最長時間 (秒) です。この時間を経過するとタイムアウトします。

• [キューにある送信先] – キュー設定に示されるフリートの数です。新しいゲームセッションは、キューにある任意のフリートに配置できます。

2. メトリクスを含むキューの詳細を表示するには、キューの名前を選択します。キュー詳細ページについて詳しくは、「キューの詳細を表示 (p. 144)」を参照してください。

キューの詳細を表示キューの設定やメトリクスなど、キューの詳細情報にアクセスできます。キュー詳細ページを開くには、メインの [Queues] ページに移動し、キュー名を選択します。

キュー詳細ページには、概要テーブルと、追加情報を含むタブが表示されます。このページで、以下の操作を実行できます。

• キューの設定、送信先のリスト、プレイヤーレイテンシーポリシーを更新します。[Actions]、[Editqueue] の順に選択します。

• キューを削除します。キューが削除されると、新しいゲームセッションでそのキュー名を参照するすべてのリクエストが失敗します。(削除したキューの名前を使用して新しいキューを作成すると、削除したキューを復元できます。) [Actions]、[Delete queue] の順に選択します。

概要

概要テーブルには、次の情報が含まれます。

• [キュー名] – キューに割り当てられた名前です。新しいゲームセッションのリクエストはこの名前でキューを指定します。

• [キュータイムアウト] – ゲームセッション配置リクエストがキューに残る最長時間 (秒) です。この時間を経過するとタイムアウトします。

• [キューにある送信先] – キュー設定に示されるフリートの数です。新しいゲームセッションは、キューにある任意のフリートに配置できます。

送信先

[Destinations] タブに、キューにリストされたすべてのフリートまたはエイリアスが表示されます。フリートはフリート ARN またはエイリアス ARN (フリートまたはエイリアスの ID とリージョンを示す) によって識別されます。

Amazon GameLift は、新しいゲームセッションをホスト可能なリソースの送信先を検索するとき、ここにリストされた順序で検索します。リストされた最初の送信先に容量がある限り、新しいゲームセッションはそこに配置されます。これは、送信先のデフォルトの順序です。プレーヤのレイテンシーデータを提供することによって、個々のゲームセッションの配置リクエストがデフォルトの順序を上書きするようにすることができます。このデータは、Amazon GameLift に、平均プレイヤーレイテンシーが最も低い利用可能な送信先を検索するように指示します。

送信先を追加、編集、または削除するには、[Actions]、[Edit queue] の順に選択します。

プレイヤーレイテンシーポリシー

[Player latency policies] タブには、キューに定義済みのすべてのポリシーが表示されます。ポリシーは、ゲームセッション配置処理中に適用される順序でリストされます。

Version144

Page 151: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドFlexMatch マッチメーカーの設定

プレイヤーレイテンシーポリシーを追加、編集、または削除するには、[Actions]、[Edit queue] の順に選択します。

キューメトリクス[Metrics] タブには、時間の経過に伴うキューメトリクスのグラフィカル表現が表示されます。

キューメトリクスには、キュー全体の配置アクティビティや成功した配置のリージョン別内訳など、さまざまな情報が含まれます。リージョン固有のデータは、ゲームがホストされている場所を追跡するのに役立ちます。FleetIQ を使用して配置の優先順位を設定することでプレイヤーレイテンシーとホスティングコストを最小限に抑えるキューでは、キュー設計全体の問題を検出するのにリージョン別の配置メトリクスが役立つ場合があります。

キューメトリクスは、Amazon CloudWatch でも利用できます。すべてのメトリクスの説明は、「キューの Amazon GameLift メトリクス (p. 192)」にあります。

メトリクス情報をグラフで表示するには

1. グラフ領域の左側にリストされたメトリクス名の 1 つまたは複数をクリックします。黒で表示されるメトリクス名はグラフに表示されますが、グレーのメトリクス名は無効です。カラーキーを使用して、選択したメトリクスに一致するグラフの線を識別します。

2. メトリクスデータの表示方法を変更するには、グラフ領域の上に表示された次のフィルターを使用します。

• [日付] および [Period (期間)] – 日付範囲を選択する 2 つのオプションがあります。• [Last hour]、[Last day]、[Last week] など、現在の時刻から見た期間を選択するには、[Relative]

を使用します。• 任意の開始日時と終了日時を持つ期間を指定するには、[Absolute] を使用します。

• [詳細度] – データポイントを集計する時間の長さを選択します。• [更新の頻度] – グラフ表示を更新する頻度を選択します。グラフの右上にある更新ボタンをクリック

することで、グラフをいつでも更新できます。• [タイムゾーン] – グラフ表示用の時間形式として、[UTC] (協定世界時) または [Browser time (ブラウ

ザ時刻)] (現地時間) を選択します。• [ポイントの表示] – 個別のデータポイントを円として表示するか、線のみを表示するかを切り替えま

す。

Amazon GameLift FlexMatch マッチメーカーの設定

FlexMatch マッチメーカープロセスでは、ゲームマッチングを構築します。受け取ったマッチメーキングリクエストのプールの管理、マッチングのチームの編成、最適なプレイヤーグループを見つけるためのプレイヤーの処理および選択、マッチングのゲームセッションを配置および開始するプロセスの起動を行います。このトピックでは、マッチメーカーの主な特徴と、ゲームに合わせて設定をカスタマイズする方法について説明します。

FlexMatch マッチメーカーでマッチメーキングリクエストを受け取って処理する方法の詳細については、「マッチメーキングプロセス (p. 15)」を参照してください。

トピック• FlexMatch マッチメーカーの設計 (p. 146)• マッチメーキング設定の作成 (p. 147)• FlexMatch ルールセットの作成 (p. 149)• FlexMatch イベント通知の設定 (p. 172)

Version145

Page 152: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマッチメーカーを設計する

FlexMatch マッチメーカーの設計マッチメーカー設定マッチメーカーには最低 3 つの要素が必要です。

• ルールセットは、マッチングのチームのサイズと範囲を決定し、マッチングのプレイヤーの評価に使用するルールのセットを定義します。各マッチメーカーは 1 つのルールセットを使用するように設定されます。ルールセットの作成の詳細については、「FlexMatch ルールセットの作成 (p. 149)」を参照してください。

• ゲームセッションキューは、マッチメーカーで作成したマッチングをホストする場所を決定します。マッチメーカーは、キューを使用して使用可能なリソースを見つけ、マッチングのゲームセッションを配置します。キューは、ゲームセッションの配置先のリージョンを指定します。キューの作成の詳細については、「キューの作成 (p. 141)」を参照してください。

• リクエストのタイムアウトは、マッチメーキングリクエストがリクエストプールに残留できる期間を決定します。この期間内にリクエストはマッチングの候補として評価されます。リクエストがタイムアウトすると、マッチングの対象外となり、プールから削除されます。

これらの最小要件に加えて、以下の追加のオプションを使用してマッチメーカーを設定できます。

プレイヤーの承諾

マッチング候補として選択されたすべてのプレイヤーに参加の承諾を要求するようにマッチメーカーを設定できます。承諾を要求する場合は、マッチング案を承諾または却下するオプションをすべてのプレイヤーに提供する必要があります。マッチングを完了するには、マッチング案のすべてのプレイヤーから事前に承諾を受け取る必要があります。いずれかのプレイヤーがマッチングを却下するか、承諾に失敗すると、マッチング案は破棄されます。マッチメーキングリクエストの処理手順としては、まず、すべてのプレイヤーによってマッチングが承諾されたリクエストは、マッチメーキングプールに戻されて処理が続行されます。少なくとも 1 人のプレイヤーがマッチングを却下するか、応答しなかったリクエストは失敗し、処理が中断されます。プレイヤーの承諾には制限時間が必要です。これにより、マッチングを続行するにはすべてのプレイヤーが制限時間内にマッチング案を承諾することを要求できます。

マッチメーキング通知

この機能では、すべてのマッチメーキング関連のイベントを、指定した Amazon Simple NotificationService (SNS) トピックに発行します。すべてのマッチメーキングリクエストは非同期であるため、すべてのゲームにはマッチメーキングリクエストのステータスを追跡する手段が必要です。その手段として、通知は簡単かつ効率的に設定できます。リクエストの追跡オプションの詳細については、「ゲームクライアントへの FlexMatch の追加 (p. 74)」を参照してください。通知を使用するには、まず SNS トピックを設定します。次にマッチメーキング設定で通知先としてトピック ARN を指定します。通知の設定の詳細については、「FlexMatch イベント通知の設定 (p. 172)」を参照してください。

バックフィルモード

FlexMatch バックフィルは、ゲームセッション全体を通して適切にマッチングした新しいプレイヤーでゲームセッションを満たすために役立ちます。FlexMatch は、バックフィルリクエストを処理する際に、元のプレイヤーをマッチングするときに使用されたのと同じマッチメーカーとプロセスを使用して、新しいプレイヤーを見つけます。マッチメイキング設定でバックフィルモードを設定することで、自動バックフィルを使用するか、バックフィルリクエストを手動で管理するか選択できます。自動バックフィルの詳細については、「FlexMatch を使用した既存のゲームのバックフィル (p. 80)」を参照してください。

バックフィルモードを [自動] に設定すると、GameLift はゲームセッションで開いているプレイヤースロットが発生するたびに、新しいバックフィルリクエストをトリガーします。GameLift はゲームサーバー上で新しいゲームセッションが開始されるとすぐに、空きスロットがあるゲームセッションに対してバックフィルリクエストの生成を開始します。自動バックフィルは、ゲームセッションに対して明示的に無効になるまで続行します。マッチメーカーが大規模なマッチング (40 人の以上のプレイヤー) を定義するルールセットを使用している場合、自動的に生成されるバックフィルリクエストには、より高い優先度が与えら

Version146

Page 153: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマッチメーキング設定の作成

れます。つまり、新しいプレイヤーが現れてゲームスロットをリクエストした場合、新規のゲームではなく既存のゲームに配置される可能性が高くなります。

自分でゲームをバックフィルしない場合や、ゲームに手動でバックフィルリクエストをトリガーする場合は、バックフィルモードを [手動] に設定します。手動バックフィルでは、バックフィルリクエストをいつトリガーするかを柔軟に決定できます。たとえば、ゲームの特定のフェーズ中や、特定の条件が存在するときは、新しいプレイヤーを追加したくない場合があります。バックフィルリクエストは、ゲームサーバーまたはゲームクライアントから手動でトリガーできます (最新のプレイヤーカウントがあるため、ゲームサーバーから行うことをお勧めします)。

ゲームのプロパティ

新しいゲームセッションをリクエストする場合、作成するタイプのゲームセッションについて追加情報をゲームサーバーに渡すことができます。ゲームのプロパティは、ゲームセッションのリクエストのタイプ(配置リクエストまたはマッチメーキングリクエスト) を問わず、渡すことができます。マッチメーキングでは、ゲームのプロパティがマッチメーカー設定に含められます。マッチメーカーで作成されたすべてのゲームセッションで、同じゲームのプロパティが使用されます。ゲームのプロパティを変える必要がある場合は、別個のマッチメーカーを作成して新しいプロパティを反映し、このマッチメーカーにマッチメーキングリクエストを送信します。

プレイヤースロットの予約

各マッチングの特定のプレイヤースロットを予約し、将来の使用のために確保できます。これを行うには、マッチメーキング設定の "additional player count" プロパティを設定します。

カスタムイベントデータ

このプロパティを使用して、マッチメーカーのすべてのマッチメーキング関連イベントに一連のカスタム情報を含めます。この機能は、マッチメーカーのパフォーマンスを追跡するなど、ゲーム固有の特定のアクティビティを追跡するのに役立ちます。

マッチメーキング設定の作成FlexMatch マッチメーカーをセットアップするには、新しいマッチメーキング設定を作成します。AmazonGameLift コンソールまたは AWS Command Line Interface (AWS CLI) を使用します。マッチメーカーの設定の詳細については、「the section called “マッチメーカーを設計する” (p. 146)」を参照してください。

マッチメーカーのリージョンを選択する

マッチメーカーは、その設定を作成したリージョンでホストされます。マッチメーカーの場所がそのパフォーマンスに与える影響と、対象プレイヤーのマッチングエクスペリエンスを改善する方法を検討する必要があります。マッチメーカーは、マッチメーキングをリクエストするクライアントまたはクライアントサービスの近くに配置することをお勧めします。ベストプラクティスとして、マッチメーカーとそれが使用するキューも同じリージョンに配置することをお勧めします。これにより、マッチメーカーとキュー間の通信レイテンシーを最小限に抑えることができます。

マッチメーカーを作成する

マッチメイキング設定を作成する前に、マッチメーカーで使用するルールセットとキューを作成しておく必要があります。

Console

1. Amazon GameLift コンソール (https://console.aws.amazon.com/gamelift/home) を開きます。2. マッチメーカーの配置先のリージョンに切り替えます。3. メインメニューで [Create matchmaking configuration] を選択します。マッチメーキング設定の詳

細を入力します。

• [Name (名前)] – マッチメーカーをリストとメトリクスで簡単に識別できるように、わかりやすい名前を付けます。マッチメーカー名は、リージョン内で一意である必要があります。マッチ

Version147

Page 154: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマッチメーキング設定の作成

メーキングリクエストでは、どのマッチメーカーを使用するかを、その名前とリージョンで判断します。

• [Description (説明)] – (オプション) マッチメーカーの説明を追加します。説明は識別にのみ使用され、マッチメーキングプロセスでは使用されません。

• [キュー] – このマッチメーカーで使用するゲームセッションキューを選択します。キューを見つけるには、まずキューを設定したリージョンを選択します。次に、そのリージョンで利用可能なキューのリストから必要なキューを選択します。

• [リクエストのタイムアウト] – マッチメーカーが各リクエストでマッチングを完了するまでの最大時間を秒単位で入力します。この時間を超えたマッチメーキングリクエストは終了されます。

• [承諾が必要] – (オプション) マッチング候補の各プレイヤーにマッチへの参加承諾を求めるかどうかを示します。[Yes] を選択した場合は、マッチングをキャンセルするまでにマッチメーカーがプレイヤーの承諾を待機する時間を指定します。

• [ルールセット名] – このマッチメーカーで使用するルールセットを選択します。現在のリージョンで作成済みのすべてのルールセットが一覧表示されます。

• バックフィルモード – マッチングバックフィルを処理する方法を指定します。[自動] を選択して自動バックフィル機能を有効にします。ゲームサーバーまたはゲームクライアントでバックフィルリクエストを管理している場合、またはゲームのバックフィルを希望しない場合は、[手動] を選択します。

• [通知先] – (オプション) マッチメーキングイベント通知を受信するための SNS トピックの ARNを入力します。まだ設定していない場合は、後でマッチメーキング設定を編集して、この情報を追加できます。「FlexMatch イベント通知の設定 (p. 172)」を参照してください。

• [追加のプレイヤー] – (オプション) 新しいマッチングごとに空けておくプレイヤースロットの数を指定します。これらのスロットは、将来のプレイヤーで埋められます。

• [カスタムイベントデータ] – (オプション) イベントメッセージングで、このマッチメーカーと関連付けるデータを指定します。このデータは、マッチメーカーと関連付けられたすべてのイベントに含まれます。

4. マッチメーカーの設定を完了したら、[Create] をクリックします。マッチメーカーが正常に作成されると、マッチメーキングリクエストをすぐに受け入れ可能になります。

AWS CLI

AWS CLI でマッチメーキング設定を作成するには、コマンドラインウィンドウを開き、create-matchmaking-configuration コマンドを使って新しいマッチメーカーを定義します。このコマンドの詳しいドキュメントについては、「AWS CLI コマンドリファレンス」を参照してください。AWS Command Line Interface ツールを取得してインストールします。

この例で作成する新しいマッチメーキング設定では、プレイヤーの承諾を要求し、通知を使用してマッチメーキングリクエストのステータスを追跡します。また、後で追加されるプレイヤー用に 2 つのプレイヤースロットを予約します。

$ aws gamelift create-matchmaking-configuration--name "SampleMatchamker123"--description "The sample test matchmaker with acceptance"--game-session-queue-arns "arn:aws:gamelift:us-west-2:111122223333:gamesessionqueue/My_Game_Session_Queue_One"--rule-set-name "My_Rule_Set_One"--request-timeout-seconds "120"--acceptance-required "true"--acceptance-timeout-seconds "30"--backfill-mode "AUTOMATIC"--notification-target "arn:aws:sns:us-west-2:111122223333:My_Matchmaking_SNS_Topic"--additional-player-count "2"--game-session-data "key=map,value=winter444"

コピー可能バージョン:

Version148

Page 155: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

aws gamelift create-matchmaking-configuration --name "SampleMatchamker123" --description "The sample test matchmaker with acceptance" --game-session-queue-arns "arn:aws:gamelift:us-west-2:111122223333:gamesessionqueue/My_Game_Session_Queue_One" --rule-set-name "My_Rule_Set_One" --request-timeout-seconds "120" --acceptance-required "true" --acceptance-timeout-seconds "30" --backfill-mode "AUTOMATIC" --notification-target "arn:aws:sns:us-west-2:111122223333:My_Matchmaking_SNS_Topic" --additional-player-count "2" --game-session-data "key=map,value=winter444"

マッチメーキング設定の作成リクエストが成功すると、マッチメーカーにリクエストした設定が含まれている MatchmakingConfiguration オブジェクトが Amazon GameLift から返されます。新しいマッチメーカーは、すぐにマッチメーキングリクエストを受け入れ可能になります。

FlexMatch ルールセットの作成FlexMatch マッチメーカーごとにルールセットが必要です。ルールセットは、マッチングの 2 つの重要な要素として、ゲームのチーム構造とサイズ、および最善のマッチングを実現するためにプレイヤーをグループ化する方法を決定します。

たとえば、ルールセットでは「5 名のプレイヤーで構成されるチームを 2 つ編成し、1 つのチームは防御者、別のチームは攻撃者として両チームのマッチングを作成する」というように定義できます。チームには初心者と経験豊富なプレイヤーが含まれる可能性がありますが、2 つのチームのスキル平均は 10 ポイント以内である必要があります。30 秒後にマッチングが作成されない場合は、スキルの要件を徐々に緩和します。

このセクションのトピックでは、マッチメイキングルールセットを設計、構築する方法について説明します。ルールセットを作成するときは、Amazon GameLift コンソールまたは AWS CLI を使用できます。

トピック

• FlexMatch ルールセットを設計する (p. 149)• マッチメーキングルールセットの作成 (p. 154)• FlexMatch ルールセットの例 (p. 156)• FlexMatch ルール言語 (p. 306)

FlexMatch ルールセットを設計するマッチメイキングルールセットは、基本的に 2 つの操作を行います。1 つ目はマッチングのチーム構造とサイズを設計すること、2 つ目は可能な限り最良のマッチングを見つけるためにプレイヤーの評価方法をマッチメーカーに指示することです。ただし、それだけではなく数多くの操作が可能です。たとえば、ルールセットは以下のようなマッチメイキングの問題に対応することもできます。

• 大規模なマッチング (40 人以上のプレイヤー) への特別なマッチング処理をトリガーする。• プレイヤーのゲームプレイを保護するために、最小プレイヤーレイテンシー要件を適用する。• マッチングが成功しない場合に、チーム要件またはマッチングルールを緩和する。• 複数のプレイヤー (パーティーの集約) を含むマッチングリクエストの特別な処理を定義する。

このトピックでは、ルールセットの基本構造とそれを最大 40 人のプレイヤーのマッチングに使用する方法を説明します。40 人以上のプレイヤーのマッチングでは、FlexMatch が効率化されたアルゴリズムを使用して迅速に大規模なプレイヤーグループのマッチングを行うため、異なるルールセット構造が必要になります。大規模なマッチングの構築に関する詳細については、「FlexMatch の大規模マッチングルールセットを設計する (p. 152)」を参照してください。

関連トピック

Version149

Page 156: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

• マッチメーキングルールセットの作成 (p. 154)• FlexMatch ルールセットの例 (p. 156)• FlexMatch ルール言語 (p. 306)

ルールセットコンポーネントを定義するすべてのルールセットは、次のコンポーネントの一部またはすべてを指定します。少なくとも、ルールセットはルールの言語バージョンを指定し、チームを定義して、1 つのルールを設定する必要があります。ほとんどの場合、プレイヤー属性を宣言し、カスタムルールで使用します。

一般的なルールセットのスキーマについては、「大規模マッチング用のルールセットスキーマ (p. 305)」を参照してください。

大規模なマッチング (40 人以上のプレイヤー) を作成するルールセットには追加の要件があります。大規模なマッチングの詳細については、「FlexMatch の大規模マッチングルールセットを設計する (p. 152)」を参照してください。

ルールセットを記述する

ルールセットの詳細を指定します。

• 名前 (オプション) – これはルールセット構文内の記述的なラベルであり、意味のある方法で AmazonGameLift によって使用されることはありません。この値とルールセット名を混同しないでください。ルールセット名は、ルールセットの作成時にルールセット構文と一緒に設定される名前です。

• [ruleLanguageVersion] (必須) – FlexMatch ルールの作成に使用されるプロパティ式の言語のバージョンです。値は「1.0」と等しい必要があります

プレイヤー属性を宣言する

ルールでは、個々のプレイヤー特性に基づくマッチングを目的としてプレイヤーを選択できます。プレイヤー属性に依存するルールを作成する場合は、このセクションで宣言する必要があります。宣言されたプレイヤー属性の値は、このルールセットを使用するマッチメーカーに送信される各マッチメイキングリクエストに含める必要があります。

ルールセットがプレイヤー評価中に特定のプレイヤー属性を使用していない場合でも、そのプレイヤー属性をゲームセッションに渡すことができます。たとえば、プレイヤーのキャラクター選択を渡すことができます。これを行うには、ここでプレイヤー属性を宣言し、各プレイヤーの属性値をマッチメイキングリクエストに含めます。

プレイヤー属性を宣言する際に、以下の情報を含めます。

• 名前 (必須) – この値はルールセットごとに一意であることが必要です。• タイプ (必須) – 属性値のデータ型です。有効なデータ型は、数値、文字列、または文字列マップです。• デフォルト (オプション) – プレイヤーに値が指定されていない場合、使用するデフォルト値を入力しま

す。デフォルトが宣言されていなくて、プレイヤーの値も指定されていない場合、プレイヤーはマッチングされません。

チームを定義する

マッチング用のチームの構造とサイズを記述します。各マッチングには少なくとも 1 つのチームが必要であり、チームの数は自由に定義できます。チームには同じ数のプレイヤーを含めることも、非対称とすることもできます。たとえば、プレイヤー 1 人のモンスターチームと、プレイヤー 10 人のハンターチームを定義できます。

FlexMatch はルールセットでのチームサイズの定義に基づいて、小規模なマッチング、または大規模なマッチングとしてマッチングリクエストを処理します。最大 40 人のプレイヤーのマッチング案は小規模

Version150

Page 157: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

なマッチングで、40 人を超えるプレイヤーのマッチング案は大規模なマッチングです。ルールセットのマッチングサイズ案を定義するには、ルールセットに定義されたすべてのチームに対して maxPlayer 設定を追加します。

• 名前 (必須) – 各チームに一意の名前を割り当てます。この名前はルールおよび拡張で使用され、ゲームセッションで使用されるマッチメイキングデータで参照されます。

• maxPlayers (必須) – チームに割り当てることができるプレイヤーの最大数を指定します。• minPlayers (必須) – マッチングを成功させるために事前に割り当てる必要があるプレイヤーの最小数を

指定します。• 数量 (オプション) – FlexMatch でチームを 1 つ以上作成する場合、この定義に基づいてチームの数を指

定します。FlexMatch がマッチングを作成すると、これらのチームには指定された名前が付けられ、その後に数字が付加されます。たとえば、"Red-Team_1"、"Red-Team_2"、"Red-Team_3" などです。

FlexMatch は常にチームを最大プレイヤー数で満たすよう試みますが、最小プレイヤーサイズで許可される場合は、より少ないプレイヤー数のチームを作成します。マッチング内のすべてのチームのサイズを均等にする場合は、そのためのルールを作成できます。[EqualTeamSizes] の例に関するトピックは、FlexMatch ルールセットの例 (p. 156) を参照してください。

プレイヤーマッチングのルールを設定する

マッチングの承諾についてプレイヤーの評価方法を定義する一連のルールステートメントを作成します。ルールにより、個別のプレイヤー、チーム、またはマッチング全体の要件が設定される場合があります。GameLift がマッチングリクエストを処理する際には、使用可能なプレイヤーのプールで最も古いプレイヤーから開始し、そのプレイヤーを中心にマッチングを構築します。

• 名前 (必須) – ルールセット内のルールを一意に識別する意味のある名前です。ルール名は、このルールに関連するアクティビティを追跡するイベントログとメトリクスでも参照されます。

• 説明 (オプション) – この要素を使用して自由形式のテキストの説明をアタッチします。マッチメーカーでは、この情報を使用しません。

• タイプ (必須) – タイプ要素は、ルールを処理する際に使用するオペレーションを識別します。各ルールタイプには一連の追加プロパティが必要です。たとえば、いくつかのルールタイプでは、プレイヤーの属性を測定するための参照値が必要です。有効なルールタイプとプロパティのリストについては、「FlexMatch ルール言語 (p. 306)」を参照してください。

• ルールタイププロパティ (必須の場合があります) – 定義するルールの種類に応じて、特定のルールプロパティの設定が必要になる場合があります。たとえば、距離のルールと比較のルールでは、測定するプレイヤー属性を指定する必要があります。プロパティと FlexMatch プロパティ式言語の使用方法については、「FlexMatch ルール言語 (p. 306)」を参照してください。

時間経過と共にマッチング要件を緩和する

時間が経過しても有効なマッチングが可能でない場合は、拡張によりマッチング条件を緩和できます。この機能により、完全なマッチングが不可能な場合に、「最適な」マッチングを作成することができます。プレイヤーのスキル要件の緩和、許容されるプレイヤーレイテンシーレベルの引き上げ、または必要な最小プレイヤー数の引き下げに、拡張を使用できます。拡張によりルールを緩和すると、マッチング可能なプレイヤーのプールが徐々に拡大されます。

• ターゲット (必須) – 緩和するルールセット要素を特定します。ルールまたはチームプロパティを緩和できます。

• ステップ (必須) – 複数のステージでルールを緩和できます。各ステップでは、適用する待機時間と新しい値を指定します。ルールセットの拡張では、待機時間はマッチング作成開始後の秒数 (絶対値) で表します。複数のステップがある拡張では、各ステップの待機時間は前のステップより長くする必要があります。最後のステップの待機時間は、(マッチメイキング設定で設定される) マッチングリクエストで許可された時間よりも長くすることはできません。• waitTimeSeconds

Version151

Page 158: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

• 値

このルールセットが自動バックフィルが有効なマッチメーカーで使用されている場合、プレイヤーカウントの要件を急に緩和しないでください。新しいゲームセッションを起動し、自動バックフィルを開始するには数秒かかります。拡張ステップで非常に短い待機時間が設定されている場合、FlexMatch は新しいゲームでバックフィリングが開始される前に、部分的に満たされたマッチングを大量に作成する可能性が高くなります。より良い方法は、自動バックフィルがゲームで開始された後にのみ拡張待機時間を設定することです。これにより、FlexMatch がプレイヤーをより速くより効率的に (新規または既存の) ゲームに参加させることができます。同時に、(同じルールセットを使用して) FlexMatch が既存のゲームを可能な限り迅速にバックフィルできます。拡張のタイミングはチーム構成によって異なります。ゲームに最適な拡張戦略を見つけるために、テストが必要になることが予想されます。

FlexMatch の大規模マッチングルールセットを設計するルールセットが 40 人以上のプレイヤーのマッチングを作成できる場合、FlexMatch はそのルールセットを大規模マッチングとして使用するマッチングリクエストを処理します。大規模マッチングは、多数のプレイヤーをマッチングするのに必要な時間が大幅に短縮する、異なるアルゴリズムを使用して処理されます。

ルールセットが大規模マッチングを作成するかどうかを確認するには、ルールセットのすべてのチームについて、maxPlayer 設定を確認します。この設定が 40 を超えている場合は、大規模なマッチングルール設定を保持しています。大規模マッチングのルールセットでは、最大 200 人のプレイヤーのマッチングを作成できます。

大規模マッチングのルールセットは、他のルールセットと同じコンポーネントを微調整したうえで使用します。また、ルールセットにはアルゴリズムコンポーネントが含まれている必要があります。大規模なマッチングルールセットのスキーマについては、「大規模マッチング用のルールセットスキーマ (p. 305)」を参照してください。

大規模マッチングアルゴリズムを定義する

アルゴリズムコンポーネントをルールセットに追加します。このコンポーネントは、設定に合わせて大規模なマッチングアルゴリズムを設定します。

• batchingPreference (必須) – このプロパティはマッチング作成時にプレイヤーをソートする方法を示します。この値は「分散された」値と同じである必要があります。

balancedAttribute (必須) – マッチングするプレイヤーを選択するときに使用する単一のプレイヤー属性を識別します。個々のプレイヤーを評価する前に、FlexMatch はこの属性に基づいて使用可能なプレイヤープールを並べ替えます。これは、類似した属性値を持つプレイヤーの評価から開始し、徐々に類似性が低いプレイヤーに進み、マッチングが完了するまで続行します。この属性は、マッチングでプレイヤーのバランスを達成するために使用され、この属性に類似した値を持つ可能性の高いプレイヤーをグループ化します。たとえば、スキル属性を選択した場合、類似したスキルレベルを持つプレイヤーがマッチングで一緒にグループ化されます。このメカニズムは、使用可能なプレイヤーのプールが大きい場合に、大規模なマッチングを行うのに最も効果的です。

ルールセットのプレイヤー属性で、必ずバランシング属性を必ず宣言してください。バランシング属性として使用できるのは、「数値」データ型を持つ属性のみです。

• strategy (必須) – マッチング作成で使用するマッチング戦略を選択します。オプションは、[largestPopulation] (デフォルト) と [fastestRegion] です。

最大母集団

この戦略では、FlexMatch は少なくとも 1 つのリージョンで許容されるレイテンシー値を持つすべてのプレイヤーを含めることによって、使用可能な最大許容プレイヤープールを維持します。大規模なプレイヤープールでは、マッチングはより高速になる傾向があり、マッチングされたプレイヤーは、バランシング属性に関してより類似性のあるプレイヤーとなります。プレイヤーは、レイテンシーが理想よりも低いゲームに配置されることがありますが、その値は許容範囲内です。

Version152

Page 159: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

最短リージョン

この戦略では、可能な限り最善のレイテンシーを提供するマッチングにプレイヤーを配置することを最優先します。FlexMatch はレイテンシー値が最も低いと報告されたリージョンに基づいて使用可能なプレイヤーをグループ化し、そのグループからマッチングを満たすよう試みます。FlexMatch は、可能な限り最短のリージョンにプレイヤーを配置することを優先します。ただし、マッチングを満たすのに十分に大きなグループを作成するために、2 番目または 3 番目の (またはそれより遅い) リージョンに基づいてプレイヤーをグループ化することがあります。その結果、マッチングを満たすために時間がかかる場合があります。また、この戦略で作成されたマッチングのプレイヤーは、バランシング属性に関して、より異なる可能性があります。

例を示します。

"algorithm": { "balancedAttribute": "player_skill", "strategy": "balanced", "batchingPreference": "largestPopulation"},

プレイヤー属性を宣言する

少なくとも、ルールセットのアルゴリズムでバランシング属性として使用されるプレイヤー属性を宣言する必要があります。「数値」データ型の属性のみ、分散属性として使用できます。

さらに、ゲームセッションの設定時に、使用する特定のプレイヤー属性をゲームサーバーに渡すことができます。たとえば、プレイヤーのキャラクター選択、マップ優先設定などを渡すことができます。プレイヤー属性に渡すには、ルールセットでその属性を宣言し、マッチメイキングリクエストで各プレイヤーに属性値を含めます。GameLift がゲームセッションリクエストをゲームサーバーに渡す際に、マッチングされたすべてのプレイヤーの属性値を含むマッチメーカーデータが含まれます。

チームを定義する

チームサイズと構造を定義するプロセスは小規模のマッチングと同様ですが、FlexMatch がチームを満たす方法は異なります。これは、部分的に満たされた場合のマッチングに影響します。これに応じて、チームの最小サイズを変更できます。

プレイヤーをチームに割り当てる際に、FlexMatch は以下のルールを使用します。1: 最小プレイヤー要件に到達していないチームを探す。2: これらのチームのうち、空きスロットが最も多いチームを探す。

複数の均等なサイズのチームを定義するマッチングでは、いっぱいになるまでプレイヤーが順に各チームに追加されます。その結果、マッチングがいっぱいでなくても、類似した数のプレイヤーが各チームに割り当てられます。現時点では、大規模マッチングでチームサイズを強制的に均等にすることはできません。非対称のチームサイズのマッチングの場合、プロセスはもう少し複雑です。この場合、プレイヤーは空きスロットが最も多い最大のチームに最初に割り当てられます。次に、空きスロットの数がすべてのチーム間でより均等に分配されるにつれて、プレイヤーはより小さなチームに追加され始めます。

例を見ていきましょう。3 つのチームのルールセットがあるとします。赤チームと青チームはどちらもmaxPlayers=10、minPlayers=5 に設定されます。緑チームは maxPlayers=3、minPlayers=2 に設定されます。このマッチングを満たすシーケンスは次のとおりです。

1. どのチームも minPlayers に達していません。赤チームと青チームには 10 個の空きスロットがあり、緑チームには 3 個の空きスロットがあります。最初の 10 人のプレイヤー (5 人ごと) は、赤チームと青チームに割り当てられます。両方のチームが minPlayers に達しました。

2. 緑チームはまだ minPlayers に達していません。次の 2 人のプレイヤーが緑チームに割り当てられます。

3. すべてチームが minPlayers に達しました。赤チームと青チームは空きスロットが最も多いため、次の 8人プレイヤー (4 人ずつ) が、赤チームと青チームに割り当てられます。

Version153

Page 160: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

4. 3 つすべてのチームの利用可能な空きスロットが 1 個になると、残りの 3 個のプレイヤースロットは、順不同で割り当てられます。

大規模マッチングのレイテンシールールを設定する

大規模マッチングの作成作業の大半は、プレイヤーのバランシング属性と優先付け戦略を使用して実行されます。ほとんどのカスタムルールは使用できません。ただし、プレイヤーレイテンシーにハード制限を設定するルールを作成できます。

このルールを作成するには、maxLatency プロパティを指定して latency ルールタイプを使用します。最大プレイヤーレイテンシーを 200 ミリ秒に設定する例を次に示します。

"rules": [{ "name": "player-latency", "type": "latency", "maxLatency": 200 }],

大規模マッチング要件を緩和する

小規模なマッチングの場合と同様に、マッチングが不可能な場合に時間の経過ともに要件を緩和する拡張を使用できます。大規模なマッチングでは、レイテンシールールを緩和するか、チームカウントを緩和するか選択できます。

大規模なマッチングに自動マッチングバックフィルを使用している場合は、チームプレイヤーカウントを急に緩和しないでください。FlexMatch はゲームセッションが開始された後にのみバックフィルリクエストを生成します。この動作は、マッチングが作成された後数秒間は発生しないことがあります。その間、FlexMatch は部分的に満たされた複数の新しいゲームセッションを作成します。これは特にプレイヤーカウントルールを低くした場合に発生します。その結果、必要以上の数のゲームセッションが作成され、ゲームセッション間のプレイヤーがまばらになります。ベストプラクティスは、最初のステップとして、ゲームセッションを開始するのに十分な、プレイヤー数の拡張により長い時間を設定します。バックフィルリクエストでは大規模マッチングにより高い優先度が与えられるため、着信プレイヤーは新しいゲームが開始される前に既存のゲームのスロットに配置されます。ゲームに対して最適な待機時間を見つけるために、実験が必要になる場合があります。

黄色チームの待機時間を最初よりも長くして、段階的にプレイヤーカウントを低くする例を次に示します。ルールセット内の待機時間は絶対値であり、複合されないことに注意してください。したがって、最初の拡大が 5 秒で発生し、2 番目の拡張はその 5 秒後から 10 秒ごとに発生します。

"expansions": [{ "target": "teams[Yellow].minPlayers", "steps": [{ "waitTimeSeconds": 5, "value": 8 }, { "waitTimeSeconds": 10, "value": 5 }] }]

マッチメーキングルールセットの作成FlexMatch マッチメーカーのマッチメーキングルールセットを管理します。Amazon GameLift コンソールまたは AWS コマンドラインインターフェイス (CLI) を使用して作成します。FlexMatch マッチメイキングの仕組みについては、「the section called “GameLift FlexMatch の仕組み” (p. 14)」を参照してください。

作成したマッチメーキングルールセットを後で変更することはできないため、ルールセットを作成する前にルールセットの構文をチェックすることをお勧めします。コンソールと AWS CLI の両方に検証オプ

Version154

Page 161: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

ションが用意されています。設定できるルールセット数には上限があるため、未使用のルールセットは削除することをお勧めします。

Console

ルールセットを作成するには:

1. Amazon GameLift コンソール (https://console.aws.amazon.com/gamelift/) を開きます。2. ルールセットの配置先のリージョンに切り替えます。ルールセットは、ルールセットを使用する

マッチメーキング設定と同じリージョンに定義する必要があります。3. Amazon GameLift メインメニューで [マッチメーキングルールセットの作成] を選択し、ルール

セットの詳細を入力します。

• [ルールセット名] – リスト、イベント、およびメトリクスで簡単に識別できるように、わかりやすい名前を付けます。ルールセット名は、リージョン内で一意である必要があります。マッチメーキング設定では、どのルールセットを使用するかを、その名前で判断します。注意: これはルールセット本文で現在使用されている「name」フィールドとは異なります。

• [ルールセット] – ルールセット本文の JSON テキストを入力します。ルールセット設計の詳細については、「the section called “ルールセットを設計する” (p. 149)」を参照してください。または、「FlexMatch ルールセットの例 (p. 156)」のいずれかのルールセット例を使用してください。

4. 作成したルールセットを後で編集することはできないため、最初にルールセットを検証することをお勧めします。[Validate rule set] をクリックし、ルールセット本文の構文が正しいことを検証します。

5. マッチメーカーの設定を完了したら、[Create rule set] をクリックします。ルールセットが正常に作成されたら、マッチメーカーで使用できます。

ルールセットを削除するには:

1. コンソールのマッチメイキングルールセットページでルールセットを選択し、[Delete rule set(ルールセットの削除)] をクリックします。

2. 削除対象のルールセットがマッチメーキング設定で現在使用されていると、エラーメッセージが表示されます。この場合は、別のルールを使用するようにマッチメーキング設定を変更してから、ルールセットを削除する必要があります。ルールセットを現在使用しているマッチメーキング設定を確認するには、ルールセット名をクリックしてルールセットの詳細ページを表示します。

AWS CLI

ルールセットを作成するには:

• AWS CLI でマッチメーキングルールセットを作成するには、コマンドラインウィンドウを開き、コマンド create-matchmaking-rule-set (AWS CLI コマンドリファレンス) を使用します。AWS Command Line Interface ツールを取得してインストールします。

この例では、1 つのチームをセットアップする簡単なマッチメーキングルールセットを作成します。ルールセットは、それを参照するマッチメーキング設定と同じリージョンで必ず作成してください。

$ aws gamelift create-matchmaking-rule-set--name "SampleRuleSet123"--rule-set-body '{"name": "aliens_vs_cowboys", "ruleLanguageVersion": "1.0",

Version155

Page 162: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

"teams": [{ "name": "cowboys", "maxPlayers": 8, "minPlayers": 4}]}'

コピー可能バージョン:

aws gamelift create-matchmaking-rule-set --name "SampleRuleSet123" --rule-set-body '{"name": "aliens_vs_cowboys", "ruleLanguageVersion": "1.0", "teams": [{"name": "cowboys", "maxPlayers": 8, "minPlayers": 4}]}'

作成リクエストが成功すると、指定した設定が含まれている MatchmakingRuleSet オブジェクトが Amazon GameLift から返されます。これで新しいルールセットをマッチメーカーで使用できます。

ルールセットを削除するには:

• AWS CLI でマッチメーキングルールセットを削除するには、コマンドラインウィンドウを開き、コマンド delete-matchmaking-rule-set (AWS CLI コマンドリファレンス) を使用します。

削除対象のルールセットがマッチメーキング設定で現在使用されていると、エラーメッセージが表示されます。この場合は、別のルールを使用するようにマッチメーキング設定を変更してから、ルールセットを削除する必要があります。ルールセットを現在使用しているマッチメーキング設定のリストを取得するには、コマンド describe-matchmaking-configurations (AWSCLI コマンドリファレンス) を使用します。

この例では、最初にマッチメーキングルールセットの使用状況を確認し、次にルールセットを削除します。

$ aws gamelift describe-matchmaking-configurations--rule-set-name "SampleRuleSet123"--limit 10

$ aws gamelift delete-matchmaking-rule-set--name "SampleRuleSet123"

コピー可能バージョン:

aws gamelift describe-matchmaking-configurations --rule-set-name "SampleRuleSet123" --limit 10

aws gamelift delete-matchmaking-rule-set --name "SampleRuleSet123"

削除リクエストが成功すると、Amazon GameLift から success が返されます。

FlexMatch ルールセットの例FlexMatch ルールセットは、さまざまなマッチメーキングシナリオに対応できます。以下の例は、FlexMatch 設定構造およびプロパティ式の言語に準拠しています。これらのルールセット全体をコピーするか、必要に応じてコンポーネントを選択します。

FlexMatch ルールおよびルールセットの詳しい使用方法については、以下のトピックを参照してください。

Version156

Page 163: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

• FlexMatch ルールセットの作成 (p. 149)• FlexMatch ルール言語 (p. 306)

Note

複数のプレイヤーが含まれるマッチメーキングチケットを評価する場合は、リクエスト内のすべてのプレイヤーがマッチング要件を満たす必要があります。

例 1: プレイヤーが均等にマッチングされる 2 つのチームを作成する

この例では、プレイヤーが均等にマッチングされる 2 つのチームを設定する手順を示します。

• プレイヤーのチームを 2 つ作成します。• 各チームに 4〜8 名のプレイヤーを含めます。• 最終的に両チームのプレイヤー数は同じにする必要があります。

• プレイヤーのスキルレベルを含めます (指定しない場合、デフォルトの 10 が使用されます)。• スキルレベルが類似するプレイヤーを選択します。両チームのプレイヤーの平均スキル差は 10 ポイン

ト以内とします。• すぐにマッチングが満たされない場合は、妥当な時間内にマッチングが完了するようにプレイヤーのス

キル要件を緩和します。• 5 秒後に、検索範囲を広げて平均スキル差が 50 ポイント以内のプレイヤーを対象にします。• 15 秒後に、検索範囲を広げて平均スキル差が 100 ポイント以内のプレイヤーを対象にします。

このルールセットの使用に関する注意事項

• この例では、チームのサイズが 4 〜 8 プレイヤーの任意のチームを対象にしています (ただし、両チームのサイズは同じにする必要があります)。チームのサイズが有効な範囲内である場合、マッチメーカーはできる限り最大数のプレイヤーをマッチングします。

• FairTeamSkill ルールでは、プレイヤーのスキルに基づいてチームを均等にマッチングします。新たな見込みプレイヤーごとにこのルールを評価するために、FlexMatch は暫定的にチームにプレーヤーを追加し、平均を計算します。ルールが失敗すると、プレイヤー候補はマッチングに追加されません。

• 両方のチームは同一の構造を持っているため、1 つのチーム定義だけを作成し、チーム数を "2" に設定できます。このシナリオでは、チームを "aliens" と名付けた場合、チームには "aliens_1" と "aliens_2"という名前が割り当てられます。

{ "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 }], "rules": [{ "name": "FairTeamSkill",

Version157

Page 164: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

"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", // get skill values for players in each team and average separately to produce list of two numbers "measurements": [ "avg(teams[*].players.attributes[skill])" ], // get skill values for players in each team, flatten into a single list, and average to produce an overall average "referenceValue": "avg(flatten(teams[*].players.attributes[skill]))", "maxDistance": 10 // minDistance would achieve the opposite result }, { "name": "EqualTeamSizes", "description": "Only launch a game when the number of players in each team matches, e.g. 4v4, 5v5, 6v6, 7v7, 8v8", "type": "comparison", "measurements": [ "count(teams[cowboys].players)" ], "referenceValue": "count(teams[aliens].players)", "operation": "=" // other operations: !=, <, <=, >, >= }], "expansions": [{ "target": "rules[FairTeamSkill].maxDistance", "steps": [{ "waitTimeSeconds": 5, "value": 50 }, { "waitTimeSeconds": 15, "value": 100 }] }]}

例 2: 不均等なチーム (ハンターとモンスター) を作成する

この例は、プレイヤーのグループが単一のモンスターをハントするゲームモードを示しています。プレイヤーは、ハンターまたはモンスターのロールを選択します。ハンターは、敵対するモンスターの最小スキルレベルを指定します。ハンターチームの最小サイズは、マッチングを達成するために徐々に緩和できます。このシナリオでは、以下の手順に従います。

• 正確に 5 名のハンターで構成される 1 つのチームを作成します。• 正確に 1 匹のモンスターで構成される別のチームを作成します。• 以下のプレイヤー属性を含めます。

• プレイヤーのスキルレベル (指定しない場合、デフォルトの 10 が使用されます)。• プレイヤーが希望するモンスターのスキルレベル (指定しない場合、デフォルトの 10 が使用されま

す)。• プレイヤーがモンスターのロールを希望するかどうか (指定しない場合、デフォルトで 0 または false

になります)。• 以下の条件に基づいてモンスターとなるプレイヤーを選択します。

• プレイヤーはモンスターのロールをリクエストする必要があります。• プレイヤーは、ハンターチームに既に追加されているプレイヤーが希望する最高のスキルレベルを達

成済みであるか、超えている必要があります。• 以下の条件に基づいてハンターチームに属するプレイヤーを選択します。

• モンスターのロールをリクエストしたプレイヤーは、ハンターチームに参加できません。• モンスターのロールが既に埋まっている場合、プレイヤーが希望するモンスターのスキルレベルは、

モンスター候補のスキルより低くなければなりません。• すぐにマッチングが達成されない場合は、以下のようにハンターチームの最小サイズを緩和します。

• 30 秒後に、ハンターチームのプレイヤー 4 名のみでゲームを開始することを許可します。• 60 秒後に、ハンターチームのプレイヤー 3 名のみでゲームを開始することを許可します。

Version158

Page 165: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

このルールセットの使用に関する注意事項

• ハンターとモンスターに 2 つの異なるチームを使用することで、さまざまな条件のセットに基づいてメンバーシップを評価できます。

{ "name": "players_vs_monster_5_vs_1", "ruleLanguageVersion": "1.0", "playerAttributes": [{ "name": "skill", "type": "number", "default": 10 },{ "name": "desiredSkillOfMonster", "type": "number", "default": 10 },{ "name": "wantsToBeMonster", "type": "number", "default": 0 }], "teams": [{ "name": "players", "maxPlayers": 5, "minPlayers": 5 }, { "name": "monster", "maxPlayers": 1, "minPlayers": 1 }], "rules": [{ "name": "MonsterSelection", "description": "Only users that request playing as monster are assigned to the monster team", "type": "comparison", "measurements": ["teams[monster].players.attributes[wantsToBeMonster]"], "referenceValue": 1, "operation": "=" },{ "name": "PlayerSelection", "description": "Do not place people who want to be monsters in the players team", "type": "comparison", "measurements": ["teams[players].players.attributes[wantsToBeMonster]"], "referenceValue": 0, "operation": "=" },{ "name": "MonsterSkill", "description": "Monsters must meet the skill requested by all players", "type": "comparison", "measurements": ["avg(teams[monster].players.attributes[skill])"], "referenceValue": "max(teams[players].players.attributes[desiredSkillOfMonster])", "operation": ">=" }], "expansions": [{ "target": "teams[players].minPlayers", "steps": [{ "waitTimeSeconds": 30, "value": 4 },{ "waitTimeSeconds": 60, "value": 3 }] }]

Version159

Page 166: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

}

例 3: チームレベル要件とレイテンシーの制限を設定する

この例は、プレイヤーチームのセットアップ方法と、各プレイヤーの代わりに各チームに一連のルールセットを適用する方法を示しています。3 つの均等にマッチングされたチームを作成するための 1 つの定義を使用します。また、すべてのプレイヤーの最大レイテンシーを設定します。レイテンシーの最大値は、マッチングを達成するために徐々に緩和できます。このシナリオでは、以下の手順に従います。

• プレイヤーのチームを 3 つ作成します。• 各チームに 3〜5 名のプレイヤーを含めます。• 各チームの最終的なプレイヤー数は同数またはほぼ同数 (差は 1 以内) にする必要があります。

• 以下のプレイヤー属性を含めます。• プレイヤーのスキルレベル (指定しない場合、デフォルトの 10 が使用されます)。• プレイヤーのキャラクターロール (指定しない場合、デフォルトの「農民」が使用されます)。

• マッチングのスキルレベルが類似するプレイヤーを選択します。• 各チームのプレイヤーの平均スキル差は 10 ポイント以内とします。

• チームの「医者」キャラクターを以下の数に制限します。• マッチング全体の医者の最大数は 5 とします。

• 50 ミリ秒以下のレイテンシーを報告したプレイヤーのみにマッチングします。• すぐにマッチングが達成されない場合は、以下のようにプレイヤーのレイテンシー要件を緩和します。

• 10 秒後に、プレイヤーのレイテンシー値として最大 100 ミリ秒まで許可します。• 20 秒後に、プレイヤーのレイテンシー値として最大 150 ミリ秒まで許可します。

このルールセットの使用に関する注意事項

• このルールセットでは、プレイヤーのスキルに基づいてチームを均等にマッチングします。FairTeamSkill ルールを評価するため、FlexMatch が暫定的にプレイヤー候補をチームに追加し、チームのプレイヤーの平均スキルを計算します。次に、これを両方のチームのプレイヤー平均スキルと比較します。ルールが失敗すると、プレイヤー候補はマッチングに追加されません。

• チームレベルおよびマッチングレベルの要件 (医者の総数) は、収集ルールを通じて達成されます。このルールタイプでは、すべてのプレイヤーのキャラクター属性のリストを、最大数に照らしてチェックします。すべてのチームのすべてのプレイヤーのリストを作成するには、flatten を使用します。

• レイテンシーに基づいて評価する場合は、以下の点に注意してください。• レイテンシーデータは、Player オブジェクトの一部としてマッチメーキングリクエストで提供されま

す。これは属性ではないため、属性としてリストする必要はありません。• マッチメーカーは、リージョン別にレイテンシーを評価します。レイテンシーが最大数を超えるすべ

てのリージョンは無視されます。プレイヤーがマッチングで承諾されるためには、レイテンシーが最大値未満のリージョンが少なくとも 1 つ必要です。

• マッチメイキングリクエストが 1 人または複数のプレイヤーのレイテンシデータを省略した場合、そのリクエストはすべてのマッチで拒否されます。

{ "name": "three_team_game", "ruleLanguageVersion": "1.0", "playerAttributes": [{ "name": "skill", "type": "number", "default": 10 },{ "name": "character",

Version160

Page 167: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

"type": "string_list", "default": [ "peasant" ] }], "teams": [{ "name": "trio", "minPlayers": 3, "maxPlayers": 5, "quantity": 3 }], "rules": [{ "name": "FairTeamSkill", "description": "The average skill of players in each team is within 10 points from the average skill of players in the match", "type": "distance", // get players for each team, and average separately to produce list of 3 "measurements": [ "avg(teams[*].players.attributes[skill])" ], // get players for each team, flatten into a single list, and average to produce overall average "referenceValue": "avg(flatten(teams[*].players.attributes[skill]))", "maxDistance": 10 // minDistance would achieve the opposite result }, { "name": "CloseTeamSizes", "description": "Only launch a game when the team sizes are within 1 of each other. e.g. 3 v 3 v 4 is okay, but not 3 v 5 v 5", "type": "distance", "measurements": [ "max(count(teams[*].players))"], "referenceValue": "min(count(teams[*].players))", "maxDistance": 1 }, { "name": "OverallMedicLimit", "description": "Don't allow more than 5 medics in the game", "type": "collection", // This is similar to above, but the flatten flattens everything into a single // list of characters in the game. "measurements": [ "flatten(teams[*].players.attributes[character])"], "operation": "contains", "referenceValue": "medic", "maxCount": 5 }, { "name": "FastConnection", "description": "Prefer matches with fast player connections first", "type": "latency", "maxLatency": 50 }], "expansions": [{ "target": "rules[FastConnection].maxLatency", "steps": [{ "waitTimeSeconds": 10, "value": 100 }, { "waitTimeSeconds": 20, "value": 150 }] }]}

例 4: 明示的な並べ替えを使用して最適なマッチングを見つける

この例では、3 人ずつのプレイヤーで構成される 2 つのチームでシンプルなマッチングを設定します。明示的な並べ替えルールを使用して、可能な限り最良のマッチングをできるだけ早く見つける方法を示します。これらのルールでは、すべてのアクティブなマッチメーキングチケットを事前に並べ替え、特定の主要件に基づいて最適なマッチングを作成します。このシナリオは、以下の手順に従って実装します。

• プレイヤーのチームを 2 つ作成します。

Version161

Page 168: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

• 各チームを正確に 3 人のプレイヤーで構成します。• 以下のプレイヤー属性を含めます。

• 経験レベル (指定しない場合、デフォルトで 50 が使用されます)。• 優先するゲームモード (複数の値をリスト可能) (指定しない場合、デフォルトで「クープ」と「デス

マッチ」が使用されます)。• 優先するゲームマップ (マップ名と優先重み付けを含む) (指定しない場合、デフォルトで重み 100 の"defaultMap" が使用されます)。

• 事前並べ替えを設定します。• アンカープレイヤーとして同じゲームマップを優先する度合いに基づいてプレイヤーを並べ替えま

す。プレイヤーのお気に入りのゲームマップは複数存在することがあるため、この例では優先値を使用しています。

• 経験レベルがアンカープレイヤーとどれだけ近くマッチングするかに基づいてプレイヤーを並べ替えます。この並べ替えにより、すべてのチーム間ですべてのプレイヤーの経験レベルができるだけ近いものになります。

• すべてのチーム間ですべてのプレイヤーが少なくとも 1 つのゲームモードを共通して選択している必要があります。

• すべてのチーム間ですべてのプレイヤーが少なくとも 1 つのゲームマップを共通して選択している必要があります。

このルールセットの使用に関する注意事項

• ゲームマップの並べ替えでは、mapPreference 属性値を比較する絶対並べ替えを使用します。これはルールセットの最初のルールであるため、この並べ替えが最初に実行されます。

• 経験の並べ替えでは、アンカープレイヤーのスキルとともに候補プレイヤーのスキルレベルを比較するために、距離の並べ替えが使用されます。

• 並べ替えは、ルールセットで指定された順に実行されます。このシナリオでは、プレイヤーがゲームマップの優先度によって並べ替えられ、さらに経験レベル順に並べ替えられます。

{ "name": "multi_map_game", "ruleLanguageVersion": "1.0", "playerAttributes": [{ "name": "experience", "type": "number", "default": 50 }, { "name": "gameMode", "type": "string_list", "default": [ "deathmatch", "coop" ] }, { "name": "mapPreference", "type": "string_number_map", "default": { "defaultMap": 100 } }, { "name": "acceptableMaps", "type": "string_list", "default": [ "defaultMap" ] }], "teams": [{ "name": "red", "maxPlayers": 3, "minPlayers": 3 }, { "name": "blue", "maxPlayers": 3, "minPlayers": 3

Version162

Page 169: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

}], "rules": [{ // We placed this rule first since we want to prioritize players preferring the same map "name": "MapPreference", "description": "Favor grouping players that have the highest map preference aligned with the anchor's favorite", // This rule is just for sorting potential matches. We sort by the absolute value of a field. "type": "absoluteSort", // Highest values go first "sortDirection": "descending", // Sort is based on the mapPreference attribute. "sortAttribute": "mapPreference", // We find the key in the anchor's mapPreference attribute that has the highest value. // That's the key that we use for all players when sorting. "mapKey": "maxValue" }, { // This rule is second because any tie-breakers should be ordered by similar experience values "name": "ExperienceAffinity", "description": "Favor players with similar experience", // This rule is just for sorting potential matches. We sort by the distance from the anchor. "type": "distanceSort", // Lowest distance goes first "sortDirection": "ascending", "sortAttribute": "experience" }, { "name": "SharedMode", "description": "The players must have at least one game mode in common", "type": "collection", "operation": "intersection", "measurements": [ "flatten(teams[*].players.attributes[gameMode])"], "minCount": 1 }, { "name": "MapOverlap", "description": "The players must have at least one map in common", "type": "collection", "operation": "intersection", "measurements": [ "flatten(teams[*].players.attributes[acceptableMaps])"], "minCount": 1 }]}

例 5: 複数のプレイヤー属性間の交差を見つけるこの例では、収集ルールを使用して、2 つ以上のプレイヤー属性の交差を見つける方法を説明します。コレクションを操作するときは、1 つの属性に対しては intersection オペレーションを使用し、複数の属性に対しては reference_intersection_count オペレーションを使用できます。

この方法を説明するために、この例ではキャラクターの設定に基づいて、マッチングのプレイヤーを評価します。このサンプルゲームは自由に参加できる形式で、マッチングのすべてのプレイヤーが対戦相手になります。各プレイヤーは、(1) 自分のキャラクターを選択し、(2) 対戦するキャラクターを選択することが求められます。マッチングの各プレイヤーが、他のすべてのプレイヤーの希望する対戦相手リストに含まれているキャラクターを使用するようにするルールが必要です。

このルールセットの例では、次の特性を持つマッチングについて説明します。

• チーム構造: 5 人のプレイヤーがいる 1 つのチーム• プレイヤー属性:

• myCharacter: プレイヤーが選択したキャラクター。

Version163

Page 170: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

• preferredOpponents: プレイヤーが対戦したいキャラクターのリスト。• マッチングルール: 使用中の各キャラクターが各プレイヤーの希望する対戦リストに含まれている場合、

マッチング候補は受け入れ可能です。

マッチングルールを実装するため、この例では次のプロパティ値を持つ収集ルールを使用します。

• オペレーション – reference_intersection_count オペレーションを使用して、測定値の文字列リストが参照値の文字列リストと交差する方法を評価します。

• 測定 – flatten プロパティ式を使用して文字列のリストを作成し、各リストに 1 人のプレイヤーのmyCharacter 属性値を含めます。

• 参照値 – set_intersection プロパティ式を使用して、マッチングの各プレイヤーに共通するすべての preferredOpponents 属性値を含む文字列のリストを作成します。

• 制約 – minCount を 1 に設定し、各プレイヤーの選択したキャラクター (測定値の文字列のリスト) が、すべてのプレイヤーに共通の 1 人以上の優先される対戦相手 (参照値の文字列) と一致するようにします。

• 拡張 – 15 秒以内にマッチングが達成されない場合は、最小の交差要件を緩和します。

このルールのプロセスフローは次のようになります。

1. プレイヤーがマッチング候補に追加されます。参照値 (文字列のリスト) が再計算され、新しいプレイヤーの希望の対戦相手リストに交差が含まれるようにします。計測値 (文字列のリスト) が再計算され、新しいプレイヤーの選択されたキャラクターが新しい文字列リストとして追加されます。

2. Amazon GameLift は測定値 (プレイヤーが選択したキャラクター) の各文字列リストが、参照値 (プレイヤーの希望する対戦相手) の少なくとも 1 つの文字列と交差することを確認します。この例では、測定値の各文字列リストには値が 1 つしか含まれないため、交差は 0 または 1 になります。

3. 測定値の文字列リストが参照値の文字列リストと交差しない場合、ルールは失敗し、新しいプレイヤーはマッチング候補から削除されます。

4. マッチングが 15 秒以内に達成されない場合は、対戦相手のマッチング要件を削除し、マッチングの残りのプレイヤースロットを埋めます。

{ "name": "preferred_characters", "ruleLanguageVersion": "1.0",

"playerAttributes": [{ "name": "myCharacter", "type": "string_list" }, { "name": "preferredOpponents", "type": "string_list" }],

"teams": [{ "name": "red", "minPlayers": 5, "maxPlayers": 5 }],

"rules": [{ "description": "Make sure that all players in the match are using a character that is on all other players' preferred opponents list.", "name": "OpponentMatch", "type": "collection", "operation": "reference_intersection_count", "measurements": ["flatten(teams[*].players.attributes[myCharacter])"],

Version164

Page 171: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

"referenceValue": "set_intersection(flatten(teams[*].players.attributes[preferredOpponents]))", "minCount":1 }], "expansions": [{ "target": "rules[OpponentMatch].minCount", "steps": [{ "waitTimeSeconds": 15, "value": 0 }] }]}

例 6: すべてのプレイヤー間の属性の比較この例では、プレイヤーのグループ間でプレイヤー属性を比較する方法を示します。

このルールセットの例では、次の特性を持つマッチングについて説明します。

• チーム構造: 2 つの単一プレイヤーチーム• プレイヤー属性:

• gameMode: プレイヤーによって選択されたゲームのタイプ (指定されていない場合は、デフォルトで「順番ベース」となります)。

• gameMap: プレイヤーによって選択されたゲーム世界 (指定されない場合は、デフォルトで 1 になります)。

• キャラクター: プレイヤーによって選択されたキャラクター (デフォルト値がない場合、プレイヤーはキャラクターを指定する必要があります)。

• マッチングルール: マッチングされたプレイヤーは次の要件を満たす必要があります。• プレイヤーは同じゲームモードを選択する必要があります。• プレイヤーは同じゲームマップを選択する必要があります。• 多くのプレイヤーは異なるキャラクターを選択します。

このルールセットの使用に関する注意事項

• この例では、マッチングルールを実装するため、比較ルールを使用してすべてのプレイヤーの属性値を確認します。ゲームモードとマップについては、値が同じことがルールで確認されます。キャラクターについては、値が異なることがルールで確認されます。

• この例では、両方のプレイヤーチームを作成するために数量プロパティを指定して 1 つのプレイヤー定義を使用します。チームには、"player_1" や "player_2" のような名前が割り当てられます。

{ "name": "", "ruleLanguageVersion": "1.0",

"playerAttributes": [{ "name": "gameMode", "type": "string", "default": "turn-based" }, { "name": "gameMap", "type": "number", "default": 1 }, { "name": "character", "type": "number" }],

Version165

Page 172: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

"teams": [{ "name": "player", "minPlayers": 1, "maxPlayers": 1, "quantity": 2 }],

"rules": [{ "name": "SameGameMode", "description": "Only match players when they choose the same game type", "type": "comparison", "operation": "=", "measurements": ["flatten(teams[*].players.attributes[gameMode])"] }, { "name": "SameGameMap", "description": "Only match players when they're in the same map", "type": "comparison", "operation": "=", "measurements": ["flatten(teams[*].players.attributes[gameMap])"] }, { "name": "DifferentCharacter", "description": "Only match players when they're using different characters", "type": "comparison", "operation": "!=", "measurements": ["flatten(teams[*].players.attributes[character])"] }]}

例 7: 大規模マッチングを作成する

この例では、40 人を超えるプレイヤーのマッチングに対するルールセットを設定する方法を示します。ルールセットでチームの maxPlayer 合計カウントが 40 以上であると定義された場合、大規模なマッチングとして処理されます。詳細については、「

ルールセットが 40 人以上のプレイヤーのマッチングを作成できる場合、FlexMatch はそのルールセットを大規模マッチングとして使用するマッチングリクエストを処理します。大規模マッチングは、多数のプレイヤーをマッチングするのに必要な時間が大幅に短縮する、異なるアルゴリズムを使用して処理されます。

ルールセットが大規模マッチングを作成するかどうかを確認するには、ルールセットのすべてのチームについて、maxPlayer 設定を確認します。この設定が 40 を超えている場合は、大規模なマッチングルール設定を保持しています。大規模マッチングのルールセットでは、最大200 人のプレイヤーのマッチングを作成できます。

大規模マッチングのルールセットは、他のルールセットと同じコンポーネントを微調整したうえで使用します。また、ルールセットにはアルゴリズムコンポーネントが含まれている必要があります。大規模なマッチングルールセットのスキーマについては、「大規模マッチング用のルールセットスキーマ (p. 305)」を参照してください。

大規模マッチングアルゴリズムを定義する

アルゴリズムコンポーネントをルールセットに追加します。このコンポーネントは、設定に合わせて大規模なマッチングアルゴリズムを設定します。

• batchingPreference (必須) – このプロパティはマッチング作成時にプレイヤーをソートする方法を示します。この値は「分散された」値と同じである必要があります。balancedAttribute (必須) – マッチングするプレイヤーを選択するときに使用する単一のプレイヤー属性を識別します。個々のプレイヤーを評価する前に、FlexMatch はこの属性に基づいて使用可能なプレイヤープールを並べ替えます。これは、類似した属性値を持つプレイヤーの評価から開始し、徐々に類似性が低いプレイヤーに進み、マッチングが完了するまで

Version166

Page 173: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

続行します。この属性は、マッチングでプレイヤーのバランスを達成するために使用され、

この属性に類似した値を持つ可能性の高いプレイヤーをグループ化します。たとえば、スキル属性を選択した場合、類似したスキルレベルを持つプレイヤーがマッチングで一緒にグループ化されます。このメカニズムは、使用可能なプレイヤーのプールが大きい場合に、大規模なマッチングを行うのに最も効果的です。ルールセットのプレイヤー属性で、必ずバランシング属性を必ず宣言してください。バランシング属性として使用できるのは、「数値」データ型を持つ属性のみです。

• strategy (必須) – マッチング作成で使用するマッチング戦略を選択します。オプションは、[largestPopulation] (デフォルト) と [fastestRegion] です。最大母集団この戦略では、FlexMatch は少なくとも 1 つのリージョンで許容されるレイテンシー値を持つすべてのプレイヤーを含めることによって、使用可能な最大許容プレイヤープールを維持します。大規模なプレイヤープールでは、マッチングはより高速になる傾向があり、マッチングされたプレイヤーは、バランシング属性に関してより類似性のあるプレイヤーとなります。プレイヤーは、レイテンシーが理想よりも低いゲームに配置されることがありますが、その値は許容範囲内です。最短リージョンこの戦略では、可能な限り最善のレイテンシーを提供するマッチングにプレイヤーを配置することを最優先します。FlexMatch はレイテンシー値が最も低いと報告されたリージョンに基づいて使用可能なプレイヤーをグループ化し、そのグループからマッチングを満たすよう試みます。FlexMatch は、可能な限り最短のリージョンにプレイヤーを配置することを優先します。ただし、マッチングを満たすのに十分に大きなグループを作成するために、2 番目または 3 番目の (またはそれより遅い) リージョンに基づいてプレイヤーをグループ化することがあります。その結果、マッチングを満たすために時間がかかる場合があります。また、この戦略で作成されたマッチングのプレイヤーは、バランシング属性に関して、より異なる可能性があります。

例を示します。

"algorithm": {

"balancedAttribute": "player_skill",

"strategy": "balanced",

"batchingPreference": "largestPopulation"

},

プレイヤー属性を宣言する

少なくとも、ルールセットのアルゴリズムでバランシング属性として使用されるプレイヤー属性を宣言する必要があります。「数値」データ型の属性のみ、分散属性として使用できます。

さらに、ゲームセッションの設定時に、使用する特定のプレイヤー属性をゲームサーバーに渡すことができます。たとえば、プレイヤーのキャラクター選択、マップ優先設定などを渡すことができます。プレイヤー属性に渡すには、ルールセットでその属性を宣言し、マッチメイキングリクエストで各プレイヤーに属性値を含めます。GameLift がゲームセッションリクエストをゲームサーバーに渡す際に、マッチングされたすべてのプレイヤーの属性値を含むマッチメーカーデータが含まれます。

チームを定義する

チームサイズと構造を定義するプロセスは小規模のマッチングと同様ですが、FlexMatch がチームを満たす方法は異なります。これは、部分的に満たされた場合のマッチングに影響します。これに応じて、チームの最小サイズを変更できます。

Version167

Page 174: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

プレイヤーをチームに割り当てる際に、FlexMatch は以下のルールを使用します。1: 最小プレイヤー要件に到達していないチームを探す。2: これらのチームのうち、空きスロットが最も多いチームを探す。

複数の均等なサイズのチームを定義するマッチングでは、いっぱいになるまでプレイヤーが順に各チームに追加されます。その結果、マッチングがいっぱいでなくても、類似した数のプレイヤーが各チームに割り当てられます。現時点では、大規模マッチングでチームサイズを強制的に均等にすることはできません。非対称のチームサイズのマッチングの場合、プロセスはもう少し複雑です。この場合、プレイヤーは空きスロットが最も多い最大のチームに最初に割り当てられます。次に、空きスロットの数がすべてのチーム間でより均等に分配されるにつれて、プレイヤーはより小さなチームに追加され始めます。

例を見ていきましょう。3 つのチームのルールセットがあるとします。赤チームと青チームはどちらも maxPlayers=10、minPlayers=5 に設定されます。緑チームはmaxPlayers=3、minPlayers=2 に設定されます。このマッチングを満たすシーケンスは次のとおりです。

1. どのチームも minPlayers に達していません。赤チームと青チームには 10 個の空きスロットがあり、緑チームには 3 個の空きスロットがあります。最初の 10 人のプレイヤー (5 人

ごと) は、赤チームと青チームに割り当てられます。両方のチームが minPlayers に達しました。

2. 緑チームはまだ minPlayers に達していません。次の 2 人のプレイヤーが緑チームに割り当てられます。

3. すべてチームが minPlayers に達しました。赤チームと青チームは空きスロットが最も多いため、次の 8 人プレイヤー (4 人ずつ) が、赤チームと青チームに割り当てられます。

4. 3 つすべてのチームの利用可能な空きスロットが 1 個になると、残りの 3 個のプレイヤースロットは、順不同で割り当てられます。

大規模マッチングのレイテンシールールを設定する

大規模マッチングの作成作業の大半は、プレイヤーのバランシング属性と優先付け戦略を使用して実行されます。ほとんどのカスタムルールは使用できません。ただし、プレイヤーレイテンシーにハード制限を設定するルールを作成できます。

このルールを作成するには、maxLatency プロパティを指定して latency ルールタイプを使用します。最大プレイヤーレイテンシーを 200 ミリ秒に設定する例を次に示します。

"rules": [{

"name": "player-latency",

"type": "latency",

"maxLatency": 200

}],

大規模マッチング要件を緩和する

小規模なマッチングの場合と同様に、マッチングが不可能な場合に時間の経過ともに要件を緩和する拡張を使用できます。大規模なマッチングでは、レイテンシールールを緩和するか、チームカウントを緩和するか選択できます。

大規模なマッチングに自動マッチングバックフィルを使用している場合は、チームプレイヤーカウントを急に緩和しないでください。FlexMatch はゲームセッションが開始された後にのみバックフィルリクエストを生成します。この動作は、マッチングが作成された後数秒間は発生しないことがあります。その間、FlexMatch は部分的に満たされた複数の新しいゲームセッションを作成します。これは特にプレイヤーカウントルールを低くした場合に発生します。その結果、必要以上の数のゲームセッションが作成され、ゲームセッション間のプレイヤーがまばらになります。ベストプラクティスは、最初のステップとして、ゲームセッションを開始するのに十分な、プレイヤー数の拡張により長い時間を設定します。バックフィルリクエストで

Version168

Page 175: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

は大規模マッチングにより高い優先度が与えられるため、着信プレイヤーは新しいゲームが開始される前に既存のゲームのスロットに配置されます。ゲームに対して最適な待機時間を見つけるために、実験が必要になる場合があります。

黄色チームの待機時間を最初よりも長くして、段階的にプレイヤーカウントを低くする例を次に示します。ルールセット内の待機時間は絶対値であり、複合されないことに注意してください。したがって、最初の拡大が 5 秒で発生し、2 番目の拡張はその 5 秒後から 10 秒ごとに発生します。

"expansions": [{

"target": "teams[Yellow].minPlayers",

"steps": [{

"waitTimeSeconds": 5,

"value": 8

}, {

"waitTimeSeconds": 10,

"value": 5

}]

}]

(p. 152)」を参照してください。

この例のルールセットでは、以下の手順に従ってマッチングが作成されます。

• 最大 200 人、最低 175 人のプレイヤーがいる 1 つのチームを作成します。• バランシング条件: 類似したスキルレベルに基づいてプレイヤーを選択します。すべてプレイヤーは、

マッチングのためにスキルレベルを報告する必要があります。• バッチ優先設定: マッチングの作成時に、類似したバランシング条件によってプレイヤーをグループ化し

ます。• レイテンシールール: 最大許容プレイヤーレイテンシーとして 150 ミリ秒を設定します。• すぐにマッチングが満たされない場合は、妥当な時間内にマッチングを完了するために要件を緩和しま

す。• 10 秒後に、プレイヤーが 150 人のチームを受け入れます。• 12 秒後に、許容されるレイテンシーの最大値を 200 ミリ秒に引き上げます。• 15 秒後に、プレイヤーが 100 人のチームを受け入れます。

このルールセットの使用に関する注意事項

• アルゴリズムは「最大母集団」バッチ優先設定を使用しているため、プレイヤーはまずバランシング要件に基づいて並べ替えられます。その結果、マッチングはより詳細になり、スキルがより類似したプレイヤーが含まれる可能性が高くなります。すべてのプレイヤーは許容されるレイテンシー要件を満たしますが、その場所での最大限のレイテンシーを取得できない可能性もあります。

• ルールセットで使用されるこのアルゴリズム戦略は、「最大母集団」がデフォルト設定です。デフォルト設定を使用するには、設定を省略することもできます。

• マッチングバックフィルを有効にしている場合は、プレイヤーカウント要件を急に緩和しないでください。緩和が速すぎると、部分的に満たされたゲームセッションが大量に生成される可能性があります。詳細については、「大規模マッチング要件を緩和する (p. 154)」を参照してください。

{ "name": "free-for-all", "ruleLanguageVersion": "1.0", "playerAttributes": [{ "name": "skill", "type": "number" }],

Version169

Page 176: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

"algorithm": { "balancedAttribute": "skill", "strategy": "balanced", "batchingPreference": "largestPopulation" }, "teams": [{ "name": "Marauders", "maxPlayers": 200, "minPlayers": 175 }], "rules": [{ "name": "low-latency", "description": "Sets maximum acceptable latency", "type": "latency", "maxLatency": 150 }], "expansions": [{ "target": "rules[low-latency].maxLatency", "steps": [{ "waitTimeSeconds": 12, "value": 200 }], "target": "teams[Marauders].minPlayers", "steps": [{ "waitTimeSeconds": 10, "value": 150 }, { "waitTimeSeconds": 15, "value": 100 }] }]}

例 8: 複数チームの大規模マッチングを作成する

この例は、プレイヤーが 40 人を超える複数チームのマッチング用にルールをセットセットアップする方法を示しています。この例は、1 つの定義を持つ複数の同じチームを作成する方法と、マッチング作成で非対称サイズのチームを満たす方法を示しています。

この例のルールセットでは、以下の手順に従ってマッチングが作成されます。

• 最大 15 人のプレイヤーがいる同一の「ハンター」チームを 10 個と、厳密に 5 人のプレイヤーがいる「モンスター」チームを 1 個作成します。

• バランシング要件: モンスターを倒した数を基準にプレイヤーを選択します。プレイヤーが倒した数を報告しない場合は、デフォルト値の 5 を使用します。

• バッチ優先設定: 最短のプレイヤーレイテンシーが報告されているリージョンを基準に、プレイヤーをグループ化します。

• レイテンシールール: 許容されるプレイヤーレイテンシーの最大値を 200 ミリ秒に設定します。• すぐにマッチングが満たされない場合は、妥当な時間内にマッチングを完了するために要件を緩和しま

す。• 15 秒後に、10 人のプレイヤーチームを受け入れます。• 20 秒後に、8 人のプレイヤーチームを受け入れます。

このルールセットの使用に関する注意事項

• このルールセットは、潜在的に最大 155 人のプレイヤーを保持できるチームを定義します。これは大規模マッチングとなります。(10 x 15 人のハンター + 5 人のモンスター = 155)

• アルゴリズムは「最短リージョン」バッチ優先設定を使用しているため、プレイヤーはより高い (許容範囲内の) レイテンシーを報告しているリージョンよりも、より速いレイテンシーを報告しているリー

Version170

Page 177: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットの作成

ジョンに配置される傾向があります。同時に、マッチングのプレイヤーはより少数になり、バランシング条件 (モンスタースキルの数) はより広範囲になる可能性があります。

• 拡張は、複数チーム (数量 > 1) に対して定義された場合、定義を作成したすべてのチームに適用されます。したがって、ハンターチームの最小プレイヤー設定を緩和することによって、10 個すべてのハンターチームが同様に影響を受けます。

• このルールセットはプレイヤーレイテンシーを最小にするために最適化されているため、このレイテンシールールは許容される接続オプションを持たないプレイヤーを除外するキャッチオールとして機能します。この要件を緩和する必要はありません。

• 拡張が有効になる前に FlexMatch がこのルールセットに対してマッチングを満たす方法は、次のとおりです。• どのチームも minPlayers カウントにまだ達していません。ハンターチームには 15 個の空きスロット

があり、モンスターチームには 5 つの空きスロットがあります。• 最初の 100 人のプレイヤーが (10 人ずつ) 10 個のハンターチームに割り当てられます。• 次の 22 名のプレイヤーは順番に (2 人ずつ) ハンターチームとモンスターチームに割り当てられま

す。• ハンターチームはそれぞれ minPlayers カウントである 12 人のプレイヤーに達しました。モンスター

チームには 2 人のプレイヤーがいて、minPlayers カウントには達していません。• 次の 3 人のプレイヤーがモンスターチームに割り当てられます。

• すべてのチームが minPlayers カウントに達しました。ハンターチームにはそれぞれ 3 つの空きスロットがあります。モンスターチームのスロットがいっぱいになりました。• 最後の 30 人のプレイヤーが順にハンターチームに割り当てられ、すべてのハンターチームがほぼ

同じサイズ (+/- 1 人のプレイヤー) になります。• このルールセットを使用して作成されたマッチングに対してバックフィルが有効になっている場合、プ

レイヤーカウント要件を急に緩和しないでください。緩和が速すぎると、部分的に満たされたゲームセッションが大量に作成される可能性があります。詳細については、「大規模マッチング要件を緩和する (p. 154)」を参照してください。

{ "name": "monster-hunters", "ruleLanguageVersion": "1.0", "playerAttributes": [{ "name": "monster-kills", "type": "number", "default": 5 }], "algorithm": { "balancedAttribute": "monster-kills", "strategy": "balanced", "batchingPreference": "fastestRegion" }, "teams": [{ "name": "Monsters", "maxPlayers": 5, "minPlayers": 5 }, { "name": "Hunters", "maxPlayers": 15, "minPlayers": 12, "quantity": 10 }], "rules": [{ "name": "latency-catchall", "description": "Sets maximum acceptable latency", "type": "latency", "maxLatency": 150 }], "expansions": [{

Version171

Page 178: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドイベント通知の設定

"target": "teams[Hunters].minPlayers", "steps": [{ "waitTimeSeconds": 15, "value": 10 }, { "waitTimeSeconds": 20, "value": 8 }] }]}

FlexMatch イベント通知の設定ゲームで FlexMatch マッチメーキングを使用している場合は、個別のマッチメーキングリクエストのステータスを追跡し、必要に応じてアクションを実行するための手段が必要です。プレイヤーにマッチング案の承諾を要求するような場合、これらのアクションは時間に制約されます。各リクエストのステータスを追跡する最も簡単な方法は DescribeMatchmaking を使用して継続的にポーリングすることです。ただし、より高速な手段として、通知を使用してマッチメーキングイベントを追跡することをお勧めします。イベント通知は、設定が簡単であり、はるかに迅速で効率的です。

イベント通知を設定するための 2 つのオプションがあります。まず Amazon CloudWatch Events を使用できます。&CWElong; には、イベントを管理し、イベントに応じてアクションを実行できる一連のツールがあります。別の方法として、独自の SNS トピックを設定し、これをマッチメーカーにアタッチすることで、マッチメーキングイベント通知を直接受信できます。

Amazon GameLift から生成される FlexMatch イベントのリストについては、「FlexMatch マッチメイキングイベント (p. 310)」を参照してください。

CloudWatch イベント のセットアップAmazon GameLift はすべてのマッチメーキングイベントを自動的に CloudWatch イベント に発行します。CloudWatch イベント では、マッチメーキングイベントを処理するために SNS トピックや AWSの他のサービスなどのターゲットにイベントをルーティングするルールを設定できます。たとえば、「PotentialMatchCreated」イベントを、プレイヤーの承諾を処理する AWS Lambda 関数にルーティングするルールを設定できます。CloudWatch イベント の使用方法の詳細については、入門ガイドを参照してください。このガイドには一連のチュートリアルが含まれています。

CloudWatch イベント を使用する場合は、マッチメーカーの設定時に、通知ターゲットフィールドを空欄にすることができます。または、両方のオプションを使用する場合は、SNS トピックを参照できます。

CloudWatch イベント で Amazon GameLift マッチメーキングイベントにアクセスするには、AmazonCloudWatch コンソールに移動し、[Events (イベント)] を開きます。マッチメーキング設定をセットアップしたリージョンを使用していることを確認してください。CloudWatch イベント にアクセスするためのアカウント認証情報を取得する方法の詳細については、「Amazon CloudWatch コンソールにサインインする」を参照してください。各マッチメーキングサービスは、サービス (GameLift)、マッチメーキング名、およびマッチメーキングチケットで識別されます。

SNS トピックのセットアップFlexMatch マッチメーカーで生成されたすべてのイベントを Amazon Simple Notification Service (SNS) トピックに発行するように Amazon GameLift を設定できます。マッチメーカーの設定時に、通知ターゲットフィールドを SNS トピック ARN に設定します。

Amazon GameLift イベント通知用の SNS トピックをセットアップするには

1. Amazon Simple Notification Service コンソールに移動します。2. トピックを作成します。 SNS ダッシュボード から [トピックの作成] を選択し、トピックを作成する

手順に従います。トピックが作成されると、コンソールで自動的に新しいトピックの [Topic details]ページが開きます。

Version172

Page 179: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドVPC ピア接続

3. トピックへの発行を Amazon GameLift に許可します。 トピックの [Topic details] ページをまだ開いていない場合は、ナビゲーションバーから [Topics] を選択し、トピックの ARN をクリックして開きます。トピックのアクションとして [Edit topic policy] を選択し、[Advanced view tab] に移動します。

以下の太字の構文を既存のポリシーの末尾に追加します。(わかりやすいようにポリシー全体を示しています。)

{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__default_statement_ID", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "SNS:GetTopicAttributes", "SNS:SetTopicAttributes", "SNS:AddPermission", "SNS:RemovePermission", "SNS:DeleteTopic", "SNS:Subscribe", "SNS:ListSubscriptionsByTopic", "SNS:Publish", "SNS:Receive" ], "Resource": "arn:aws:sns:your_region:your_account:your_topic_name", "Condition": { "StringEquals": { "AWS:SourceOwner": "your_account" } } }, { "Sid": "__console_pub_0", "Effect": "Allow", "Principal": { "Service": "gamelift.amazonaws.com" }, "Action": "SNS:Publish", "Resource": "arn:aws:sns:your_region:your_account:your_topic_name" } ]}

Amazon GameLift の VPC ピア接続このトピックでは、GameLift ホストゲームサーバーと他の GameLift 以外のリソースとの VPC ピア接続を設定する方法に関するガイダンスを提供します。Amazon Virtual Private Cloud (VPC) ピア接続を使用して、ゲームサーバーがウェブサービスやリポジトリなどの他の AWS リソースと直接かつプライベートに通信できるようにします。

Note

VPC ピア接続は高度な機能です。ゲームサーバーと フリートからの AWS リソースへのアクセス (p. 48) における他の AWS リソースとの直接かつプライベートな通信を可能にする代替オプションについて説明します。

Version173

Page 180: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド既存のフリート用に VPC ピア接続を設定する

Amazon VPC と VPC ピア接続にすでに精通している場合は、GameLift ゲームサーバーとのピア接続の設定は多少異なることに注意してください。ゲームサーバー用の VPC にアクセスすることはできません(これは GameLift サービスによってコントロールされます)。そのため、VPC ピア接続を直接リクエストすることはできません。代わりに、最初に GameLift サービスへのピア接続リクエストを受け入れるために、GameLift 以外のリソースで VPC を事前承認します。その後、GameLift を起動して、先ほど承認したVPC ピア接続をリクエストします。GameLift はピア接続を作成し、ルートテーブルを設定して、接続を設定します。

既存のフリート用に VPC ピア接続を設定するVPC ピア接続を設定するには:

1. AWS アカウント ID と認証情報を取得します。

以下の AWS アカウントには、ID とサインインの認証情報が必要です。AWS マネジメントコンソール にサインインしてアカウント設定を表示することで、AWS アカウント ID を確認できます。認証情報を取得するには、IAM コンソールに移動します。

• GameLift ゲームサーバーの管理に使用する AWS アカウント。• GameLift 以外のリソースの管理に使用する AWS アカウント。

同じアカウントを GameLift リソースと GameLift 以外のリソースに使用している場合は、そのアカウントのみの ID と認証情報が必要です。

2. 各 VPC の識別子を取得します。

ピア接続される 2 つの VPC について以下の情報を取得します。

• GameLift ゲームサーバー用の VPC – GameLift フリート ID。ゲームサーバーは、EC2 インスタンスのフリート上の GameLift にデプロイされます。フリートは、GameLift サービスによって管理される専用の VPC に自動的に配置されます。VPC への直接アクセスは許可されないため、VPC はフリート ID によって識別されます。

• GameLift 以外の AWS リソース用の VPC – AWS で実行されてお客様がアクセス可能な AWS アカウントで管理されているすべてのリソースと、VPC ピア接続を確立できます。これらのリソース用の VPC をまだ作成していない場合は、「Amazon VPC の開始方法」を参照してください。VPC を作成したら、Amazon VPC の AWS マネジメントコンソール にサインインして VPC を一覧表示することで VPC ID を確認できます。

Note

ピア接続を設定するときは、両方の VPC が同じリージョンに存在する必要があります。GameLift フリートゲームサーバー用の VPC はフリートと同じリージョンにあります。

3. GameLift 以外のリソースとの VPC ピア接続を承認します。

このステップでは、GameLift 以外のリソース用の VPC とのピア接続を GameLift に今後リクエストすることを事前承認しています。このステップにより、VPC のセキュリティグループが更新されます。

VPC ピア接続を承認するには、GameLift サービス API CreateVpcPeeringAuthorization() を呼び出すか、AWS CLI コマンド create-vpc-peering-authorization を使用します。GameLift 以外のリソースを管理するアカウントを使用してこの呼び出しを行います。以下の情報を識別します。

• ピア VPC ID – GameLift 以外のリソース用の VPC の ID。• GameLift AWS アカウント ID – GameLift フリートの管理に使用するアカウント。

VPC ピア接続を承認した後は、取り消されない限り、24 時間有効です。以下の操作を使用して、VPCピア接続承認を管理できます。

Version174

Page 181: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドVPC ピア接続を使用して新しいフリートを作成する

• DescribeVpcPeeringAuthorizations() (AWS CLI describe-vpc-peering-authorizations)• DeleteVpcPeeringAuthorization() (AWS CLI delete-vpc-peering-authorization)

4. GameLift フリートと GameLift 以外のリソース用の VPC 間のピア接続をリクエストします。

有効な承認があれば、GameLift をトリガーしてピア接続をリクエストできます。

VPC ピア接続をリクエストするには、GameLift サービス API CreateVpcPeeringConnection() を呼び出すか、AWS CLI コマンド create-vpc-peering-connection を使用します。GameLift ゲームサーバーを管理するアカウントを使用してこの呼び出しを行います。ピア接続する 2 つの VPC を識別する以下の情報を特定します。

• ピア VPC ID と AWS アカウント ID – GameLift 以外のリソース用の VPC 、およびそれらのリソースの管理に使用するアカウント。使用する VPC ID は有効な承認 VPC ID と一致する必要があります。

• フリート ID – GameLift ゲームサーバー用の VPC。

以下の操作を使用して、VPC ピア接続を管理できます。

• DescribeVpcPeeringConnections() (AWS CLI describe-vpc-peering-connections)• DeleteVpcPeeringConnection() (AWS CLI delete-vpc-peering-connection)

5. VPC ピア接続を追跡します。

VPC ピア接続のリクエストは、非同期操作です。ピア接続リクエストのステータスを追跡し、成功または失敗のケースを処理するには、次のいずれかのオプションを使用します。

• DescribeVpcPeeringConnections() を使用して継続的にポーリングします。この操作では、リクエストのステータスを含む VPC ピア接続レコードが取得されます。ピア接続が正常に作成された場合、接続レコードには、VPC に割り当てられたプライベート IP アドレスの CIDR ブロックも含まれます。

• 成功イベントと失敗イベントを含む DescribeFleetEvents() の VPC ピア接続に関連付けられたフリートイベントを処理します。

接続リクエストが失敗する一般的な理由は以下のとおりです。

• リクエストされた接続の承認が見つかりませんでした。これは、既存の承認が無効になったことを意味します。この問題の一般的な原因は、リージョンが混在していることです。承認とリクエストが同じリージョンを使用していることを確認します。

• CIDR ブロックの重複 (「無効な VPC ピア接続設定 」を参照)。ピア接続された VPCに割り当てられた IPv4 CIDR ブロックは、重複することはできません。GameLift フリート用の VPC の CIDR ブロックは自動的に割り当てられ、変更することはできません。DescribeVpcPeeringConnections() を呼び出して、この CIDR ブロックを検索できます。この問題を解決するには、GameLift 以外のリソースの VPC の CIDR ブロックを重複しない範囲に変更する必要があります。

• このフリートをアクティベートしませんでした。VPC ピア接続を CreateFleet() リクエストの一部としてリクエストした場合、新しいフリートが アクティブ ステータスに進まなかった可能性があります。このシナリオでは、ピア接続は失敗する場合があります。

VPC ピア接続を使用して新しいフリートを作成する新しい Amazon GameLift フリートを作成し、VPC ピア接続を同時にリクエストできます。AWS で実行されてお客様がアクセス可能な AWS アカウントで管理されているすべてのリソースと、VPC ピア接続を確立できます。

Version175

Page 182: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドVPC ピア接続を使用して新しいフリートを作成する

GameLift 以外のリソース用に VPC をまだ設定していない場合は、以下の操作を行います。

• GameLift コマンド create-vpc-peering-authorization を呼び出して、ピア接続リクエストを事前承認します。GameLift で使用するアカウントの ID が必要です。この承認は、取り消されない限り、24 時間有効です。

新しいフリートとの VPC ピア接続を作成するには

1. AWS アカウント ID と認証情報を取得します。

次の 2 つの AWS アカウントには、ID とサインインの認証情報が必要です。AWS マネジメントコンソール にサインインしてアカウント設定を表示することで、AWS アカウント ID を確認できます。認証情報を取得するには、IAM コンソールに移動します。

• GameLift ゲームサーバーの管理に使用する AWS アカウント。• GameLift 以外のリソースの管理に使用する AWS アカウント。

同じアカウントを GameLift リソースと GameLift 以外のリソースに使用している場合は、そのアカウントのみの ID と認証情報が必要です。

2. GameLift 以外の AWS リソース用の VPC ID を取得します。

これらのリソース用の VPC をまだ作成していない場合は、ここで作成してください (「Amazon VPCの開始方法」を参照)。VPC が、新しいフリートを作成する予定のリージョンと同じリージョンにあることを確認してください。VPC を作成するときは、GameLift 以外のリソースを管理するアカウントの認証情報を使用します。

VPC を作成したら、Amazon VPC の AWS マネジメントコンソール にサインインして VPC を一覧表示することで VPC ID を確認できます。

3. GameLift 以外のリソースとの VPC ピア接続を承認します。

GameLift によって新しいフリートと VPC が作成されるとき、GameLift 以外のリソース用の VPC とピア接続するためのリクエストも送信されます。そのリクエストを事前承認する必要があります。このステップにより、VPC のセキュリティグループが更新されます。

GameLift 以外のリソースを管理するアカウントを使用して、GameLift サービス APICreateVpcPeeringAuthorization() を呼び出すか AWS CLI コマンド create-vpc-peering-authorization を使用します。以下の情報を識別します。

• ピア VPC ID – GameLift 以外のリソース用の VPC の ID。• GameLift AWS アカウント ID – GameLift フリートを管理するために使用するアカウント用の ID で

す。

VPC ピア接続を承認した後は、取り消されない限り、24 時間有効です。以下の操作を使用して、VPCピア接続承認を管理できます。

• DescribeVpcPeeringAuthorizations() (AWS CLI describe-vpc-peering-authorizations)• DeleteVpcPeeringAuthorization() (AWS CLI delete-vpc-peering-authorization)

4. AWS CLI を使用して新しいフリートを作成する (p. 110)手順に従います。以下の追加のパラメータを含めます。

• peer-vpc-aws-account-id – GameLift 以外のリソース用の VPC を管理するために使用するアカウントの ID。

• peer-vpc-id – GameLift 以外のアカウント用の VPC の ID。

Version176

Page 183: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドVPC ピア接続を使用して新しいフリートを作成する

VPC ピア接続パラメータを設定した create-fleet の呼び出しが成功すると、新しいフリートと新しい VPCピア接続リクエストの両方が生成されます。フリートのステータスは New に設定され、フリートのアクティブ化プロセスが開始されます。ピア接続リクエストのステータスは initiating-request に設定されます。describe-vpc-peering-connections を呼び出すことでピアリングリクエストの成否を追跡できます。

新しいフリートとの VPC ピア接続を要求すると、両方のアクションが成功するか失敗します。フリートの作成プロセス中にエラーが発生すると、VPC ピア接続は確立されません。同様に、VPC ピア接続が何らかの理由で失敗した場合も、新しいフリートのステータスは [アクティブ化中] から [アクティブ] に移行しません。

Note

新しい VPC ピア接続は、フリートがアクティブになる準備が整うまで完了しません。このため、ゲームサーバーのビルドを新しいフリートインスタンスにインストール中は接続を使用できません。

次の例では、事前設定された VPC と新しいフリート用に作成された VPC 間で、新しいフリートとピア接続の両方を作成するためのリクエストを示します。事前設定された VPC は、GameLift 以外の AWS アカウント ID と VPC ID の組み合わせによって一意に識別されます。

$ aws gamelift create-fleet --name "My_Fleet_1" --description "The sample test fleet" --ec2-instance-type "c5.large" --fleet-type "ON_DEMAND" --build-id "build-1111aaaa-22bb-33cc-44dd-5555eeee66ff" --runtime-configuration "GameSessionActivationTimeoutSeconds=300, MaxConcurrentGameSessionActivations=2, ServerProcesses=[{LaunchPath=C:\game\Bin64.dedicated\MultiplayerSampleProjectLauncher_Server.exe, Parameters=+sv_port 33435 +start_lobby, ConcurrentExecutions=10}]" --new-game-session-protection-policy "FullProtection" --resource-creation-limit-policy "NewGameSessionsPerCreator=3, PolicyPeriodInMinutes=15" --ec2-inbound-permissions "FromPort=33435,ToPort=33435,IpRange=0.0.0.0/0,Protocol=UDP" "FromPort=33235,ToPort=33235,IpRange=0.0.0.0/0,Protocol=UDP" --MetricGroups "EMEAfleets" --peer-vpc-aws-account-id "111122223333" --peer-vpc-id "vpc-a11a11a"

コピー可能バージョン:

aws gamelift create-fleet --name "My_Fleet_1" --description "The sample test fleet" --fleet-type "ON_DEMAND" --MetricGroups "EMEAfleets" --build-id "build-1111aaaa-22bb-33cc-44dd-5555eeee66ff" --ec2-instance-type "c5.large" --runtime-configuration "GameSessionActivationTimeoutSeconds=300,MaxConcurrentGameSessionActivations=2,ServerProcesses=[{LaunchPath=C:\game\Bin64.dedicated\MultiplayerSampleProjectLauncher_Server.exe,Parameters=+sv_port 33435 +start_lobby,ConcurrentExecutions=10}]" --new-game-session-protection-policy "FullProtection" --resource-creation-limit-policy "NewGameSessionsPerCreator=3,PolicyPeriodInMinutes=15" --ec2-inbound-permissions "FromPort=33435,ToPort=33435,IpRange=0.0.0.0/0,Protocol=UDP" "FromPort=33235,ToPort=33235,IpRange=0.0.0.0/0,Protocol=UDP" --peer-vpc-aws-account-id "111122223333" --peer-vpc-id "vpc-a11a11a"

Version177

Page 184: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド現在の GameLift ステータスの表示

コンソールでのゲームデータの表示マネージド GameLift サービスは、プレイヤーの行動とパフォーマンスを把握できるように、アクティブなゲームのデータを継続的に収集します。Amazon GameLift コンソールを使用すると、ビルド、フリート、ゲームセッション、プレイヤーセッションのこの情報を表示、管理、および分析できます。

トピック• 現在の Amazon GameLift ステータスの表示 (p. 178)• ビルドを表示する (p. 179)• フリートの表示 (p. 180)• フリートの詳細の表示 (p. 180)• ゲームおよびプレイヤーセッションのデータの表示 (p. 184)• エイリアスを表示する (p. 185)

現在の Amazon GameLift ステータスの表示[ダッシュボード] は以下を表示するグリッドビューを提供します。

• ビルド数• すべてのステータスのフリート• 参照するエイリアスとフリート (ある場合)

Amazon GameLift ダッシュボードを開くには

• Amazon GameLift コンソールで、メニューバーから [ダッシュボード] を選択します。

ダッシュボードから、次のアクションを実行できます。

• 項目間の関係を表示します。項目とダッシュボードのその他の項目との関係を表示するには、項目ボックス内の任意の場所をクリックします。たとえば、ビルドをクリックして、ビルドを使用して作成されたすべてのフリートを表示します。フリートをクリックして、フリートを使用して作成されたビルドおよびフリートが指すエイリアスを表示します。ダッシュボードをリセットするには、[概要のリセット]ボタンをクリックします。

• ビルド、フリート、またはエイリアスの詳細を表示します。項目の ID 番号をクリックして、詳細ページを開きます。

Version178

Page 185: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドビルドを表示する

ビルドを表示するAmazon GameLift にアップロードしたすべてのゲームサーバービルドに関する情報を表示し、アクションを実行できます。表示されるビルドは、指定されたリージョンにアップロードしたもののみが含まれます。

ビルドカタログアップロードしたビルドは、[ビルド] ページに表示されます。このページを表示するには、AmazonGameLift コンソールのメニューバーで [ビルド] を選択します。

[ビルド] ページは、すべてのビルドの次の概要情報を提供します。

• ステータス – 3 つのステータスメッセージのうちの 1 つを表示します。• 初期化済み – ビルドは作成済みですが、アップロードがまだ開始していないか進行中です。• 準備完了 – ビルドは正常に受信され、フリートの作成の準備が整いました。• 失敗 – バイナリを受信する前にビルドがタイムアウトしました。

• ビルド名 – アップロードしたビルドに関連付けられた名前。ビルド名はビルドを Amazon GameLift にアップロードするときに指定します。AWS SDK アクション UpdateBuild を使用して変更できます。

• ビルド ID – アップロード時にビルドに割り当てられる一意の ID。• バージョン – アップロードしたビルドに関連付けられたバージョンラベル。ビルド名はビルドを

Amazon GameLift にアップロードするときに指定します。AWS SDK アクション UpdateBuild を使用して変更できます。

• OS – ビルドを実行するオペレーティングシステム。ビルド OS により、フリートのインスタンスにどのオペレーティングシステムがインストールされるかが決定します。

• サイズ – Amazon GameLift にアップロードされたビルドファイルのサイズ、単位はメガバイト (MB)。• 作成日 – ビルドを Amazon GameLift にアップロードした日時。• フリート – このビルドで現在デプロイされているフリートの数。

このページから、以下のいずれも行うことができます。

• ビルドから新しいフリートを作成します。ビルドを選択し、[ビルドからフリートを作成] をクリックします。

Version179

Page 186: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドビルドの詳細

• ビルドを削除します。ビルドを選択し、[ビルドの削除] をクリックします。• ビルドのリストのフィルタリングとソートをします。テーブルの先頭でコントロールを使用します。• ビルドの詳細を表示します。ビルド名をクリックし、ビルドの詳細ページを開きます。

ビルドの詳細コンソールダッシュボード、または [ビルド] ページからビルド名をクリックして、ビルドの詳細ページにアクセスします。ビルド詳細ページには、ビルドページと同じビルドの概要情報が表示されます。また、ビルドで作成されたフリートのリストも表示されます。実質上、このリストはビルドでフィルタリングされたフリートカタログです。これには、[フリート] ページ (p. 180)と同じ概要情報が含まれます。

フリートの表示AWS アカウントで Amazon GameLift のゲームをホストするために作成されたすべてのフリートに関する情報を表示できます。表示されるフリートには、選択されたリージョンで作成されたフリートのみが含まれます。[フリート] ページでは、新しいフリートを作成したり、選択したフリートの詳細情報を表示したりできます。フリートの詳細ページ (p. 180)では、使用状況、メトリクス、ゲームセッションとプレイヤーセッションのデータを確認できます。また、フリートのレコードを編集したり、フリートを終了したりすることもできます。

[フリート] ページを表示するには、Amazon GameLift コンソールのメニューバーから [フリート] を選択します。

[フリート] ページには、以下の概要情報がデフォルトで表示されます。設定 (歯車) ボタンを使用して、表示する情報をカスタマイズできます。

• ステータス – フリートのステータスとして、新規、ダウンロード中、構築、アクティブのいずれかを示します。フリートは、ゲームセッションをホストし、プレイヤー接続を受け入れるには、Active ステータスになっている必要があります。

• フリート名 – フリートに付けられたわかりやすい名前です。• EC2 タイプ – Amazon EC2 インスタンスタイプです。タイプによってフリートのインスタンスのコン

ピューティング性能が決まります。• OS – フリート内の各インスタンスのオペレーティングシステムです。フリートの OS は、デプロイされ

るビルドにより決まります。• アクティブなインスタンス – フリートで使用中の EC2 インスタンスの数です。• 最大インスタンス – フリートで現在許可されている EC2 インスタンスの最大数です。この値は、フリー

トの詳細ページの [スケーリング] タブで設定できます (サービスの制限内で)。• ゲームセッション – フリートで現在実行されているアクティブなゲームセッションの数です。データに

は 5 分の遅延が適用されています。• プエイヤーセッション – フリート内のゲームセッションに接続しているプレイヤーの数です。データに

は 5 分の遅延が適用されています。• 稼働時間 – フリートが実行されている合計時間です。• 作成日 – フリートが作成された日時です。

フリートの詳細の表示構成設定、スケーリング設定、メトリクス、ゲームおよびプレイヤーデータなど、あらゆるフリートの詳細情報にアクセスできます。[Fleet] 詳細ページには、コンソールダッシュボードから、または [Fleets]ページでフリート名をクリックしてアクセスします。

Version180

Page 187: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド概要

フリート詳細ページには、概要テーブルと、追加情報を含むタブが表示されます。このページで、以下の操作を実行できます。

• フリートのメタデータおよびランタイム設定を更新します。[Actions: Edit fleet] を選択します。• フリート容量設定を変更します。[Scaling] ページで、[Minimum]、[Maximum]、および [Desired] インス

タンスの値を編集します。• Auto Scaling ポリシーを設定または変更します。[Scaling] ページで、ポリシーを追加または編集しま

す。• フリートをシャットダウンします。[Actions: Terminate fleet] を選択します。

概要概要テーブルには、次の情報が含まれます。

• ステータス – フリートの現在のステータスとして、新規、ダウンロード中、構築、アクティブのいずれかを示します。フリートがゲームセッションをホストしたり、プレイヤー接続を受け入れるには、そのフリートがアクティブになっている必要があります。

• フリート ID – フリートに割り当てられた一意の識別子です。• EC2 タイプ – 作成時にフリートに選択された Amazon EC2 インスタンスタイプです。フリートのイン

スタンスタイプは、フリート内の各インスタンスに使用されるコンピューティングハードウェアと容量を指定し、フリートのインスタンス制限を決定します。

• OS – フリート内の各インスタンスのオペレーティングシステムです。フリートの OS は、デプロイされるビルドにより決まります。

• アクティブなインスタンス – アクティブステータスのインスタンスの数です。現在ゲームセッションを実行中であるか、実行する準備が整っているインスタンスが該当します。

• アクティブなサーバー – フリートで現在のステータスがアクティブになっているサーバープロセスの数です。データは 5 分遅延します。

• アクティブなゲームセッション – フリートのインスタンスで現在実行されているゲームセッションの数です。データは 5 分遅延します。

• 現在のプレイヤーセッション – 現在接続されているプレイヤーの数と、フリート全体のアクティブなゲームセッションにおける合計プレイヤースロット数です。たとえば、25 (接続済みプレイヤー)/100(接続可能なプレイヤー) は、フリートがさらに 75 人のプレイヤーをサポートできることを意味します。データは 5 分遅延します。

• 保護 – フリートのゲームセッション保護 (p. 6)の現在の設定です。

稼働時間 – フリートがアクティブになっている合計時間です。• 作成日 – フリートが作成された日時です。

メトリクス[メトリクス] タブには、時間の経過に伴うフリートメトリクスのグラフィカル表現が表示されます。

メトリクス情報をグラフで表示するには

1. グラフ領域の左側にある 1 つ以上のメトリクス名をクリックし、グラフ表示に追加します。メトリクス名はオフになっているときはグレーで表示されます。カラーキーを使用して、選択したメトリクスのグラフの線を識別します。個々のメトリクスの説明は「フリートの Amazon GameLift メトリクス (p. 187)」に記載されています。次のメトリクスのカテゴリを使用できます。

• [インスタンスの数] – これらのメトリクスは、時間経過にともなうインスタンスレベルでの容量と使用率の変化を追跡します ([スケーリング] タブにも表示されます)。

Version181

Page 188: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドイベント

• [Game (ゲーム)] – これらのメトリクスは、時間経過にともなうゲームセッションレベルでのフリートのアクティビティと使用率の変化を追跡します。

• [サーバープロセス] – これらのメトリクスは、フリート全体におけるサーバープロセスのステータスと状態を追跡します。Amazon GameLift サービスは、アクティブな各サーバープロセスの状態を定期的にポーリングします。

• [インスタンスのパフォーマンス] – これらのメトリクスは、フリートのコンピューティングリソースのパフォーマンスを反映しています。各メトリックスの詳細な説明は「EC2 インスタンスメトリクス」を参照してください。

2. メトリクスデータの表示方法を変更するには、グラフ領域の上に表示された次のフィルターを使用します。

• [日付] および [Period (期間)] – 日付範囲を選択する 2 つのオプションがあります。• [Last hour]、[Last day]、[Last week] など、現在の時刻から見た期間を選択するには、[Relative]

を使用します。• 任意の開始日時と終了日時を持つ期間を指定するには、[Absolute] を使用します。

• [詳細度] – データポイントを集計する時間の長さを選択します。• [更新の頻度] – グラフ表示を更新する頻度を選択します。• [タイムゾーン] – グラフ表示用の時間形式として、[UTC] (協定世界時) または [Browser time (ブラウ

ザ時刻)] (現地時間) を選択します。• [ポイントの表示] – オン/オフを切り替えて、別個のデータポイントを円として表示するか線のみ表

示するかを選択します。

イベント[Events] タブには、イベントコード、メッセージ、タイムスタンプなど、フリートで発生したすべてのイベントのログが表示されます。Amazon GameLift API リファレンス の「イベント」の説明を参照してください。

スケーリング[Scaling] タブには、時間の経過に伴う容量の変更の現在のステータスやグラフィカル表現など、フリート容量に関連する情報が表示されます。容量制限の更新と Auto Scaling の管理を行うツールも用意されています。

現在と過去のスケーリング情報を表示するには

1. [Scaling] タブの上部に移動します。このフリートの現在の容量のステータスは左側の列に表示されます。これらの値は以下のように定義されます。

• [スケーリング制限] – これらのメトリクスは、容量制限の変化履歴を追跡します。• [Minimum (最小)] – フリートに維持するインスタンス数の最小ハード制限です。Auto Scaling 中、

または必要な容量が最小数を下回って設定された場合でも、フリート容量が現在の最小数を下回ることはありません。

• [必要] – フリートに現在必要なアクティブインスタンスの数です。目標は、[アクティブ] インスタンス (後述) の数を必要なインスタンス数と一致させることです。これを実現するために、必要に応じてインスタンスを作成または終了します。

• [Maximum (最大)] – フリートに維持するインスタンス数の最大ハード制限です。Auto Scaling中、または必要な容量が最大数を上回って設定された場合でも、フリート容量が現在の最大数を上回ることはありません。

• [インスタンスの数] – これらのメトリクスは、時間経過にともなう容量と使用率の変化を追跡します。個々のメトリクスの説明は「フリートの Amazon GameLift メトリクス (p. 187)」を参照してください。

Version182

Page 189: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームセッション

2. 時間の経過に伴うフリート容量の変化を表示するには、左にリストされたすべてのスケーリングメトリクスをグラフで表示します。メトリクス名をクリックしてグラフに追加します(メトリクス名は、使用していない場合はグレーで表示されます)。 カラーキーを使用して、選択したメトリクスに一致するグラフの線を識別します。

3. (オプション) メトリクスデータのグラフへの表示方法を指定するには、グラフ領域の上に表示された次のフィルターを使用します。

• [日付] および [Period (期間)] – 日付範囲を選択する 2 つのオプションがあります。• [Last hour]、[Last day]、[Last week] など、現在の時刻から見た期間を選択するには、[Relative]

を使用します。• 任意の開始日時と終了日時を持つ期間を指定するには、[Absolute] を使用します。

• [詳細度] – データポイントを集計する時間の長さを選択します。• [更新の頻度] – グラフ表示を更新する頻度を選択します。• [形式] – グラフ表示用の時間形式として、[UTC] (協定世界時) または [Browser time (ブラウザ時刻)]

(現地時間) を選択します。• [ポイントの表示] – オン/オフを切り替えて、別個のデータポイントを円として表示するか線のみ表

示するかを選択します。

フリート容量を変更するには

• 履歴グラフの下は、容量制限とスケーリング容量を設定するためのツールです。これらのツールの使用方法の詳細については、「フリートの容量を手動で設定する (p. 129)」を参照してください。AutoScaling の管理については、「Auto Scaling フリート容量 (p. 130)」を参照してください。

ゲームセッション[Game sessions] タブには、フリートにホストされている過去と現在のゲームセッションと、いくつかの詳細情報がリストされます。ゲームセッション ID をクリックすると、メディアプレイヤーセッションを含む追加のゲームセッション情報にアクセスできます。

• [Status (ステータス)] – ゲームセッションステータスです。有効なステータスは次のとおりです。• [アクティブ化中] – ゲームセッションが開始され、実行する準備ができています。• [Active (アクティブ)] – ゲームセッションが実行されており、プレイヤーを受け入れ可能です (セッ

ションのプレイヤー作成ポリシーによります)。• [終了済み] – ゲームセッションが終了しました。

• [Name (名前)] – ゲームセッションで生成されたゲームです。• [ID] – Amazon GameLift によりゲームセッションに割り当てられた一意の識別子です。• [IP アドレス] – ゲームセッションに指定された IP アドレスです。• [Port (ポート)] – ゲームセッションへの接続に使用されるポート番号です。• [プレイヤーセッション] – ゲームセッションに接続しているプレイヤーの数と、ゲームセッションがサ

ポートできる合計プレイヤー数です。たとえば、2 (接続済みプレイヤー)/10 (接続可能なプレイヤー)は、フリートがさらに 8 人のプレイヤーをサポートできることを意味します。

• [稼働時間] – ゲームセッションが実行されている合計時間です。• [作成日] – フリートがいつ作成されたを示すタイムスタンプです。

ビルド[Build] タブには、フリートの作成時に設定された、フリートのビルド関連の設定が表示されます。ビルドID を選択すると、ビルドの全詳細ページが表示されます。

Version183

Page 190: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド容量の割り当て

ビルドが削除されたときや、ビルドを取得しようとしたときにエラーが発生したときは、以下のステータスメッセージのいずれかが表示される場合があります。

• [削除済み] – このフリートのビルドは削除されました。ビルドが削除されても、フリートは引き続き正常に実行されます。

• [エラー] – フリートのビルド情報を取得しようとしている間にエラーが発生しました。

容量の割り当て[Capacity allocation] タブには、フリートのランタイム設定が表示されます。この設定では、各インスタンスで起動するサーバープロセスとその方法が指定されます。これには、ゲームサーバー実行可能ファイルのパスとオプション起動パラメーターが含まれます。コンソールでフリートを編集するか、AWS CLI を使用してランタイム設定を更新することにより、フリートの容量の割り当てを変更できます。

ポート[Ports] タブには、IP アドレスやポート設定範囲など、フリートの接続アクセス許可が表示されます。コンソールでフリートを編集するか、AWS CLI を使用してフリートのポート設定を更新することにより、接続アクセス許可を変更できます。

ARN[ARN] タブにはこのフリートに割り当てられた Amazon リソースネーム (ARN) がリストされています。

ゲームおよびプレイヤーセッションのデータの表示フリートで実行されているゲームと個々のプレイヤーに関する情報を表示できます。ゲームセッションとプレイヤーセッションの詳細については、『プレイヤーがゲームに接続する方法 (p. 12)』を参照してください。

ゲームセッションデータを表示するには

1. Amazon GameLift コンソールでは、調べるフリートの詳細ページを開きます(メニューバーで [Fleets]を選択し、フリート名をクリックします)。

2. [Game sessions] タブを開きます。このタブには、フリートにホストされているすべてのゲームセッションと概要情報が表示されます。

3. ゲームセッションをクリックし、ゲームセッションに関する追加情報と、ゲームに接続したプレイヤーのリストを表示します。

ゲームセッションゲームセッション情報の概要は、ページの上部に表示されます。次の内容が含まれます。

• [Status (ステータス)] – ゲームセッションのステータスです。有効なステータスは以下のとおりです。• [アクティブ化中] – Amazon GameLift がゲームセッションを作成し、ゲームプロパティをゲームサー

バープロセスに渡しました。ゲームサーバーは、ゲームプロパティを解釈し、潜在的なプレイヤーセッションの接続準備が完了すると Amazon GameLift にコールバックします。

• [Active (アクティブ)] – ゲームセッションは、プレイヤーセッションが 0 個以上接続されているゲームプレイをサポートできます。

• [終了済み] – ゲームセッションが終了しました。プレイヤーセッションは、終了したゲームセッションに接続できなくなります。

Version184

Page 191: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドプレイヤーセッション

• [Name (名前)] – 自動生成されたゲームセッションの名前です。• [IP アドレス] – ステータスが [アクティブ化中] または [Active (アクティブ)] のゲームセッションの場

合、ゲームへの接続に使用される IP アドレスです。• [Port (ポート)] – ゲームセッションへの接続に使用されるポート番号。• [プレイヤーセッション] – ゲームセッションに現在接続しているプレイヤーの数と、ゲームセッション内

のプレイヤースロットの合計数です。たとえば、値 [10 of 15] は、ゲーム内の使用可能なスロット 15 個のうち、10 個が埋まっており、5 個が空いていることを示します。

• [プレイヤーセッション作成ポリシー] – 新しいプレイヤーがゲームに接続できるかどうかを決定するポリシーです。値は [Accept all] または [Deny all] です。詳細については、「GameSession オブジェクト」を参照してください。

• [稼働時間] – ゲームセッションが実行されている合計時間です。• [作成日] – ゲームセッションが作成された日時です。

プレイヤーセッションゲームセッションごとに次のプレイヤーセッションデータが収集されます。

• [Status (ステータス)] – プレイヤーセッションのステータスです。オプションには以下が含まれます。• [リザーブド] – プレイヤーセッションが予約されていますが、プレイヤーがまだ接続していません。• [Active (アクティブ)] – プレイヤーセッションが現在ゲームサーバーに接続されています。• [Completed (完了)] – プレイヤーセッションが終了しました。プレイヤーは切断されました。• [タイムアウト] – プレイヤーセッションが予約されましたが、プレイヤーが接続できませんでした。

• [ID] – プレイヤーセッションに割り当てられた ID。• [プレイヤー ID] – プレイヤーの一意の識別子です。この ID をクリックして、追加のプレイヤー情報を取

得します。• [開始時間] – プレイヤーがゲームセッションに接続した時間です。• [終了時間] – プレイヤーがゲームセッションから切断した時間です。• [合計時間] – プレイヤーがプレイヤーセッションでアクティブになっている合計時間です。

プレイヤー情報現在のリージョンのすべてのフリート間でプレイヤーが接続したすべてのゲームのリストなど、選択したプレイヤーの追加情報を表示します。この情報には、各プレーヤーセッションのステータス、開始時間と終了時間、および合計接続時間が含まれます。クリックすると、関連するゲームセッションとフリートのデータを表示できます。

エイリアスを表示するエイリアスページで、作成したすべてのフリートのエイリアスについての情報を表示しアクションを実行できます。表示されるエイリアスは、選択したリージョンのために作成したものだけです。

エイリアスカタログ作成したすべてのエイリアスは、エイリアスのカタログページに表示されます。エイリアスページを表示するには、Amazon GameLift コンソールのメニューバーで [エイリアス] を選択します。

エイリアスページでは、タイプを含むすべてのビルドの概要情報が提供されます。このページからできること:

Version185

Page 192: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドエイリアスの詳細

• 新しいエイリアスを作成します。[エイリアスの作成] をクリックします。• エイリアスのリストのフィルタリングとソートをする。テーブルの先頭でコントロールを使用します。• エイリアスの詳細を表示する。エイリアス名をクリックして、エイリアスの詳細ページを開きます。

エイリアスの詳細コンソールダッシュボードまたはエイリアスのカタログページから、エイリアス名をクリックしてエイリアスの詳細ページにアクセスします。エイリアスの詳細ページにはエイリアスに関する情報の概要が表示されます。

このページからできること:

• 名前、詳細、エイリアスの関連付けられたフリート ID の変更を含め、エイリアスの編集をする。[アクション: エイリアスの編集] をクリックします。

• 現在エイリアスが関連付けられているフリートに関する情報を表示する。これには、フリートのステータスと現在の使用状況 (アクティブなゲームセッションやプレイヤー) が含まれます。

• エイリアスを削除する。[アクション: エイリアスの削除] をクリックします。

エイリアスの詳細情報を次に示します。

• タイプ – エイリアスのルーティングオプションで、以下のいずれかです。• シンプル – シンプルなエイリアスは、関連するフリートのゲームにプレイヤーをルーティングしま

す。エイリアスを更新していつでも別のフリートを指定できます。• ターミナル – ターミナルエイリアスはフリートを指しません。代わりに、クライアントにメッセージ

を返します。このエイリアスタイプは、ゲームサーバーのセットが使用できなくなった場合にプレイヤーに適切に通知するのに役立ちます。たとえば、ターミナルエイリアスではゲームクライアントが古いことをプレイヤーに通知し、アップグレードのオプションを提供できます。

• エイリアス ID – エイリアスを識別するために使用される一意の数値。• 説明 – エイリアスの説明。• 作成日 – エイリアスを作成した日時。

Version186

Page 193: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドCloudWatch によるモニタリング

Amazon GameLift のモニタリングAmazon EC2 でスタンドアロン機能として GameLift FleetIQ を使用する場合は、Linux インスタンス用Amazon EC2 ユーザーガイドの「Amazon EC2 のセキュリティ」も参照してください。

モニタリングは、Amazon GameLift および AWS ソリューションの信頼性、可用性、パフォーマンスを維持する上で重要な部分です。Amazon GameLift でのメトリクスの主な用途は 3 つあります。システムの状態をモニタリングしてアラームを設定すること、ゲームサーバーのパフォーマンスと使用状況を追跡すること、および手動/自動スケーリングを使用してキャパシティーを管理することです。

AWS には、Amazon GameLift を監視して異常を検出した場合にレポートし、必要に応じて自動的に対処するために、以下のモニタリングツールが用意されています。

• Amazon GameLift コンソール• Amazon CloudWatch – Amazon GameLift のメトリクスをリアルタイムでモニタリングし、さらに AWS

のサービスで実行している他の AWS リソースおよびアプリケーションのメトリクスもモニタリンできます。CloudWatch は、カスタマイズされたダッシュボードを作成するツールや、メトリクスが指定のしきい値に達したときに通知または処置するアラームを設定する機能など、一連のモニタリング機能を提供します。

• AWS CloudTrail – Amazon GameLift や AWS の他のサービスのために AWS アカウントによって (またはそのアカウントに代わって) 行われるすべての API コールおよび関連イベントをキャプチャします。データは、指定した Amazon S3 バケットにログファイルとして配信されます。AWS を呼び出したユーザーとアカウント、呼び出し元のソース IP アドレス、および呼び出しの発生日時を特定できます。

トピック• Amazon CloudWatch による Amazon GameLift のモニタリング (p. 187)• AWS CloudTrail を使用した Amazon GameLift API コールのログ記録 (p. 197)

Amazon CloudWatch による Amazon GameLift のモニタリング

Amazon EC2 でスタンドアロン機能として GameLift FleetIQ を使用する場合は、Linux インスタンス用Amazon EC2 ユーザーガイドの「Amazon EC2 のセキュリティ」も参照してください。

Amazon CloudWatch を使用して Amazon GameLift をモニタリングできます。AWS は、未加工データを収集して、読み取り可能なほぼリアルタイムのメトリクスに加工するサービスです。これらの統計は 15か月間記録されるため、履歴情報にアクセスして Amazon GameLift のホスティングゲームサーバーの動作をより的確に把握できます。また、特定のしきい値を監視するアラームを設定し、これらのしきい値に達したときに通知を送信したりアクションを実行したりできます。詳細については、『Amazon CloudWatchユーザーガイド』を参照してください。

ゲームの CloudWatch メトリクスにアクセスするには、AWS マネジメントコンソール、AWS CLI、または CloudWatch API を使用できます。以下の表は、Amazon GameLift のメトリクスとディメンションの一覧です。CloudWatch で利用可能なすべてのメトリクスは、Amazon GameLift コンソールでも利用可能です。コンソールでは、データがカスタマイズ可能なグラフとして提供されます。

フリートの Amazon GameLift メトリクスAWS/GameLift 名前空間には、フリート全体またはフリートグループにまたがるアクティビティに関する以下のメトリクスが含まれます。Amazon GameLift サービスは CloudWatch に毎分メトリクスを送信します。

Version187

Page 194: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートの Amazon GameLift メトリクス

インスタンス

メトリクス 説明

ActiveInstances ACTIVE ステータスのインスタンスの数。このステータスは、アクティブなサーバープロセスを実行中であることを示します。数値には、アイドル状態のインスタンスや、1 つ以上のゲームセッションをホストしているインスタンスが含まれます。このメトリクスでは、インスタンスの現在の総容量を測定します。このメトリクスはAuto Scaling で使用できます。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum

DesiredInstances Amazon GameLift でフリートに保持しようとしているアクティブなインスタンスの目標数。Auto Scaling を使用している場合、この値は現在有効なスケーリングポリシーに基づいて決定されます。Auto Scaling を使用していない場合、この値は手動で設定します。このメトリクスは、フリートメトリクスグループのデータの表示には使用できません。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum

IdleInstances 現在ホストしているゲームセッション数が 0 (ゼロ) であるアクティブなインスタンス。このメトリクスでは、使用可能であるが使用されていない容量を測定します。このメトリクスは Auto Scaling で使用できます。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum

MaxInstances フリートで許容されるインスタンスの最大数。フリートのインスタンスの最大数により、手動または自動で容量をスケールアップする上限が決まります。このメトリクスは、フリートメトリクスグループのデータの表示には使用できません。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum

MinInstances インスタンスで許容されるインスタンスの最小数。フリートのインスタンスの最小数により、手動または自動で容量をスケールダウンする下限が決まります。このメトリクスは、フリートメトリクスグループのデータの表示には使用できません。

単位: カウント

Version188

Page 195: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートの Amazon GameLift メトリクス

メトリクス 説明関連する CloudWatch 統計:Average、Minimum、Maximum

PercentIdleInstances すべてのアイドル状態のアクティブなインスタンスのパーセント (IdleInstances / ActiveInstances で計算)。このメトリクスは Auto Scaling で使用できます。

単位: パーセント

関連する CloudWatch 統計:Average、Minimum、Maximum

InstanceInterruptions 中断されたスポットインスタンス数。

単位: カウント

関連する CloudWatch 統計:Sum、Average、Minimum、Maximum

サーバープロセス

メトリクス 説明

ActiveServerProcesses ACTIVE ステータスのサーバープロセス。このステータスは、プロセスが実行中でゲームセッションをホストできることを示します。数値には、アイドル状態のサーバープロセスやゲームセッションをホストしているサーバープロセスが含まれます。このメトリクスでは、サーバープロセスの現在の総容量を測定します。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum

HealthyServerProcesses 正常な状態を示しているアクティブなサーバープロセス。このメトリクスは、フリートのゲームサーバーの全体的な状態を追跡するのに役立ちます。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum

PercentHealthyServerProcesses 正常な状態を示しているすべてのアクティブなサーバープロセスのパーセント (HealthyServerProcesses /ActiveServerProcesses で計算)。

単位: パーセント

関連する CloudWatch 統計:Average、Minimum、Maximum

ServerProcessAbnormalTerminations 前回のレポート以降に異常事態のためにシャットダウンされたサーバープロセス。このメトリクスには、Amazon GameLift サービス主導の終了が含まれま

Version189

Page 196: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートの Amazon GameLift メトリクス

メトリクス 説明す。これは、サーバープロセスが応答を停止した場合、継続的にヘルスチェックの失敗をレポートする場合、または ProcessEnding () の呼び出しで正常に終了しない場合に発生します。

単位: カウント

関連する CloudWatch 統計:Sum、Average、Minimum、Maximum

ServerProcessActivations 前回のレポート以降に ACTIVATING から ACTIVE のステータスに正常に移行したサーバープロセス。サーバープロセスは、アクティブになるまでゲームセッションをホストすることはできません。

単位: カウント

関連する CloudWatch 統計:Sum、Average、Minimum、Maximum

ServerProcessTerminations 前回のレポート以降にシャットダウンされたサーバープロセス。これには、プロセスの正常または異常な終了を問わず、何らかの理由で TERMINATED ステータスに移行したすべてのサーバープロセスが含まれます。

単位: カウント

関連する CloudWatch 統計:Sum、Average、Minimum、Maximum

ゲームセッション

メトリクス 説明

ActivatingGameSessions ACTIVATING ステータスのゲームセッション。このステータスは、セッションが起動中であることを示します。ゲームセッションは、アクティブになるまでプレイヤーをホストすることはできません。起動時間が長引く場合、セッションは ACTIVATING から ACTIVE ステータスに移行していない可能性があります。このメトリクスは Auto Scaling で使用できます。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum

ActiveGameSessions Active ステータスのゲームセッション。このステータスは、セッションでプレイヤーをホストできること、およびゼロ個以上のプレイヤーをホストしていることを示します。このメトリクスでは、現在ホストされているゲームセッションの総数を測定します。このメトリクスはAuto Scaling で使用できます。

単位: カウント

Version190

Page 197: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドフリートの Amazon GameLift メトリクス

メトリクス 説明関連する CloudWatch 統計:Average、Minimum、Maximum

AvailableGameSessions 現在使用されていないアクティブで正常なサーバープロセスのゲームセッションスロット。このメトリクスでは、すぐに開始できる新しいゲームセッションの数を測定します。このメトリクスは Auto Scaling で使用できます。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum

PercentAvailableGameSessions 現在使用されていないすべてのアクティブなサーバープロセス (正常または異常を問わない) のゲームセッションスロットのパーセント (AvailableGameSessions /[ActiveGameSessions +AvailableGameSessions + unhealthy serverprocesses] で計算)。このメトリクスは Auto Scalingで使用できます。

単位: パーセント

関連する CloudWatch 統計: Maximum、Average

GameSessionInterruptions 中断されたスポットインスタンスのゲームセッション数。

単位: カウント

関連する CloudWatch 統計:Sum、Average、Minimum、Maximum

プレイヤーセッション

メトリクス 説明

CurrentPlayerSessions ステータスが ACTIVE (プレイヤーはアクティブなゲームセッションに接続されている) であるか、RESERVED(プレイヤーはゲームセッションのスロットを与えられているが、まだ接続されていない) であるプレイヤーセッション。このメトリクスは Auto Scaling で使用できます。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum

PlayerSessionActivations 前回のレポート以降に RESERVED から ACTIVE ステータスに移行したプレイヤーセッション。これは、プレイヤーがアクティブなゲームセッションに正常に接続した場合に発生します。

単位: カウント

Version191

Page 198: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドキューの Amazon GameLift メトリクス

メトリクス 説明関連する CloudWatch 統計:Sum、Average、Minimum、Maximum

キューの Amazon GameLift メトリクスGameLift 名前空間には、ゲームセッション配置キュー全体のアクティビティに関する以下のメトリクスが含まれます。Amazon GameLift サービスは CloudWatch に毎分メトリクスを送信します。

メトリクス 説明

AverageWaitTime ゲームセッション配置キューで PENDING ステータスのリクエストが実行されるまでの平均待機時間。

単位: 秒

関連する CloudWatch 統計:Average、Minimum、Maximum、Sum

FirstChoiceNotViable 第 1 選択のフリートが有効ではない (中断率の高いスポットフリートなどである) と判断されたために、別のフリートに正常に配置されたゲームセッション。第 1 選択のフリートは、キューの先頭のフリートです。または、配置リクエストにプレイヤーレイテンシーデータが含まれている場合は、FleetIQ の優先度設定に従って最初に選択されたフリートです。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum、Sum

FirstChoiceOutOfCapacity 第 1 選択のフリートに使用可能なリソースがないために、別のフリートに正常に配置されたゲームセッション。第 1 選択のフリートは、キューの先頭のフリートです。または、配置リクエストにプレイヤーレイテンシーデータが含まれている場合は、FleetIQ の優先度設定に従って最初に選択されたフリートです。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum、Sum

LowestLatencyPlacement プレイヤーに対してキューの最低のレイテンシーを提供するリージョンに正常に配置されたゲームセッション。このメトリクスは、配置リクエストに FleetIQ の優先度設定をトリガーするプレイヤーレイテンシーデータが含まれている場合にのみ生成されます。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum、Sum

Version192

Page 199: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドキューの Amazon GameLift メトリクス

メトリクス 説明

LowestPricePlacement 選択したリージョンでキューの最低価格のフリートに正常に配置されたゲームセッション (FleetIQ の優先度設定では、まずプレイヤーのレイテンシーが最短のリージョンが選択され、そのリージョン内で最低コストのフリートが検索されます)。 このフリートは、スポットフリートであるか、キューにスポットインスタンスがない場合はオンデマンドインスタンスになります。このメトリクスは、配置リクエストにプレイヤーレイテンシーデータが含まれている場合にのみ生成されます。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum、Sum

Placement <region name> 指定したリージョン内のフリートに正常に配置されたゲームセッション。このメトリクスは、PlacementsSucceeded メトリクスのリージョン別内訳を示します。

単位: カウント

関連する CloudWatch 統計: Sum

PlacementsCanceled 前回のレポート以降に、タイムアウト前にキャンセルされたゲームセッション配置リクエスト。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum、Sum

PlacementsFailed 前回のレポート以降に何らかの理由で失敗したゲームセッション配置リクエスト。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum、Sum

PlacementsStarted 前回のレポート以降にキューに追加された新しいゲームセッション配置リクエスト。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum、Sum

PlacementsSucceeded 前回のレポート以降に新しいゲームセッションとなったゲームセッション配置リクエスト。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum、Sum

Version193

Page 200: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマッチメーキングの Amazon GameLift メトリクス

メトリクス 説明

PlacementsTimedOut 前回のレポート以降に、キューのタイムアウト制限に達して実行されなかったゲームセッション配置リクエスト。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum、Sum

QueueDepth キュー内で PENDING ステータスのゲームセッション配置リクエストの数。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum、Sum

マッチメーキングの Amazon GameLift メトリクスGameLift 名前空間には、マッチメーキング設定とマッチメーキングルールのマッチメーキングアクティビティに関するメトリクスが含まれます。Amazon GameLift サービスは CloudWatch に毎分メトリクスを送信します。

マッチメーキングアクティビティのシーケンスの詳細については、「Amazon GameLift FlexMatch の仕組み」を参照してください。

マッチメーキング設定

メトリクス 説明

CurrentTickets マッチメーキングリクエストは現在処理中であるか、処理の待機中です。

単位: カウント

関連する CloudWatch 統計:Average、Minimum、Maximum、Sum

MatchAcceptancesTimedOut 承諾を要求するマッチメーキング設定の場合、前回のレポート後に承諾プロセス中にタイムアウトしたマッチング案の数。

単位: カウント

関連する CloudWatch 統計: Sum

MatchesAccepted 承諾を要求するマッチメーキング設定の場合、前回のレポート後に承諾されたマッチング案の数。

単位: カウント

関連する CloudWatch 統計: Sum

MatchesCreated 前回のレポート後に作成された可能性のあるマッチング案の数。

Version194

Page 201: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマッチメーキングの Amazon GameLift メトリクス

メトリクス 説明単位: カウント

関連する CloudWatch 統計: Sum

MatchesPlaced 前回のレポート後にゲームセッションに正常に配置されたマッチング案の数。

単位: カウント

関連する CloudWatch 統計: Sum

MatchesRejected 承諾を要求するマッチメーキング設定の場合、前回のレポート後に少なくも 1 人のプレイヤーによって却下された可能性のあるマッチング案の数。

単位: カウント

関連する CloudWatch 統計: Sum

PlayersStarted 前回のレポート後に追加されたマッチメーキングチケットのプレイヤーの数。

単位: カウント

関連する CloudWatch 統計: Sum

TicketsFailed 前回のレポート後に、マッチメーキングリクエストが失敗した数。

単位: カウント

関連する CloudWatch 統計: Sum

TicketsStarted 前回のレポート後に作成された新しいマッチメーキングリクエスト。

単位: カウント

関連する CloudWatch 統計: Sum

TicketsTimedOut 前回のレポート後に、タイムアウトしたマッチメーキングリクエストの数。

単位: カウント

関連する CloudWatch 統計: Sum

TimeToMatch 前回のレポート以前にマッチング候補に配置されたマッチメーキングリクエストの場合、チケットの作成からマッチング候補の作成までの時間。

単位: 秒

関連する CloudWatch 統計: DataSamples、Average、Minimum、Maximum、p99

Version195

Page 202: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAmazon GameLift メトリクスのディメンション

メトリクス 説明

TimeToTicketCancel 前回のレポート前にキャンセルされたマッチメーキングリクエストの場合、チケットの作成からキャンセルまでの時間。

単位: 秒

関連する CloudWatch 統計: DataSamples、Average、Minimum、Maximum、p99

TimeToTicketSuccess 前回のレポート前に成功したマッチメーキングリクエストの場合、チケットの作成からマッチングが正常に配置されるまでの時間。

単位: 秒

関連する CloudWatch 統計: DataSamples、Average、Minimum、Maximum、p99

マッチメーキングルール

メトリクス 説明

RuleEvaluationsPassed 前回のレポート後に、マッチメーキングプロセスで合格したルール評価数。このメトリクスは、上位 50 のルールに制限されます。

単位: カウント

関連する CloudWatch 統計: Sum

RuleEvaluationsFailed 前回のレポート後に、マッチメーキングで失敗したルール評価数。このメトリクスは、上位 50 のルールに制限されます。

単位: カウント

関連する CloudWatch 統計: Sum

Amazon GameLift メトリクスのディメンションAmazon GameLift は以下のディメンションでフィルタリングメトリクスをサポートします。

ディメンション 説明

FleetId フリート別の識別子。このディメンションは、インスタンス、サーバープロセス、ゲームセッション、およびプレイヤーセッションのすべてのメトリクスで使用されます。これはキューとマッチメーキングのメトリクスでは使用されません。

MetricGroup フリートのコレクション別の識別子。フリートをフリートメトリクスグループに含めるには、メトリクスグループ名をフリートの属性 (「UpdateFleetAttributes ()」を

Version196

Page 203: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAPI コールのログ記録

ディメンション 説明参照) に追加します。このディメンションは、インスタンス、サーバープロセス、ゲームセッション、およびプレイヤーセッションのすべてのメトリクスで使用されます。これはキューとマッチメーキングのメトリクスでは使用されません。

QueueName キュー別の識別子。このディメンションは、ゲームセッション配置キューでのみ使用されます。

MatchmakingConfigurationName 1 つのマッチメーキングと設定の一意の識別子。このディメンションはマッチメーキングのメトリクスでのみ使用されます。

MatchmakingConfigurationName-RuleName

マッチメーキング設定およびマッチメーキングルールの交差に対する一意の識別子。このディメンションはマッチメーキングのメトリクスでのみ使用されます。

InstanceType EC2 インスタンスタイプの一意の識別子 (「c4.large」など)。このディメンションはスポットインスタンスのメトリクスでのみ使用されます。

OperatingSystem インスタンスのオペレーティングシステムの一意の識別子。このディメンションはスポットインスタンスのメトリクスでのみ使用されます。

AWS CloudTrail を使用した Amazon GameLift APIコールのログ記録

Amazon GameLift は AWS CloudTrail サービスと統合されています。このサービスは、AWS アカウントでAmazon GameLift が行う API コールまたはこれに代わって行われる API コールのすべてをキャプチャします。CloudTrail は、指定先の Amazon S3 バケットにログファイルを配信します。CloudTrail は、AmazonGameLift コンソールまたは Amazon GameLift API からの API コールをキャプチャします。CloudTrail によって収集された情報を使用して、Amazon GameLift に対してどのようなリクエストが行われたかを判断することができます。リクエストの作成元のソース IP アドレス、リクエストの実行者、リクエストの実行日時などです。CloudTrail の詳細 (設定して有効にする方法など) については、AWS CloudTrail User Guideを参照してください。

CloudTrail での Amazon GameLift 情報AWS アカウントで CloudTrail ログ記録を有効にすると、Amazon GameLift アクションに対する API コールはログファイルに記録されます。Amazon GameLift レコードは、AWS の他のサービスのレコードと一緒にログファイルに書き込まれます。CloudTrail は、期間とファイルサイズに基づいて新規ファイルの作成と書き込みのタイミングを決定します。

すべての Amazon GameLift アクションが CloudTrail によってログに記録されます。たとえば、CreateGameSession、CreatePlayerSession、UpdateGameSession を呼び出すと、CloudTrailログファイルにエントリが生成されます。アクションの詳細なリストについては、Amazon GameLift APIリファレンス を参照してください。

各ログエントリには、誰がリクエストを生成したかに関する情報が含まれます。ログのユーザー ID 情報は、リクエストの実行に、AWS アカウントのルートや IAM ユーザーの認証情報が使用されたか、ロールやフェデレーションユーザーの一時的なセキュリティ認証情報が使用されたか、または別の AWS のサー

Version197

Page 204: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAmazon GameLift ログファイルエントリの概要

ビスが使用されたかを確認するのに役立ちます。詳細については、CloudTrail イベントリファレンスのuserIdentity フィールドを参照してください。

ログファイルは S3 バケットに無期限に保管できますが、ログファイルを自動的にアーカイブまたは削除するように Amazon S3 ライフサイクルルールを定義することもできます。

ログファイルの配信時にすぐにアクションを実行する場合、新しいログファイルの配信時に CloudTrail から Amazon Simple Notification Service (Amazon SNS) 通知を発行することを選択できます。詳細については、「Amazon SNS 通知の構成」を参照してください。

また、複数の AWS リージョンと複数の AWS アカウントからの Amazon GameLift ログファイルを 1 つの S3 バケットに集約することもできます。詳細については、「CloudTrail ログファイルの単一の AmazonS3 バケットへの集約」を参照してください。

Amazon GameLift ログファイルエントリの概要CloudTrail ログファイルには、複数の JSON 形式イベントで構成される 1 つ以上のログエントリが記録されます。ログエントリは任意の送信元からの単一のリクエストを表し、リクエストされたアクション、パラメータ、アクションの日時などに関する情報を含みます。ログエントリは、特定の順序になるように生成されるわけではありません。つまり、パブリック API 呼び出しの順序付けられたスタックトレースではありません。

次の例は、CreateFleet アクションと DescribeFleetAttributes アクションの CloudTrail ログエントリを示しています。

{ "Records": [ { "eventVersion": "1.04", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::111122223333:user/myUserName", "accountId": "111122223333", "accessKeyId": AKIAIOSFODNN7EXAMPLE", "userName": "myUserName" }, "eventTime": "2015-12-29T23:40:15Z", "eventSource": "gamelift.amazonaws.com", "eventName": "CreateFleet", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.0", "userAgent": "[]", "requestParameters": { "buildId": "build-92b6e8af-37a2-4c10-93bd-4698ea23de8d", "eC2InboundPermissions": [ { "ipRange": "10.24.34.0/23", "fromPort": 1935, "protocol": "TCP", "toPort": 1935 } ], "logPaths": [ "C:\\game\\serverErr.log", "C:\\game\\serverOut.log" ], "eC2InstanceType": "c5.large", "serverLaunchPath": "C:\\game\\MyServer.exe", "description": "Test fleet", "serverLaunchParameters": "-paramX=baz", "name": "My_Test_Server_Fleet"

Version198

Page 205: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAmazon GameLift ログファイルエントリの概要

}, "responseElements": { "fleetAttributes": { "fleetId": "fleet-0bb84136-4f69-4bb2-bfec-a9b9a7c3d52e", "serverLaunchPath": "C:\\game\\MyServer.exe", "status": "NEW", "logPaths": [ "C:\\game\\serverErr.log", "C:\\game\\serverOut.log" ], "description": "Test fleet", "serverLaunchParameters": "-paramX=baz", "creationTime": "Dec 29, 2015 11:40:14 PM", "name": "My_Test_Server_Fleet", "buildId": "build-92b6e8af-37a2-4c10-93bd-4698ea23de8d" } }, "requestID": "824a2a4b-ae85-11e5-a8d6-61d5cafb25f2", "eventID": "c8fbea01-fbf9-4c4e-a0fe-ad7dc205ce11", "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }, { "eventVersion": "1.04", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::111122223333:user/myUserName", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "myUserName" }, "eventTime": "2015-12-29T23:40:15Z", "eventSource": "gamelift.amazonaws.com", "eventName": "DescribeFleetAttributes", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.0", "userAgent": "[]", "requestParameters": { "fleetIds": [ "fleet-0bb84136-4f69-4bb2-bfec-a9b9a7c3d52e" ] }, "responseElements": null, "requestID": "82e7f0ec-ae85-11e5-a8d6-61d5cafb25f2", "eventID": "11daabcb-0094-49f2-8b3d-3a63c8bad86f", "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }, ]}

Version199

Page 206: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドGameLift FleetIQ 機能

GameLift FleetIQ ガイド [パブリックプレビュー]

ゲームサーバーグループを持つ Amazon GameLift FleetIQ はプレビュー版であり、変更される可能性があります。マネージド型の GameLift の機能としての FleetIQ は変更されません。

GameLift FleetIQ は、クラウドベースのゲームホスティング用に低コストのスポットインスタンスの使用を最適化するサービスであり、これがスタンドアロン機能として使用できるようになりました。スポットインスタンスは、可用性が変動し、中断の可能性があるため、大幅な割引で提供される予備の AWS コンピューティング能力を使用します。ゲームホスティングは中断に特に敏感であるため、スポットインスタンスは必ずしも実行可能なオプションであるとは限りません。 GameLift FleetIQ は、ゲームサーバーへの中断の影響を最小限に抑えることで、スポットインスタンスをゲームホスティングに実行できるようにします。スタンドアロン機能として GameLift FleetIQ を使用すると、低コストで復元力の高いゲームホスティングをプレイヤーに提供する GameLift の最適化を最大限に活用しながら、Amazon EC2 および AutoScaling のホスティングリソースを直接操作することができます。

GameLift FleetIQ は、以下のユーザーにとって最適なゲームホスティングオプションです。

• 既存の AWS デプロイがあるユーザー、またはマネージド型の GameLift サービスを経由せずに直接Amazon EC2 を使用したいユーザー。GameLift FleetIQ は、AWS アカウントで管理されている AutoScaling グループと連携し、Amazon EC2 インスタンスおよびグループへのフルアクセスを提供します。Amazon Elastic Container Service、Amazon Elastic Kubernetes Service、AWS Shield アドバンスドなど、AWS の他のサービスと統合することもできます。

• 既存のオンプレミスのゲームホスティングがあり、容量をクラウドに拡張したいユーザー。GameLiftFleetIQ を使うと、既存のオンプレミス容量を活用するハイブリッドデプロイシステムを構築し、AWSクラウドの容量を必要に応じて徐々に追加できます。

GameLift FleetIQ 機能• 最適化されたスポットリバランシング。GameLift FleetIQ は、定期的にインスタンスタイプを評価

し、ゲームセッションの中断の可能性が高いため、実行不可とみなされたインスタンスを置き換えます。Auto Scaling グループが古いインスタンスを終了して新しいインスタンスを開始すると、グループはゲームホスティングで現在実行可能なインスタンスタイプで継続的に更新されます。

• 最適なプレーヤーのルーティング。 GameLift FleetIQ API は、ゲームセッションが中断される可能性が最も低いインスタンスにプレイヤーをルーティングします。また、ゲームセッションは少数のインスタンスにまとめられるため、不要なリソースをスケールダウンする Auto Scaling グループの能力が向上し、コスト削減につながります。

• プレーヤーの使用状況に基づく Auto Scaling。 GameLift FleetIQ は、ゲームサーバーの使用状況データを CloudWatch メトリクスとして出力します。これらのメトリクスを使用することで、実際のプレイヤーの需要に合わせて利用可能なホスティングリソースを自動的に測定し、ホスティングコストを削減します。

• AWS アカウントでの Amazon EC2 インスタンスの直接管理。 Amazon EC2 インスタンスと AutoScaling グループの完全な制御を維持します。つまり、インスタンス起動テンプレートをセットアップし、 Auto Scaling グループ設定を維持し、他の AWS のサービスと統合することができます。スポットリバランシングアクティビティの一環として、GameLift FleetIQ は一部の Auto Scaling グループプロパティを定期的に更新します。これらの設定を一時的に上書きしたり、必要に応じて GameLift FleetIQ のアクティビティを一時停止することができます。

Version200

Page 207: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

• さまざまなゲームサーバー用の実行可能ファイル形式のサポート。GameLift FleetIQは、Windows、Linux、コンテナ、Kubernetes など、現在 Amazon EC2 で実行されているすべての形式をサポートしています。サポートされているオペレーティングシステムとランタイムの一覧については、「Amazon EC2 のよくある質問」を参照してください。

• 複数のタイプのホスティングリソース。GameLift FleetIQ を使用すると、ゲームサーバーホスティング用の 50 を超えるインスタンスタイプにアクセスできます (利用可能な数はリージョン別に異なります)。これにより、ゲームサーバーを CPU、メモリ、ストレージ、およびネットワーク容量の適切な組み合わせとペアリングして、プレイヤーに最適なゲーム体験を提供できます。

• ワールドワイドのリーチ。GameLift FleetIQ は、現在、中国を含む 15 のリージョンで利用できます。この規模のリーチにより、プレイヤーの場所を問わず、最小限のゲームラグでゲームサーバーにアクセスできます。リージョンに関する詳細なリストについては、「GameLift Service Endpoints (Gamelift のサービスエンドポイント)」を参照してください。

GameLift FleetIQ の仕組みゲームサーバーグループを持つ Amazon GameLift FleetIQ はプレビュー版であり、変更される可能性があります。マネージド型の GameLift の機能としての FleetIQ は変更されません。

このトピックでは、GameLift FleetIQ スタンドアロンソリューションの一般的な概要について説明します。その他の GameLift ソリューションの詳細については、「Amazon GameLift とは? (p. 1)」を参照してください。

GameLift FleetIQ は、 Amazon EC2 および Auto Scaling で使用できるコンピューティングリソース管理ツールを補完するゲームホスティングレイヤーです。GameLift FleetIQ を使用すると、Amazon EC2 リソースの直接管理や Auto Scaling グループのキャパシティーの動的管理ができるほか、任意で他の AWSのサービスと統合できます。GameLift FleetIQ は、追加の論理層を提供することで、ゲームホスティング向けに低コストのスポットインスタンスを利用できるようにし、また、ゲームサーバーステータスの追跡や、有効なゲームサーバーへのプレイヤーのルーティングなどゲームホスティングタスクを管理します。

GameLift FleetIQ では、ゲームサーバーソフトウェアで Amazon マシンイメージ (AMI) や Amazon EC2起動テンプレートを作成することで、ホスティング用の Amazon EC2 インスタンスを通常通りに起動する準備を行います。また、Auto Scaling グループの構成設定を定義します。Auto Scaling グループを設定する準備ができたら、GameLift FleetIQ ゲームサーバーグループを作成します。このアクションによって、GameLift FleetIQ は、ゲームサーバーグループと対応する Auto Scaling グループの両方を作成し (起動テンプレートで定義されている AMI を使用)、2 つのグループをリンクするように求められます。

Auto Scaling グループを作成すると、Amazon EC2 および Auto Scaling リソースへのフルアクセスが可能になります。Auto Scaling グループの設定を変更したり、マルチレベルスケーリングポリシーやロードバランサーなどの任意の Auto Scaling 機能を追加したり、他の AWS のサービスと統合したりできます。グループ内のインスタンスに直接接続できます。GameLift FleetIQ は、インスタンスバランシングロジックの一部として特定の Auto Scaling グループプロパティを定期的に更新します。これらの値は短期間で自由に変更でき、いつでも GameLift FleetIQ アクティビティを一時的に中断することもできます。また、ゲームスケーリンググループを削除しても、対応する Auto Scaling グループは保持できるオプションがあります。

GameLift FleetIQ のロジック次の図は、ゲームホスティングを Amazon EC2 で操作する際の GameLift FleetIQ の役割を示しています。その主な目的は、ゲームセッションをホストし、プレイヤーに最適なゲームプレイ体験を提供するために最善のゲームサーバーを見つけることです。ゲームホスティングの場合、最善のリソースは、最も低いコストで最も高いホスティング有効性を提供するリソースとして定義されます。GameLift FleetIQは、Auto Scaling グループで最適なインスタンスタイプのみを許可する、およびグループの利用可能なリソース全体で効率よく新しいゲームセッションを配置するという 2 つの主要な方法でこの目的を達成します。

Version201

Page 208: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドGameLift FleetIQ のロジック

Version202

Page 209: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドGameLift FleetIQ のロジック

Auto Scaling グループに最適なインスタンスタイプを設定するAuto Scaling グループのジョブは、新しいインスタンスを起動して古いインスタンスの使用を中止することで、ホスティングリソースのコレクションを維持し、これをプレイヤーの需要に合わせてスケーリングすることです。ゲームサーバーグループを作成するときは、ゲームに必要なインスタンスタイプのリストを作成します。このリストは Auto Scaling グループに渡され、新しいインスタンスが起動されるたびに、このリストのインスタンスタイプが使用されます。GameLift FleetIQ は、Auto Scaling グループがどのように最適なインスタンスタイプを選択するかについて、次のような影響を与えます。

• Auto Scaling グループを設定するときに、GameLift FleetIQ は、低コストのスポットインスタンスのみを起動するようにグループを設定します。スポットインスタンスは予備のコンピューティングキャパシティーを使用します。これらのインスタンスは、可用性の変動や中断の可能性があるため、低コストとなります。GameLift FleetIQ は、ゲームサーバーホスティングに対するこのような制限を最低限に抑えます。利用可能なスポットインスタンスがない場合は、必要に応じてオンデマンドインスタンスを許可するように Auto Scaling グループを設定できます。

• GameLift FleetIQ は、ゲームサーバーグループのリストにあるスポットインスタンスタイプを定期的に評価し、ゲームホスティングの実行可能性を評価します。このプロセスでは、インスタンスタイプの最新の可用性と中断率を評価する予測アルゴリズムを使用します。ゲームサーバーの中断率が高すぎる場合、GameLift FleetIQ は、Auto Scaling グループの任意のインスタンスタイプのリストからこの無効なインスタンスタイプを削除します。

• GameLift FleetIQ は、現在無効なインスタンスタイプである Auto Scaling グループの既存インスタンスを特定します。該当するインスタンスには、「Draining (ドレイン中)」のフラグが付けられます。つまり、このようなインスタンスは終了され、新しいインスタンスに置き換えられます。ゲームサーバーの保護がオンになっているインスタンスの場合、アクティブなゲームセッションが正常に終了するまで終了が延期されます。

• GameLift FleetIQ は、Auto Scaling グループインスタンスが、望ましいインスタンスタイプのリストにあるすべての有効なインスタンスタイプでバランスよく構成されるようにします。さまざまなインスタンスタイプがあるグループは、耐障害性が高く、ホスティングの有効性に関する予期しない問題に対処できます。

Auto Scaling グループは、インスタンスを起動して終了することにより、低コストのスポットインスタンスタイプの可用性が変動しても、ゲームホスティング用に最適化されたコレクションを継続的に維持します。このプロセスの詳細については、「スポットの再調整プロセス (p. 207)」を参照してください。

ゲームセッションを効果的に配置するGameLift FleetIQ は、ゲームサーバーグループ内のすべてのアクティブなゲームサーバーを追跡し、この情報を使用して新しいゲームセッションとプレーヤーの最適な配置を決定します。

GameLift FleetIQ でゲームサーバーを追跡するには、そのステータスをゲームサーバーソフトウェアによって報告する必要があります。カスタム AMI は、各インスタンスでの新しいゲームサーバープロセスの開始と停止の方法を管理します。新しいゲームサーバーを起動すると、それが GameLift FleetIQ に登録され、ゲームセッションをホストする準備が整ったことを示します。登録後、ゲームサーバーは、その状態および現在ゲームセッションをホスティングしているかどうかを定期的にレポートします。ゲームサーバーがシャットダウンすると、GameLift FleetIQ が登録解除されます。

新しいゲームセッションを開始する場合は、ゲームクライアント (またはマッチメーカーや他のクライアントサービス) から GameLift FleetIQ に対して、ゲームサーバーへのリクエストが送信されます。GameLift FleetIQ は、利用可能なゲームサーバープロセスを見つけ、それを新しいゲームセッション用として要求し、ゲームサーバー ID と接続情報を返します。これに応じて、ゲームサーバーはそのステータスを更新し、参加プレイヤーの新しいゲームセッションを開始します。

新しいゲームセッションをホストするゲームサーバーを選択する場合、GameLift FleetIQ は次の決定プロセスを使用して、有効かつ低コストのスポットインスタンスの配置を最適化します。

1. GameLift FleetIQ は、ゲームホスティングに無効な「Draining (ドレイン中)」フラグが立ったインスタンスを無視します。これらのインスタンスは、既存のゲームセッションをサポートするためにだけに実

Version203

Page 210: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド主なリソースとコンポーネント

行されています。これらは、他のゲームサーバーが利用できない限り、新しいゲームセッションには使用できません。

2. GameLift FleetIQ は、有効なインスタンスで実行されているすべての利用可能なゲームサーバーを識別します。

3. 可能な場合、GameLift FleetIQ は、他のゲームセッションをすでにホストしているインスタンスに新しいゲームセッションを配置します。一部のインスタンスに集中させて (ただし、過負荷にはせず)、他のインスタンスをアイドル状態に保つことで、Auto Scaling グループは不要なアイドル状態のインスタンスを迅速にスケールダウンできるため、ホスティングコストが削減されます。

ゲームサーバーグループのゲームセッション保護をオンにすると、アクティブに実行中のゲームセッションで Auto Scaling グループがインスタンスを終了するのを防ぐことができます。

主なリソースとコンポーネントGameLift FleetIQ でゲームホスティングリソースをセットアップする前に、AWS アカウントで次のリソースを作成します。ベストプラクティスとして、ゲームサーバーグループで使用する前に、これらのリソースを使用してゲームサーバーのデプロイを開発してテストします。

• Amazon マシンイメージ (AMI)。 AMI は、Amazon EC2 インスタンスで起動する特定のソフトウェア設定のテンプレートです。ゲームホスティングの場合、AMI には、オペレーティングシステム、ゲームサーバーのバイナリまたはコンテナ、およびゲームサーバーに必要なその他のランタイムソフトウェアが含まれます。AMI の作成の詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイド の「Amazon マシンイメージ」を参照してください。AMI はリージョン固有です。AMI はリージョン間でコピーできます。詳細については、Amazon EC2 ユーザーガイドの「AMI のコピー」を参照してください。

• Amazon EC2 起動テンプレート。 起動テンプレートは、Auto Scaling グループ内のインスタンスを起動および管理するための手順を提供します。AMI を指定して、適切なインスタンスタイプのリストを提供し、ネットワーク、セキュリティ、およびその他のプロパティを設定します。起動テンプレートの作成の詳細については、Amazon EC2 ユーザーガイドの「 起動テンプレートからのインスタンスの起動」を参照してください。起動テンプレートはリージョン固有です。

• AWS IAM ロール。 IAM ロールは、AWS リソースへの制限付きアクセスを許可する一連のアクセス許可を定義します。別の AWS のサービスなどの信頼されたエンティティは、ロールを引き継ぎ、そのアクセス許可を継承できます。GameLift FleetIQ を使用するときは、GameLift FleetIQ が、AWS アカウントの Auto Scaling グループと EC2 インスタンスリソースを作成し、アクセスを許可するマネージドポリシーを使用して IAM ロールを指定する必要があります。IAM ロールはリージョン固有ではありません。

GameLift FleetIQ は、以下のリソースを直接管理し、これらのリソースに対する直接的な権限を保持します。

• GameLift ゲームサーバーグループ。ゲームサーバーグループには、低コストのゲームホスティングを提供するために GameLift FleetIQ と Auto Scaling グループを連携させる方法を定義する構成設定が含まれています。ゲームサーバーグループはリージョン固有です。リージョンでゲームサーバーグループを作成すると、同じリージョンの AWS アカウントに新しい Auto Scaling グループが自動的に作成されます。ゲームサーバーグループは Auto Scaling グループにリンクされ、その設定の一部を管理および変更するためのアクセス権を (IAM ロールを引き受けることによって) 付与されます。ゲームサーバーグループは寿命の長いリソースです。開発者がこれらのグループを頻繁に作成することはありません。ゲームサーバーグループは、Auto Scaling グループ内のインスタンスでホストされ、GameLift FleetIQ に登録されているゲームサーバーを機能別のグループに分けるリソースでもあります。

• GameLift ゲームサーバー。 ゲームサーバーリソースは、GameLift FleetIQ ゲームサーバーグループに関連付けられたインスタンスで実行されているゲーム実行を表します。このリソースは、ゲームサーバーが GameLift FleetIQ に登録されるときに作成され、それが属するゲームサーバーグループを識別します。GameLift FleetIQ は、登録された各ゲームサーバーの使用状況ステータスとクレームステータスを追跡します。これにより、ゲームサーバーの可用性をモニタリングできます。ゲームサーバーは、リー

Version204

Page 211: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームアーキテクチャ

ジョン固有のゲームサーバーグループに関連付けられるという点で、リージョン固有です。ゲームは、新しいゲームサーバーをリクエストするときに、ゲームサーバーグループとリージョンを指定します。

これらのリソースは、GameLift FleetIQ リソースを通じて作成されます。これらは AWS アカウントに作成され、ユーザーが完全に制御できます。

• Amazon EC2 Auto Scaling グループ。 Auto Scaling グループは、EC2 インスタンスのコレクションを起動および管理し、グループの容量を自動的にスケールします。GameLift FleetIQ では、ゲームサーバーグループと Auto Scaling グループの間に 1 対 1 の関係があります。Auto Scaling グループのすべての設定は更新できますが、GameLift FleetIQ はそのロジックの一環として特定の設定を定期的に上書きして更新し、ゲームホスティングに利用できるようにスポットインスタンスを調整します。詳細については、Amazon EC2 Auto Scaling ユーザーガイドの「AutoScalingGroup」を参照してください。AutoScaling グループはリージョン固有で、ゲームサーバーグループと同じリージョンに作成されます。

• Amazon EC2 インスタンス。 インスタンスは、クラウド内の仮想サーバーです。インスタンスタイプには、コンピューティング、メモリ、ディスク、およびネットワークリソースを指定する特定のハードウェア設定があります。通常、AMI を持つ Auto Scaling グループによって起動されます。インスタンスは、可用性に応じて、スポットまたはオンデマンドにすることができます。GameLift FleetIQ でのインスタンスは 1 つ以上のゲームサーバープロセスを実行します。各プロセスは複数のゲームセッションをホストできます。インスタンスは、リージョン固有の Auto Scaling グループに関連付けられるという点で、リージョン固有です。

GameLift FleetIQ のゲームアーキテクチャ

ゲームサーバーグループを持つ Amazon GameLift FleetIQ はプレビュー版であり、変更される可能性があります。マネージド型の GameLift の機能としての FleetIQ は変更されません。

オンプレミスホスティングの補完GameLift FleetIQ は、既存のゲームバックエンドを再利用するように設計されています。これには、設定済みであるプレイヤーの geo-IP ルーティング、マッチメイキング、またはロビーサービスも含まれます。次の例は、GameLift FleetIQ が既存のオンプレミスデプロイにどのように適合するかを示しています。

Example

この例では、北米と欧州のプレイヤーをホストするための 4 つの専用データセンターで、ゲームホスティングが最初に処理されます。おおよその物理的な位置に応じて、プレイヤーは 2 つのリージョンマッチメーカーのいずれかにルーティングされます。マッチメーカーは、プレイヤーをスキルとレイテンシーに基づいてグループ化し、ラグを最小限に抑えるために近くのゲームサーバーに配置します。

Version205

Page 212: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドオンプレミスホスティングの補完

ゲーム開発者は、北米のゲームサーバーを GameLift FleetIQ が提供するサーバーに置き換える必要があります。まず、ゲームサーバーを少し更新して GameLift FleetIQ で使用できるようにします。次に、Amazon マシンイメージ (AMI) を作成します。このイメージは、ゲーム用にデプロイされるすべてのEC2 インスタンスにインストールされます。イメージには、ゲームサーバー、依存関係、およびプレイヤーのゲームセッションを実行するために必要なあらゆるものが含まれています。

AMI の準備ができたら、開発者は AWS 北米リージョン (us-east-1 および us-west-2)) ごとに 1 つずつ、2 つの GameLift FleetIQ ゲームサーバーグループを作成します。開発者は AMI、必要なインスタンスタイプのリスト、グループのその他の設定を渡します。必要なインスタンスタイプのリストにより、ゲームホスティングに利用できるスポットインスタンスの検索に使用するタイプを GameLift FleetIQ に指示します。

最後に、開発者は AWS SDK と GameLift FleetIQ を北米のマッチメーカーとして統合しますが、これは新しいプレイヤーのグループがゲームセッションにサーバー容量を必要とするときに GameLift FleetIQ を呼び出します。GameLift FleetIQ は、使用可能なゲームサーバーがあるスポットインスタンスを検索し、これをプレイヤーのために予約して、サーバー接続情報を提供します。プレイヤーはサーバーに接続して、ゲームを実行し、切断します。新しいゲームを開始する場合、プレイヤーはマッチメイキングを再入力します。これに応じて、GameLift FleetIQ は別の利用可能なゲームサーバーを見つけます。GameLift FleetIQは、新しいゲームリクエストごとに反応し、中断の可能性が低いゲームサーバーを検索して選択します。その結果、GameLift FleetIQ は、スポットインスタンスの可用性が変動しても、ゲームホスティングに利用できないゲームサーバーから常にプレイヤーをリダイレクトします。

Version206

Page 213: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドライフサイクルと状態

GameLift FleetIQ のライフサイクルと状態

ゲームサーバーグループを持つ Amazon GameLift FleetIQ はプレビュー版であり、変更される可能性があります。マネージド型の GameLift の機能としての FleetIQ は変更されません。

スポットの再調整プロセスGameLift FleetIQ は、Auto Scaling グループ内のインスタンスを定期的に再調整します。このプロセスには、次の 2 つの重要な目標があります。

• その時点でゲームをホスティングするための有効性が高いスポットインスタンスタイプのみを使用して、グループを常に更新する。

• 複数の有効なインスタンスタイプを使用して (可能な場合)、予想外のゲームサーバー中断の影響を軽減する。

GameLift FleetIQ は、グループのインスタンスタイプを評価し、ゲームサーバーの中断を引き起こす可能性が高いインスタンスを削除することによって再調整を行います。再調整中にゲームプレイがアクティブになっているインスタンスが終了されないように、本番環境のゲームサーバーグループに対してゲームサーバーの保護を有効にすることをお勧めします。

Example

次の例は、スポットの再調整が Auto Scaling グループのインスタンスに与える影響を示しています。

Version207

Page 214: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドスポットの再調整プロセス

• ステップ 1. ゲームサーバーグループを介して、リンクされた Auto Scaling グループは、ゲームサーバーの保護が有効になっている m4.large、c4.large、c5.large の各タイプのインスタンスを起動するように設定されます。Auto Scaling グループは、各タイプの 2 つのスポットインスタンスで構成されるバランスの取れたコレクションを起動しました。4 つのインスタンスには UTILIZED 状態 (破線の境界線で表示)のゲームサーバーが少なくとも 1 つあり、2 つのインスタンスはゲームプレイを現在サポートしていません。

• ステップ 2. GameLift FleetIQ は、3 つすべてのインスタンスタイプについて、現在のゲームホスティングに利用できるかどうかを評価します。この評価により、c4.large インスタンスタイプは、ゲームサーバーの中断を引き起こすリスクが高すぎると判断されます。GameLift FleetIQ は Auto Scaling グループ設定を即座に更新して、インスタンスタイプのリストから c4.large を一時的に除外し、このタイプの他のインスタンスが起動されないようにします。

• ステップ 3. GameLift FleetIQ は、c4.large タイプの既存のインスタンスを識別し、これらをグループから除外するためのアクションを実行します。最初のステップとして、c4.large インスタンスで実行されているすべてのゲームサーバーにドレイン中のフラグが付けられます。ドレイン中のインスタンスのゲームサーバーは、他のゲームサーバーが使用できない場合の最終手段としてのみクレームできます。また、ドレイン中のインスタンスがある Auto Scaling グループはトリガーされ、新しいインスタンスが起動されてドレイン中のインスタンスと置き換えられます。

• ステップ 4. 新しい有効なインスタンスがオンラインになると、Auto Scaling グループはドレイン中のインスタンスを終了します。この置換により、グループの必要な容量が維持されます。最初に終了されるインスタンスは、使用中のゲームサーバーがなく、ゲームサーバーの保護がオフになっている c4.largeインスタンスです。これは、新しい c5.large インスタンスに置き換えられます。

• ステップ 5. ゲームサーバーの保護が有効になっているドレイン中のインスタンスは、ゲームサーバーがゲームプレイをサポートしている間は引き続き実行されます。ゲームプレイが終了すると、残存していた c4.large インスタンスは、新しい m4.large インスタンスの起動時に置き換えられます。

このプロセスの結果として、Auto Scaling グループは必要な容量を維持し、グループが使用するインスタンスタイプの数は 3 つから 2 つに再調整されます。GameLift FleetIQ は、引き続き元のインスタンスタイプのリストを評価し、ゲームホスティングに利用できるかどうかを確認します。c4.large が再び有効なインスタンスタイプと見なされると、Auto Scaling グループが 3 つのインスタンスタイプすべて含むよう更新されます。グループは経時的に自然と再調整されます。

Version208

Page 215: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームサーバーグループの寿命

ゲームサーバーグループの寿命ゲームサーバーグループは、プロビジョニングやステータスの更新を含む、次のライフサイクルを経過します。ゲームサーバーグループは、寿命の長いリソースと想定されます。

• ゲームサーバーグループを作成するには、GameLift API CreateGameServerGroup() を呼び出し、EC2 起動テンプレートと構成設定を渡します。呼び出しに応じて、新しいゲームサーバーグループが作成され、ステータスが NEW に設定されます。

• GameLift FleetIQ は非同期アクティベーションワークフローをアクティブ化し、ゲームサーバーグループのステータスを ACTIVATING に移行させます。このワークフローでは、Amazon EC2 Auto Scaling グループや、AMI が指定された EC2 インスタンスなど、基盤となるリソースの作成を開始します。• 何らかの原因でプロビジョニングが失敗すると、ゲームサーバーグループのステータスは ERROR に

なります。エラーの原因のデバッグに役立つ追加のエラー情報を取得するには、エラー状態のゲームサーバーグループで DescribeGameServerGroup() を呼び出します。

• プロビジョニングが成功すると、ゲームサーバーグループのステータスは ACTIVE に移行します。この時点で、GameLift FleetIQ に登録されたゲームサーバーを使用してインスタンスが起動されます。グループのインスタンスタイプは、ゲームホスティングに利用できるかどうかが定期的に評価され、必要に応じて再調整されます。GameLift FleetIQ は、グループ内のアクティブなゲームサーバーのステータスを追跡し、ゲームサーバーに対するリクエストに応答します。

• ゲームサーバーグループを削除するには、グループ識別子を使用して DeleteGameServerGroup()を呼び出します。このアクションにより、ゲームサーバーグループのステータスはDELETE_SCHEDULED になります。削除対象となるのは、ACTIVE 状態または ERROR 状態のゲームサーバーグループのみです。

• GameLift FleetIQ は、DELETE_SCHEDULED ステータスに応じて非同期の非アクティブ化ワークフローをアクティブ化し、ゲームサーバーグループのステータスを DELETING に移行させます。ゲームサーバーグループのみを削除するか、ゲームサーバーグループとリンクされた Auto Scaling グループの両方を削除するかを選択できます。• 何らかの原因で非アクティブ化が失敗すると、ゲームサーバーグループのステータスは ERROR に

なります。エラーの原因のデバッグに役立つ追加のエラー情報を取得するには、エラー状態のゲームサーバーグループで DescribeGameServerGroup() を呼び出します。

• 非アクティブ化に成功すると、ゲームサーバーグループのステータスは DELETED に移行します。

ゲームサーバーの寿命GameLift FleetIQ のゲームサーバーは、プロビジョニングやステータスの更新を含む、次のライフサイクルを経過します。ゲームサーバーは寿命が短いリソースと想定されます。ゲームサーバーは、ゲームセッションの終了後に再利用せずに登録解除することをお勧めします。これにより、ゲームサーバーグループ

Version209

Page 216: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームサーバーの寿命

が継続的に更新され、使用可能なゲームサーバーは、ゲームホスティングのために最低コストで利用できるリソースで常に実行されます。

• ゲームサーバーリソースが作成されるのは、GameLift FleetIQ にリンクされた Auto Scaling グループのインスタンスで実行されているゲームサーバープロセスが GameLift API RegisterGameServer() を呼び出して、プレイヤーとゲームプレイをホストする準備が整っていることを GameLift FleetIQ に通知した時点です。ゲームサーバーには、現在の可用性を追跡するための 2 つのステータスがあります。• 使用状況ステータスは、ゲームサーバーがゲームプレイを現在サポートしているかどうかを追跡し

ます。このステータスは最初に AVAILABLE に設定され、新しいゲームプレイを受け入れる準備ができていることを示します。ゲームサーバーがゲームプレイに使用されると、このステータスはUTILIZED に設定されます。

• クレームステータスは、ゲームサーバーが目前のゲームプレイにクレームされているかどうかを追跡します。CLAIMED ステータスのゲームサーバーは、ゲームクライアント (またはマッチメーカーなどのゲームサービス) によって一時的に予約されていることを示します。このステータスにより、GameLift FleetIQ は同じゲームサーバーを複数のリクエスタに提供することを禁じられます。クレームステータスが空白になっているゲームサーバーは、クレームすることができます。

• 次の図は、ゲームサーバーの存続期間中に変わる使用状況ステータスとクレームステータスを示しています。

• ステップ 1. ゲームサーバーグループには、6 つのゲームサーバーが登録されています。使用状況ステータスは、4 つのゲームサーバーが AVAILABLE (A、B、C、および D)、2 つのゲームサーバーがUTILIZED (E および F) です。

• ステップ 2. ゲームクライアントまたはマッチメイキングシステムは GameLift APIClaimGameServer() を呼び出して新しいゲームサーバーをリクエストします。このリクエストは、

Version210

Page 217: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドセットアップ

利用可能なゲームサーバー (D) を検索し、クレームステータスを 60 秒間 CLAIMED に設定するようGameLift FleetIQ に促します。 GameLift FleetIQ は、ゲームサーバーの接続情報 (IP アドレスとポート)、およびその他オプションのゲーム固有のデータを使用してリクエストに応答します。ゲームプレイはまだゲームサーバーで開始されていないため、その使用状況ステータスは AVAILABLE のままですが、別のリクエストによってクレームすることはできません。

• ステップ 3a. ゲームクライアントは、提供された接続情報を使用してゲームサーバーに接続し、ゲームプレイを開始できます。ゲームサーバー (D) は、60 秒以内にトリガーすることで、GameLift APIUpdateGameServer() を呼び出して使用状況ステータスを UTILIZED に変更する必要があります。

• ステップ 3b. ゲームサーバーの使用状況ステータスが 60 秒以内に更新されない場合、クレームタイマーの有効期限が切れて、クレームステータスが空白にリセットされます。ゲームサーバー (D) は、クレームされていない、使用可能なゲームサーバーのプールに戻されます。

• ゲームサーバーのゲームプレイが完了して、プレイヤーが切断されると、ゲームサーバーリソースは削除されます。シャットダウンの前に、ゲームサーバープロセスは GameLift APIDeregisterGameServer() を呼び出して、ゲームサーバープールからのゲームサーバーの離脱をGameLift FleetIQ に通知します。

GameLift FleetIQ のセットアップゲームサーバーグループを持つ Amazon GameLift FleetIQ はプレビュー版であり、変更される可能性があります。マネージド型の GameLift の機能としての FleetIQ は変更されません。

このセクションでは、Amazon GameLift FleetIQ サービス用にゲームを設定するための主要な手順について説明します。GameLift FleetIQ を Amazon EC2 および Auto Scaling と併用して、マルチプレイヤーゲームをホストするために必要なツールを入手する方法が含まれています。

トピック• GameLift FleetIQ SDK とプラットフォーム (p. 211)• GameLift FleetIQ 用の AWS アカウントの設定 (p. 212)

GameLift FleetIQ SDK とプラットフォームAmazon EC2 リソース GameLift FleetIQ で使用する64 ビット、マルチプレイヤーゲームサーバー、クライアント、およびゲームサービスを作成し、デプロイします。

SDK サポート

GameLift API を使用する AWS SDK には、ゲームサーバーとクライアントが GameLift FleetIQ サービスと通信できるようにする機能が含まれており、GameLift がゲームセッションとプレーヤーの配置を最適化します。AWS SDK をダウンロードするか、Amazon GameLift API リファレンスドキュメントを参照してください。

Amazon GameLift の AWS SDK は以下の言語で利用可能です。開発環境のサポートの詳細については、各言語のドキュメントを参照してください。

• C++ (SDK ドキュメント) (Amazon GameLift)• Java (SDK ドキュメント) (Amazon GameLift)• .NET (SDK ドキュメント) (Amazon GameLift)• Go (SDK ドキュメント) (Amazon GameLift)• Python (SDK ドキュメント) (Amazon GameLift)• Ruby (SDK ドキュメント) (Amazon GameLift)• PHP (SDK ドキュメント) (Amazon GameLift)

Version211

Page 218: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAWS アカウントの設定

• JavaScript/Node.js (SDK ドキュメント) (Amazon GameLift)

オペレーティングシステムと開発環境

GameLift FleetIQ では、EC2 で実行可能なあらゆるオペレーティングシステム、エンジンおよびプログラム言語をサポートしています。Amazon EC2 では現在、Amazon Linux、Ubuntu、Windows Server、RedHat Enterprise Linux、SUSE Linux Enterprise Server、Fedora、Debian、CentOS、Gentoo Linux、OracleLinux、FreeBSD などのさまざまなオペレーティングシステムをサポートしています。

ゲームサーバーをホストし、Unreal、Unity、カスタムゲームエンジンで開発されたゲームクライアントとクライアントサービスおよび、C++、C#、AWS SDK でサポートされる他の言語で書かれたゲームサーバーを統合することができます。

GameLift FleetIQ では、Kubernetes、Amazon Elastic Container Service (Amazon ECS)、Amazon ElasticKubernetes Service (EKS) を持つコンテナをサポートしています。

GameLift FleetIQ 用の AWS アカウントの設定

ゲームサーバーグループを持つ Amazon GameLift FleetIQ はプレビュー版であり、変更される可能性があります。マネージド型の GameLift の機能としての FleetIQ は変更されません。

Amazon EC2 や Auto Scaling などの AWS のサービスで GameLift FleetIQ を使用する場合、AWS Identityand Access Management を使用してサービス間のアクセス許可を管理します。GameLift FleetIQ 用のAWS アカウントを設定するには、次の手順を実行します。

• GameLift FleetIQ で使用する AWS アカウントを作成します。• ゲームに関連する AWS のサービスを使用するユーザーおよびユーザーグループの IAM アクセス許可を

設定します。• Amazon EC2 インスタンスや Auto Scaling グループとやり取りするための制限されたアクセス許可を

GameLift に付与するマネージド IAM ロールを作成します。

Amazon GameLift で使用するためのアカウントを取得するAmazon Web Services を開き、[Sign In to the Console (コンソールにサインイン)] を選択します。プロンプトに従って新しいアカウントを作成するか、既存のアカウントにサインインします。

IAM ユーザーおよびユーザーグループポリシーを更新するユーザーが GameLift FleetIQ ゲームサーバーグループや関連する Amazon EC2 サービスと Auto Scalingサービスを使用する場合は、これらのサービスの関連するアクションにアクセスする必要があります。アクセスを提供するには、AWS Identity and Access Management (IAM) でユーザーまたはユーザーグループを作成します。

IAM コンソールを開き、ゲームのユーザーまたはユーザーグループのセットを定義します。コンソール(または AWS CLI やその他のツール) を使用してユーザーグループをセットアップする方法の詳細については、「IAM ユーザーの作成」を参照してください。アクセス許可をユーザーまたはユーザーグループに拡張するには、IAM ポリシーをアタッチします。このポリシーは、ユーザーがアクセスできる一連の AWSのサービスおよびアクションを指定します。次の構文を使用してインラインカスタムポリシーを作成し、各ユーザーまたはユーザーグループにアタッチします。

GameLift FleetIQ_policy

{ "Version": "2012-10-17",

Version212

Page 219: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAWS アカウントの設定

"Statement": [ { "Action": [ "iam:PassRole" ], "Effect": "Allow", "Resource": "*" }, { "Action": [ "iam:CreateServiceLinkedRole" ], "Effect": "Allow", "Resource": "arn:*:iam::*:role/aws-service-role/autoscaling.amazonaws.com/AWSServiceRoleForAutoScaling" }, { "Action": [ "autoscaling:CreateAutoScalingGroup", "autoscaling:DescribeAutoScalingGroups", "autoscaling:PutLifecycleHook", "autoscaling:PutScalingPolicy", "autoscaling:UpdateAutoScalingGroup", "autoscaling:DeleteAutoScalingGroup" ], "Effect": "Allow", "Resource": "*" }, { "Action": [ "ec2:DescribeLaunchTemplates", "ec2:DescribeLaunchTemplateVersions", "ec2:RunInstances" ], "Effect": "Allow", "Resource": "*" }, { "Action": [ "events:EnableRule", "events:PutRule", "events:PutTargets" ], "Effect": "Allow", "Resource": "*" } ] }

IAM サービスロールの作成スポットの再調整アクティビティの一環として、GameLift FleetIQ は、GameLift FleetIQ ゲームサーバーグループにリンクされている Auto Scaling グループ、インスタンス、ライフサイクルフックにアクセスして変更する必要があります。そのために、これらのアクションへの制限されたアクセス許可を GameLift に付与する IAM ロールを作成します。詳細については、IAM ユーザーガイドの「AWS のサービス用のロールの作成」を参照してください。

AWS CLI

次の手順では、AWS CLI を使用して必要なロールを作成する方法を示します。

1. 信頼ポリシー用とアクセス許可ポリシー用の 2 つの JSON ファイルを作成します。次に示す構文をコピーします。

Version213

Page 220: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAWS アカウントの設定

2. 新しい IAM ロールを作成し、これを信頼ポリシー JSON に関連付けます。

aws iam create-role --role-name Role-for-GameLift --assume-role-policy-document file://C:\policies\trustpolicyforGameLift.json

Linux で作業をしている場合は、file://policies/trustpolicyforfiesta.json のようにJSON ファイルを参照します。

3. アクセス許可ポリシー JSON で IAM ロールを更新します。

aws iam put-role-policy --role-name Test-Role-for-Fiesta --policy-name Permissions-Policy-For-GameLift --policy-document file://C:\policies\permissionspolicyforGameLift.json

Linux で作業をしている場合は、file://policies/permissionspolicyforfiesta.jsonのように JSON ファイルを参照します。

4. IAM ロールの設定が正しいかどうかをテストするには、CreateGameServerGroup API を呼び出して IAM ロールを渡します。GameServerGroup が ACTIVE 状態になると、GameLift FleetIQはアカウントの AWS リソースを正常に変更できます。

信頼ポリシーの構文

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "gamelift.amazonaws.com", "autoscaling.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

アクセス許可ポリシーの構文

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:TerminateInstances", "Resource": "*", "Condition": { "StringEquals": { "ec2:ResourceTag/GameLift": "GameServerGroups" } } }, { "Effect": "Allow", "Action": [ "autoscaling:CompleteLifecycleAction", "autoscaling:ResumeProcesses", "autoscaling:EnterStandby", "autoscaling:SetInstanceProtection",

Version214

Page 221: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

"autoscaling:UpdateAutoScalingGroup", "autoscaling:SuspendProcesses", "autoscaling:DetachInstances" ], "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/GameLift": "GameServerGroups" } } }, { "Effect": "Allow", "Action": [ "ec2:DescribeImages", "ec2:DescribeInstances", "autoscaling:DescribeAutoScalingGroups", "ec2:DescribeLaunchTemplateVersions" ], "Resource": "*" }, { "Effect": "Allow", "Action": "sns:Publish", "Resource": [ "arn:aws:sns:*:*:ActivatingLifecycleHookTopic-*", "arn:aws:sns:*:*:TerminatingLifecycleHookTopic-*" ] } ]}

GameLift FleetIQ の開始方法

ゲームサーバーグループを持つ Amazon GameLift FleetIQ はプレビュー版であり、変更される可能性があります。マネージド型の GameLift の機能としての FleetIQ は変更されません。

GameLift FleetIQ の使用を開始するには、オンプレミス環境または EC2 環境のいずれかで動作するゲームサーバーが必要です。ゲームサーバーは、1 つまたは複数のゲームセッションを管理したり、子プロセスを生成したり、コンテナ内で実行したりする単一のプロセスにすることができます。

1. AWS アカウントを取得する。

すでに 1 つ以上の AWS アカウントがある場合は、GameLift FleetIQ に使用する AWS アカウントを選択します。このアカウントとユーザー / ユーザーグループには、ゲームで使用される AmazonEC2、Auto Scaling およびその他の AWS リソースを管理するためのアクセス許可が必要です。詳細については、「IAM ユーザーおよびユーザーグループポリシーを更新する (p. 212)」を参照してください。この入門ガイドの後半では、サービス間で アクセス許可を管理する IAM ロールを作成します。

2. GameLift FleetIQ 機能を使用して AWS SDK および AWS CLI を取得する。• AWS SDK の最新バージョンをダウンロードします。• AWS Command Line Interface ツールを取得してインストールします。• Amazon GameLift API リファレンスドキュメントを確認します。

3. GameLift FleetIQ で使用するゲームサーバーを準備する。

AWS SDK をゲームサーバーに統合し、次の 3 つの API を実装します。

Version215

Page 222: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

• RegisterGameServer(): ゲームサーバープロセスの開始時に 1 度呼び出されます。• UpdateGameServer(): 健康状態とゲームサーバー内のプレイヤーの存在を報告するために定期的に呼

び出されます。• DeregisterGameServer(): ゲームサーバーが終了したときに1 度呼び出されます。

これらの API は、(ホストプレイヤーで使用できるかまたは使用されているかに関係なく) ゲームサーバーの状態についての最新情報を GameLift FleetIQ に提供します。この情報を使用して、GameLiftFleetIQ は、有効で未使用のゲームサーバーのリストをマッチメーキングシステムに提供し、また、プレイヤーが存在するインスタンスをリバランシング中に終了しないようにします。その他のガイダンスと例については、「the section called “ゲームサーバーの統合” (p. 217)」を参照してください。

4. ゲームサーバーで EC2 Amazon マシンイメージ (AMI) を作成する。

ゲームサーバーソフトウェアと、その他のランタイムアセットまたは設定を使用して AMI を作成します。ヘルプについては、Amazon EC2 ユーザーガイドの「Amazon マシンイメージ (AMI)」を参照してください。

5. EC2 起動テンプレートを作成する。

カスタム AMI を使用し、ホスティングリソースのネットワークとセキュリティ設定を定義する EC2 起動テンプレートを作成します。インスタンスタイプは後で含めるので、起動テンプレートにインスタンスタイプを含める必要はありません。ヘルプについては、Amazon EC2 ユーザーガイドの「起動テンプレートの作成」を参照してください。デバッグタスクを簡素化するため、起動テンプレートと AMI をテストするための Auto Scaling グループを、GameLift FleetIQ で使用する前に直接作成することを強くお勧めします。

6. IAM ロールを作成します。

GameLift サービスに、アカウントの Auto Scaling グループを作成および更新するアクセス許可を付与します。GameLift FleetIQ は、この IAM ロールを使用して、インスタンスタイプの李バランシングの一環として、Auto Scaling グループでインスタンスを更新します。追加手順と IAM ポリシー構文に関しては、「GameLift FleetIQ 用の AWS アカウントの設定 (p. 212)」を参照してください。

7. GameLift FleetIQホスティングリソースを設定する。

ゲームサーバーをデプロイする各リージョンで、CreateGameServerGroup() を呼び出してゲームサーバーグループを作成します。起動テンプレート (カスタム AMI とネットワークとセキュリティ設定を含む)、IAM ロール、およびゲームを実行できるインスタンスタイプのリストを渡します。このアクションでは、GameLift FleetIQ が修正できる AWS アカウントに Auto Scaling グループをセットアップします。その他のガイダンスと例については、「ゲームサーバーグループの作成と更新 (p. 219)」を参照してください。

8. GameLift FleetIQ をゲームクライアントに統合する。

ゲームサーバー容量を割り当てるゲームクライアント、マッチメーカー、またはその他のバックエンドコンポーネントに AWS SDK を追加します。ゲームのタイプに応じて、マッチメーカーはListGameServers() または ClaimGameServer() を呼び出して、サーバーの容量を取得し、利用可能なゲームサーバーを予約することができます。その他のガイダンスと例については、「GameLift FleetIQをゲームクライアントに統合する (p. 218)」を参照してください。

9. Auto Scaling グループをスケールアップする。

Auto Scaling グループでインスタンスがプロビジョニングされると、インスタンスはゲームサーバーを起動します。その後、各ゲームサーバーは、離島可能な容量として GameLift FleetIQ に登録され、後で、マッチメーカーがリストまたは要求します。

10.ゲームをテストする。

マッチメーカーを呼び出し、ListGameServers または ClaimGameServer を呼び出して、サーバーの容量を要求します。結果の IP とポートをゲームクライアントに渡して、ゲームサーバーに接続できるようにします。

Version216

Page 223: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームサーバーの統合

GameLift FleetIQ をゲームサーバーに統合する

ゲームサーバーグループを持つ Amazon GameLift FleetIQ はプレビュー版であり、変更される可能性があります。マネージド型の GameLift の機能としての FleetIQ は変更されません。

ゲームサーバープロセスが起動され、ライブゲームプレイをホストする準備ができたら、RegisterGameServer() を呼び出して GameLift FleetIQ に登録する必要があります。登録することで、GameLift FleetIQ サーバー容量に対するマッチングメイキングシステムリクエストに応答できます。応答には、ゲームホスティングに対して実行できるスポットインスタンスで利用可能なゲームサーバー容量が含まれます。登録時、ゲームサーバーは、受信クライアント接続に使用するポートや IP アドレスなど、関連するゲームサーバーのデータと接続情報を GameLift FleetIQ に提供できます。

aws gamelift register-game-server \ --game-server-id UniqueId-1234 \ --game-server-group-name MyLiveGroup \ --instance-id i-1234567890 \ --connection-info "1.2.3.4:123" \ --game-server-data "{\"key\": \"value\"}"

登録後、GameLift FleetIQ 状態の同期を保つため、ゲームサーバーは定期的にその正常性、またプレーヤーによって使用されているかどうかを報告する必要があります。正常性と使用率のステータスを報告するには、UpdateGameServer() を呼び出します。以下の例では、ゲームサーバーが正常であり、まだプレーヤーやゲームプレイによって占有されていないことが報告されています。

aws gamelift update-game-server \ --game-server-group-name MyLiveGroup \ --game-server-id UniqueId-1234 \ --health-check HEALTHY \ --utilization-status AVAILABLE

マッチメイキングシステムがサーバー容量を要求すると、ClaimGameServer() を呼び出して、ゲームホスティングに有効なスポットインスタンスで利用可能なゲームサーバーを探すよう GameLift FleetIQ を促します。応答により、クレームステータスが 60 秒間 CLAIMED に設定されている GameServer リソースが特定されます。また、クライアントからゲームサーバーへの接続に使用できる接続情報とゲームデータが含まれている場合もあります。

ゲームは、プレイヤーが接続してゲームプレイを開始した後にゲームサーバーのステータスを更新するゲームクライアント、クライアントサービス、またはゲームサーバーによってトリガーされるメカニズムが必要です。これは、使用ステータスが UTILIZED に設定された UpdateGameServer() を呼び出すことで実行できます。このステータスは、ゲームがゲームプレイをサポートしていることを示します。このメカニズムは、GameLift FleetIQ が、ゲームサーバー容量に対する後続の要求に応じてこのゲームサーバーを提供しないようにするためのものです。

aws update-game-server \ --game-server-group-name MyLiveGroup \ --game-server-id UniqueId-1234 \ --health-check HEALTHY \ --utilization-status UTILIZED

ゲームが終了すると、ゲームサーバーは DeregisterGameServer() を使用して GameLift FleetIQ から登録を解除する必要があります。

aws deregister-game-server \ --game-server-group-name MyLiveGroup \ --game-server-id UniqueId-1234

Version217

Page 224: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームクライアントの統合

GameLift FleetIQ をゲームクライアントに統合する

ゲームサーバーグループを持つ Amazon GameLift FleetIQ はプレビュー版であり、変更される可能性があります。マネージド型の GameLift の機能としての FleetIQ は変更されません。

ゲームクライアントまたはマッチメーカーがプレイヤーのゲームサーバーリソースをリクエストできるようにするメソッドを作成します。作成する方法にはいくつかのオプションがあります。

• 利用可能なすべてのゲームサーバーをリクエストし、使用するサーバーを選択します (「リスト&ピック」とも呼ばれます)。

• GameLift FleetIQ が利用可能なゲームサーバーを選択します。

リスト&ピックメソッドを使用するには、ListGameServers() を呼び出して、ゲームクライアントまたはマッチメーカーが利用可能なゲームサーバーのリストを要求するようにします。ゲームサーバーのデータを使用して、プレイヤーやマッチメーカーがゲームサーバーを選択する際に使用できる追加情報を提供することができます。ページ分割された結果をリクエストし、カスタムソートキーを使用して結果を返す方法を制御できます。次のリクエストは、指定されたゲームサーバーグループ内のアクティブで利用可能なすべてのゲームサーバーを返します。

aws gamelift list-game-servers \ --game-server-group-name MyLiveGroup

プレイヤーまたはマッチメーカーは、適切なゲームサーバーを選択し、特定のゲームサーバー ID でClaimGameServer() を呼び出すことによってそれをクレームすることができます。このシナリオでは、GameLift FleetIQ はインスタンスタイプの最適化ロジックを実行しません。

aws GameLift FleetIQ claim-game-server \ --game-server-group-name MyLiveGroup \ -–client-token 12345 \ --game-server-id UniqueId-1234

GameLift FleetIQ に使用可能なゲームサーバーを選択させるには、ゲームサーバー ID を指定せずにClaimGameServer () を呼び出します。このシナリオでは、GameLift FleetIQ は、ゲームホスティング用に有効で、Auto Scaling 用に最適化されたインスタンス上のゲームサーバーを検出するロジックを実行します。

aws GameLift FleetIQ claim-game-server \ --game-server-group-name MyLiveGroup \ -–client-token 12345

クレームリクエストへの応答で、GameLift FleetIQ は、クライアントがゲームサーバーに接続するために使用できる GameServer リソース、接続情報、ゲームデータを特定します。ゲームサーバーの要求ステータスは、60 秒間 [CLAIMED (クレーム済み)] に設定されます。ゲームは、プレイヤーが接続してゲームプレイを開始した後にゲームサーバーのステータスを更新するゲームクライアント、クライアントサービス、またはゲームサーバーによってトリガーされるメカニズムが必要です。これは、使用ステータスがUTILIZED に設定された UpdateGameServer() を呼び出すことで実行できます。このステータスは、ゲームがゲームプレイをサポートしていることを示します。このメカニズムは、GameLift FleetIQ が、ゲームサーバー容量に対する後続の要求に応じてこのゲームサーバーを提供しないようにするためのものです。

aws update-game-server \ --game-server-group-name MyLiveGroup \ --game-server-id UniqueId-1234 \ --health-check HEALTHY \

Version218

Page 225: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドゲームサーバーグループの作成と更新

--utilization-status UTILIZED

ゲームサーバーグループの作成と更新

ゲームサーバーグループを持つ Amazon GameLift FleetIQ はプレビュー版であり、変更される可能性があります。マネージド型の GameLift の機能としての FleetIQ は変更されません。

ゲームサーバーグループを作成するには CreateGameServerGroup() を呼び出します。次の例では、AutoScaling グループに c4.large および c5.large インスタンスタイプを指定し、グループをスポットインスタンスのみに制限する GameServerGroup が作成されます。短いプロビジョニング期間が経過すると、AutoScalingGroup リソースが作成され、 GameServerGroup が ACTIVE 状態になります。

aws gamelift create-game-server-group \ --game-server-group-name MyLiveGroup \ --role-arn arn:aws:iam:: 123456789012 :role/ GameLiftGSGRole \ --min-size 1 \ --max-size 10 \ --game-server-protection-policy FULL_PROTECTION \ --balancing-strategy SPOT_ONLY \ --launch-template LaunchTemplateId=lt-012ab345cde6789ff \ --instance-definitions '[{"InstanceType": "c4.large"}, {"InstanceType": "c5.large"}]' \ --auto-scaling-policy '{"TargetTrackingConfiguration": {"TargetValue": 66}}'

Auto Scaling グループのインスタンスタイプのプロパティは GameLift FleetIQ によって定期的に上書きされるため、Auto Scaling グループで直接更新しないでください。GameLift FleetIQ が上書きするプロパティを更新するには、UpdateGameServerGroup() を呼び出します。ゲームサーバーグループに変更が加えられた後、GameLift FleetIQ は変更を Auto Scaling グループに伝達します。MinSize、MaxSize、LaunchTemplate などその他のプロパティは、Auto Scaling グループ上で直接変更できます。

以下の例では、インスタンスタイプが c4.xlarge および c5.xlarge インスタンスタイプに切り替わるよう更新されています。

aws fiesta update-game-server-group \ --game-server-group-name MyLiveGroup \ --instance-definitions '[{"InstanceType": "c4.xlarge"}, {"InstanceType": "c5.xlarge"}]'

GameLift FleetIQ のベストプラクティスゲームサーバーグループを持つ Amazon GameLift FleetIQ はプレビュー版であり、変更される可能性があります。マネージド型の GameLift の機能としての FleetIQ は変更されません。

GameLift FleetIQ は、ゲームホスティング用の低コストの Amazon EC2 リソースを管理するために役立つ低レベルの論理層です。GameLift FleetIQ は、ゲームホスティングに有効なスポットインスタンスのみを含むようゲームサーバーグループを最適化し、ゲームセッションが中断される可能性を最小限に抑えます。また、基本的なゲームホスティング機能により、利用可能なゲームサーバーを追跡し、できるだけ低コストで利用できるゲームサーバーにゲームプレイをルーティングします。

スタンドアロン機能としての GameLift FleetIQ では、完全 GameLift マネージドソリューションで提供されるアドバンスト機能 (FleetIQ も使ってホスティングコストを最小化する) を提供しません。マッチメイキング、レイテンシーベースのプレイヤールーティング、ゲームセッションとプレイヤーのセッション管理、バージョン管理などの機能が必要な場合は、 GameLift マネージドソリューションをご覧ください。

Version219

Page 226: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドベストプラクティス

GameLift FleetIQ を最大限に活用するために役立ついくつかのベストプラクティスを以下に紹介します。

• セッションベースのゲームに GameLift FleetIQ を使用します。 GameLift FleetIQ は、ゲームセッションの中断の可能性が最も低いインスタンスにプレイヤーを常にルーティングする場合に最適です。寿命の長いセッションを保持すると、GameLift FleetIQ の再調整プロセスが妨げられ、ゲームセッションが中断される可能性が高くなります。理想的なワークフローは、プレイヤーがマッチメイキング (またはサーバー選択) からゲームプレイに移行することです。ゲームが終了すると、プレイヤーはマッチメイキングに戻り、新しいインスタンスの別のゲームサーバーにルーティングされます。GameLift FleetIQは、セッションが 2 時間未満のゲームに使用することをお勧めします。

• さまざまなインスタンスタイプを提供し、選択できるようにします。 ゲームサーバーグループを設定する際に、使用するインスタンスタイプのリストを指定します。含めるインスタンスタイプが多いほど、GameLift FleetIQ で有効性の高いスポットインスタンスをゲームホスティングに利用するための柔軟性が増します。たとえば、同じインスタンスファミリー(c5.large、c5.xlarge、c5.2xlarge、c5.4xlarge) 内の複数のサイズをリストすることができます。インスタンスを大きくすると、各インスタンスでより多くのゲームサーバーを実行できるため、コストが削減される可能性があります。インスタンスを小さくすると、自動スケーリングがプレイヤーの需要の変化に迅速に対応できます。望ましいインスタンスタイプのリストには優先順位が付けられていません。Auto Scaling グループは、有効なインスタンスタイプをバランス良く使用してグループの障害耐性を維持します。

• すべてのインスタンスタイプでゲームをテストします。 ゲームサーバーグループに設定したすべてのインスタンスタイプで、ゲームサーバーが正しく動作していることを確認します。

• インスタンス容量の重み付けを使用します。 一連のインスタンスサイズ(c5.2xlarge、c5.4xlarge、c5.12xlarge など) を使用するようにゲームサーバーグループを構成する場合は、各インスタンスタイプの容量加重情報を含めます。詳細については、Amazon EC2 Auto Scalingユーザーガイド の「Amazon EC2 Auto Scaling のインスタンスの重み付け」を参照してください。

• GameLift FleetIQ を使用してゲームセッションを配置します。 ゲームサーバーを使用するプレイヤーのグループを配置する場合は、GameLift API ClaimGameServer() を使用します。GameLift FleetIQ は、ゲームセッションの中断の可能性が高いインスタンスへのプレイヤーの配置を回避します。

• ゲームサーバーのステータスを GameLift FleetIQ に報告します。 GameLift API UpdateGameServer()を使用して、サーバーの動作状態と使用状況のステータスを定期的に報告します。ゲームサーバーの正確なステータスを維持することで、GameLift FleetIQ はゲームプレイをより効率的に配置できます。また、スポットの再調整アクティビティ中に、ゲームプレイが進行中のインスタンスの終了を回避できます。

• Auto Scaling ポリシーを設定します。 ターゲット追跡スケーリングポリシーを作成し、プレイヤーの使用状況と需要予測に基づいてホスティング容量を維持できます。GameLift FleetIQ のPercentUtilizedGameServers メトリクスは、現在使用されているホスティング容量を示す指標です。ほとんどのゲームでは、未使用のゲームサーバーのバッファを維持し、新しいプレイヤーがすぐにゲームに参加できるようにする必要があります。特定のバッファサイズを維持するスケーリングポリシーを作成することで、プレイヤーの需要の変動に応じてインスタンスを追加または削除できます。詳細については、Amazon EC2 Auto Scaling ユーザーガイドの「ターゲット追跡スケーリングポリシー」を参照してください。

• 開発環境と実稼働環境に異なる AWS アカウントを使用します。 複数のアカウントを開発設定と実稼働設定で使い分けることで、不適切な設定がライブプレイヤーにもたらすリスクを軽減できます。

• 実稼働環境でゲームサーバーグループのゲームセッション保護を有効にします。 プレイヤーを保護するには、ゲームセッションの保護をオンにし、アクティブなゲームセッションがスケーリングや再分散アクティビティによって早期に終了しないようにします。

• EC2 でゲームをテストしてから、GameLift FleetIQ と統合してください。 EC2 でゲームを起動して実行し、最初に設定を微調整することをお勧めします。その後、同じ起動テンプレートと AMI を使用してゲームサーバーグループを作成できます。

Kubernetes を使用している場合は、まず Kubernetes クラスターに標準 EC2 インスタンスを追加してから、Kubernetes クラスターのワーカーノード用に作成した起動テンプレートを使用してゲームサーバーグループを作成することをお勧めします。EKS を使用している場合は、EKS クラスターとゲームサーバーグループを個別に作成します。ゲームサーバーグループでは、EKS 統合に使用する適切なユーザー

Version220

Page 227: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドCloudWatch によるモニタリング

データおよび起動テンプレート設定とともに、EBS に最適化した AMI を使用します。EKS ワーカーノードと EKS 最適化 AMI の詳細については、Amazon EKS 最適化 Linux AMI ガイドを参照してください。

以下の AWS ベストプラクティスも参照してください。

• Amazon EC2 のベストプラクティス• Amazon EC2 Auto Scaling のベストプラクティス

Amazon CloudWatch による GameLift FleetIQ のモニタリング

ゲームサーバーグループを持つ Amazon GameLift FleetIQ はプレビュー版であり、変更される可能性があります。マネージド型の GameLift の機能としての FleetIQ は変更されません。

GameLift FleetIQ は、AWS アカウントに 5 つの Amazon CloudWatch メトリクスを出力します。これらのメトリクスは、インスタンス容量のスケーリング、オペレーションダッシュボードの構築、アラームのトリガーに役立ちます。

メトリクス 説明

AvailableGameServers ゲーム実行に使用可能で、ゲームプレイに現在使用されていないゲームサーバーの数。この数には、クレーム済みであるが、まだ AVAILABLE ステータスにあるゲームサーバーが含まれます。

単位: カウント

関連する CloudWatch 統計: Sum

ディメンション: GameServerGroup

UtilizedGameServers ゲームプレイに現在使用されているゲームサーバー。この数字には、[UTILIZED (使用中)] 状態のゲームサーバーも含まれます。

単位: カウント

関連する CloudWatch 統計: Sum

ディメンション: GameServerGroup

DrainingAvailableGameServers ゲームプレイを現在サポートしていない、終了予定のインスタンスのゲームサーバー。これらのゲームサーバーは、新しいクレームリクエストがあった場合に、クレームされる優先度が最も低いゲームサーバーです。

単位: カウント

関連する CloudWatch 統計: Sum

ディメンション: GameServerGroup

Version221

Page 228: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドCloudWatch によるモニタリング

メトリクス 説明

DrainingUtilizedGameServers ゲームプレイを現在サポートしている、終了予定のインスタンスのゲームサーバー。

単位: カウント

関連する CloudWatch 統計: Sum

ディメンション: GameServerGroup

PercentUtilizedGameServers ゲーム実行を現在サポートしているゲームサーバーの割合。このメトリクスは、ゲームサーバーキャパシティーの現在の使用量を示します。プレイヤーの需要に合わせてインスタンスを動的に追加および削除できる AutoScaling ポリシーを実行する場合に役立ちます。

単位: パーセント

関連する CloudWatch 統計:Average、Minimum、Maximum

ディメンション: GameServerGroup

GameServerInterruptions スポットの可用性が制限されているために中断されたスポットインスタンスのゲームサーバー。

単位: カウント

関連する CloudWatch 統計: Sum

ディメンション: GameServerGroup、InstanceType

InstanceInterruptions 可用性が制限されているために中断されたスポットインスタンス。

単位: カウント

関連する CloudWatch 統計: Sum

ディメンション: GameServerGroup、InstanceType

Version222

Page 229: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドデータ保護

Amazon GameLift でのセキュリティAmazon EC2 でスタンドアロン機能として GameLift FleetIQ を使用する場合は、Linux インスタンス用Amazon EC2 ユーザーガイドの「Amazon EC2 のセキュリティ」も参照してください。

AWS では、クラウドのセキュリティが最優先事項です。AWS のお客様は、セキュリティを最も重視する組織の要件を満たすように構築されたデータセンターとネットワークアーキテクチャから利点を得られます。

セキュリティは、AWS とお客様の間の共有責任です。責任共有モデルでは、これをクラウドのセキュリティおよびクラウド内のセキュリティと説明しています。

• クラウドのセキュリティ – AWS は、AWS クラウド内で AWS サービスを実行するインフラストラクチャを保護する責任を担います。また、AWS は、使用するサービスを安全に提供します。AWSコンプライアンスプログラムの一環として、サードパーティーの監査が定期的にセキュリティの有効性をテストおよび検証しています。Amazon GameLift に適用するコンプライアンスプログラムの詳細については、「コンプライアンスプログラムによる AWS 対象範囲内サービス」を参照してください。

• クラウド内のセキュリティ – お客様の責任はお客様が使用する AWS のサービスによって決まります。また、お客様は、お客様のデータの機密性、企業の要件、および適用可能な法律および規制などの他の要因についても責任を担います。

このドキュメントは、GameLift を使用する際に共有責任モデルを適用する方法を理解するのに役立ちます。以下のトピックでは、セキュリティおよびコンプライアンスの目的を達成するために GameLift を設定する方法を示します。また、GameLift リソースのモニタリングや保護に役立つ他の AWS サービスの使用方法についても説明します。

トピック• Amazon GameLift でのデータ保護 (p. 223)• Amazon GameLift の Identity and Access Management (p. 225)• GameLift を使用したログ記録とモニタリング (p. 237)• Amazon GameLift のコンプライアンス検証 (p. 238)• Amazon GameLift の耐障害性 (p. 238)• Amazon GameLift のインフラストラクチャセキュリティ (p. 239)• Amazon GameLift での設定と脆弱性の分析 (p. 240)• Amazon GameLift のセキュリティのベストプラクティス (p. 240)

Amazon GameLift でのデータ保護Amazon EC2 でスタンドアロン機能として GameLift FleetIQ を使用する場合は、Linux インスタンス用Amazon EC2 ユーザーガイドの「Amazon EC2 のセキュリティ」も参照してください。

Amazon GameLift は、データ保護に関する規制やガイドラインを含む AWS 責任共有モデルに準拠しています。AWS は、AWS のすべてのサービスを実行するグローバルインフラストラクチャを保護する責任を負います。AWS は、お客様のコンテンツや個人データを取り扱うためのセキュリティ設定コントロールなど、このインフラストラクチャでホストされるデータの制御を管理します。AWS のお客様および APNパートナーは、データ管理者またはデータ処理者として、AWS クラウドに格納した個人データに対して責任を負います。

Version223

Page 230: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド保管時の暗号化

データ保護目的の場合、AWS アカウント認証情報を保護して IAM (AWS Identity and AccessManagement) で個々のユーザーアカウントをセットアップし、そのユーザーに各自の職務を果たすために必要なアクセス許可のみが付与されるようにすることをお勧めします。また、以下の方法でデータを保護することをお勧めします。

• 各アカウントで多要素認証 (MFA) を使用します。• SSL/TLS を使用して AWS リソースと通信します。

• AWS CloudTrail で API とユーザーアクティビティログをセットアップします。• AWS 暗号化ソリューションを、AWS サービス内のすべてのデフォルトのセキュリティ管理と一緒に使

用します。• Amazon Macie などの高度なマネージドセキュリティサービスを使用します。これにより、Amazon S3

に保存される個人データの検出と保護が支援されます。

顧客のアカウント番号などの機密の識別情報は、[名前] フィールドなどの自由形式のフィールドに配置しないことを強くお勧めします。これは、コンソール、API、AWS CLI、または AWS で GameLift または他の AWS サービスを使用する場合も同様です。GameLift または他のサービスに入力したデータはすべて、診断ログの内容として取得される可能性があります。外部サーバーへの URL を指定するときは、そのサーバーへのリクエストを検証するための認証情報を URL に含めないでください。

GameLift 固有のデータは、次のように処理されます。

• GameLift にアップロードするゲームサーバーのビルドとスクリプトは、Amazon S3 に保存されます。このデータがアップロードされると、お客様に直接アクセスすることはできません。許可されたユーザーは、ファイルをアップロードするための一時的なアクセス権を取得できますが、Amazon S3 のファイルを直接表示または更新することはできません。スクリプトとビルドを削除するには、GameLift コンソールまたはサービス API を使用します。

• ゲームセッションのログデータは、ゲームセッションの完了後に Amazon S3 に一定期間保存されます。許可されたユーザーは、GameLift コンソール内のリンクまたはサービス API を呼び出して、ログデータにアクセスできます。

• メトリクスとイベントのデータは GameLift に保存され、GameLift コンソールを介して、またはサービス API の呼び出しからアクセスできます。データは、フリート、インスタンス、ゲームセッションの配置、マッチメイキングチケット、ゲームセッション、およびプレイヤーセッションで取得できます。データには、Amazon CloudWatch および CloudWatch イベント を通じてもアクセスできます。

• 顧客提供のデータは GameLift に保存されます。許可されたユーザーは、サービス API を呼び出してアクセスできます。潜在的に機密性の高いデータには、プレイヤーデータ、プレイヤーセッションとゲームセッションデータ (接続情報を含む)、マッチメーカーデータなどがあります。

Note

リクエストにカスタムプレーヤー ID を指定する場合、これらの値は匿名化された UUID であり、識別されるプレーヤー情報が含まれていないことが想定されます。

データ保護の詳細については、AWS セキュリティブログのブログ投稿「AWS の責任共有モデルとGDPR」を参照してください。

保管時の暗号化GameLift 固有のデータの保存時の暗号化は、次のように処理されます。

• ゲームサーバーのビルドとスクリプトは、サーバー側の暗号化を使用して Amazon S3 バケットに保存されます。

• お客様が指定するデータは、暗号化された形式で GameLift に保存されます。

Version224

Page 231: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド転送中の暗号化

転送中の暗号化GameLift API への接続は、安全な (SSL) 接続を介して行われ、AWS 署名バージョン 4 を使用して認証されます (AWS CLI または AWS SDK を介して接続する場合、署名は自動的に処理されます)。認証は、接続の確立に使用されるセキュリティ認証情報の IAM 定義のアクセスポリシーを使用して管理されます。

ゲームクライアントとゲームサーバー間の直接的な通信は、以下の通りです。

• GameLift リソース上でホストされているカスタムゲームサーバーの場合、通信には GameLift サービスが含まれません。この通信の暗号化は、お客様の責任となります。TLS 対応フリートを使用すると、接続時にゲームクライアントがゲームサーバーを認証したり、ゲームクライアントとゲームサーバー間のすべての通信を暗号化したりできます。

• TLS 証明書生成が有効な リアルタイムサーバー の場合、ゲームクライアントと RealTime クライアントSDK を使用する RealTime サーバー間のトラフィックは処理中に暗号化されます。TCP トラフィックはTLS 1.2 を使用して暗号化され、UDP トラフィックは DTLS 1.2 を使用して暗号化されます。

インターネットトラフィックプライバシーリモートで GameLift インスタンスに安全にアクセスできます。Linux を使用するインスタンスの場合、SSH はリモートアクセス用の安全な通信チャネルを提供します。Windows を実行しているインスタンスの場合は、リモートデスクトッププロトコル (RDP) クライアントを使用します。AWS SystemsManager Session Manager および Run Command を使用したインスタンスへのリモートアクセスは、TLS1.2 を使用して暗号化され、接続を作成するリクエストは、SigV4 を使用して署名されます。管理GameLift インスタンスへの接続に関するヘルプについては、「フリートインスタンスにリモートでアクセス (p. 124)」を参照してください。

Amazon GameLift の Identity and AccessManagement

AWS Identity and Access Management (IAM) は、管理者が AWS リソースへのアクセスを安全にコントロールするために役立つ AWS のサービスです。IAM 管理者は、GameLift リソースを使用するために認証(サインイン) および承認 (アクセス許可を持つ) される者を制御します。IAM は、追加料金なしで使用できる AWS のサービスです。

トピック• 対象者 (p. 225)• アイデンティティを使用した認証 (p. 226)• ポリシーを使用したアクセスの管理 (p. 228)• Amazon GameLift と IAM の連携 (p. 229)• Amazon GameLift アイデンティティベースのポリシーの例 (p. 232)• Amazon GameLift の Identity and Access のトラブルシューティング (p. 235)

対象者AWS Identity and Access Management (IAM) の用途は、GameLift で行う作業によって異なります。

サービスユーザー – ジョブを実行するために GameLift サービスを使用する場合は、管理者が必要なアクセス許可と認証情報を用意します。作業を実行するためにさらに多くの GameLift 機能を使用するとき、追

Version225

Page 232: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドアイデンティティを使用した認証

加のアクセス許可が必要になる場合があります。アクセスの管理方法を理解すると、管理者から適切なアクセス許可をリクエストするのに役に立ちます。GameLift の機能にアクセスできない場合は、「AmazonGameLift の Identity and Access のトラブルシューティング (p. 235)」を参照してください。

サービス管理者 – 社内の GameLift リソースを担当している場合は、おそらく GameLift へのフルアクセスがあります。従業員がどの GameLift 機能とリソースアクセスする必要があるかを決定するのは管理者の仕事です。その後で、サービスユーザーのアクセス許可を変更するために、IAM 管理者にリクエストを送信する必要があります。IAM の基本概念については、このページの情報を確認します。お客様の会社でGameLift の IAM を利用する方法の詳細については、「Amazon GameLift と IAM の連携 (p. 229)」を参照して ください。

IAM 管理者 – IAM 管理者は、GameLift へのアクセスを管理するポリシーの作成方法の詳細について確認する場合があります。IAM で使用できる GameLift アイデンティティベースのポリシーの例を表示するには、「Amazon GameLift アイデンティティベースのポリシーの例 (p. 232)」を参照して ください。

アイデンティティを使用した認証認証は、アイデンティティ認証情報を使用して AWS にサインインする方法です。AWS マネジメントコンソール を使用するサインインの詳細については、IAM ユーザーガイド の「IAM コンソールとサインインページ」を参照してください。

AWS アカウントのルートユーザー、IAM ユーザーとして、または IAM ロールを引き受けて、認証されている (AWS にサインインしている) 必要があります。会社のシングルサインオン認証を使用することも、Google や Facebook を使用してサインインすることもできます。このような場合、管理者は以前にIAM ロールを使用して ID フェデレーションを設定しました。他の会社の認証情報を使用して AWS にアクセスした場合、ロールを間接的に割り当てられています。

AWS マネジメントコンソール へ直接サインインするには、ルートユーザー E メールまたは IAM ユーザー名とパスワードを使用します。ルートユーザー または IAM を使用して AWS にプログラム的にアクセスできます。AWS では、SDK とコマンドラインツールを提供して、お客様の認証情報を使用して、リクエストに暗号で署名できます。AWS ツールを使用しない場合は、リクエストに自分で署名する必要があります。これには、インバウンド API リクエストを認証するためのプロトコル、署名バージョン 4 を使用します。リクエストの認証の詳細については、AWS General Referenceの「署名バージョン 4 の署名プロセス」を参照してください。

使用する認証方法を問わず、追加のセキュリティ情報の提供を要求される場合もあります。たとえば、AWS では多要素認証 (MFA) を使用してアカウントのセキュリティを高めることを推奨しています。詳細については、IAM ユーザーガイドの「AWS のデバイスに多要素認証 (MFA) を使用」を参照してください。

AWS アカウントのルートユーザーAWS アカウントを初めて作成する場合は、このアカウントのすべての AWS サービスとリソースに対して完全なアクセス権限を持つシングルサインインアイデンティティで始めます。このアイデンティティはAWS アカウント ルートユーザー と呼ばれ、アカウントの作成に使用した E メールアドレスとパスワードでのサインインによりアクセスします。強くお勧めしているのは、日常的なタスクには、それが管理者タスクであっても、ルートユーザーを使用しないことです。代わりに、最初の IAM ユーザーを作成するためだけに ルートユーザー を使用するというベストプラクティスに従います。その後、ルートユーザー認証情報を安全な場所に保管し、それらを使用して少数のアカウントおよびサービス管理タスクのみを実行します。

IAM ユーザーとグループIAM ユーザーは、単一のユーザーまたはアプリケーションに特定のアクセス許可がある AWS アカウント内のアイデンティティです。IAM ユーザーは、ユーザー名とパスワード、アクセスキーのセットなど、長期的な認証情報を持つことができます。アクセスキーを生成する方法の詳細については、IAM ユーザーガイド の「IAM ユーザーのアクセスキーの管理」を参照してください。IAM ユーザーにアクセスキーを生成

Version226

Page 233: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドアイデンティティを使用した認証

するとき、必ずキーペアを表示して安全に保存してください。後になって、シークレットアクセスキーを回復することはできません。新しいアクセスキーペアを生成する必要があります。

IAM グループは、IAM ユーザーのコレクションを指定するアイデンティティです。グループとしてサインインすることはできません。グループを使用して、一度に複数のユーザーに対してアクセス許可を指定できます。多数の組のユーザーがある場合、グループを使用すると管理が容易になります。たとえば、IAMAdmin という名前のグループを設定して、そのグループに IAM リソースを管理するアクセス許可を与えることができます。

ユーザーは、ロールとは異なります。ユーザーは 1 人の特定の人またはアプリケーションに一意に関連付けられますが、ロールはそれを必要とする任意の人が引き受けるようになっています。ユーザーには永続的な長期の認証情報がありますが、ロールでは一時的な認証情報が利用できます。詳細については、IAMユーザーガイド の「IAM ユーザーの作成が適している場合 (ロールではなく)」を参照してください。

IAM ロールIAM ロールは、特定のアクセス許可を持つ、AWS アカウント内のアイデンティティです。これは IAMユーザーに似ていますが、特定のユーザーに関連付けられていません。ロールを切り替えて、AWS マネジメントコンソール で IAM ロールを一時的に引き受けることができます。ロールを引き受けるには、AWSCLI または AWS API オペレーションを呼び出すか、カスタム URL を使用します。ロールを使用する方法の詳細については、IAM ユーザーガイド の「IAM ロールの使用」を参照してください。

IAM ロールと一時的な認証情報は、次の状況で役立ちます。

• 一時的な IAM ユーザーアクセス許可 – IAM ユーザーは、特定のタスクに対して複数の異なるアクセス許可を一時的に IAM ロールで引き受けることができます。

• フェデレーティッドユーザーアクセス – IAM ユーザーを作成する代わりに、AWS Directory Service、エンタープライズユーザーディレクトリ、またはウェブ ID プロバイダーに既存のアイデンティティを使用できます。このようなユーザーはフェデレーティッドユーザーと呼ばれます。AWS では、ID プロバイダーを通じてアクセスがリクエストされたとき、フェデレーティッドユーザーにロールを割り当てます。フェデレーティッドユーザーの詳細については、IAM ユーザーガイドの「フェデレーティッドユーザーとロール」を参照してください。

• クロスアカウントアクセス – IAM ロールを使用して、自分のアカウントのリソースにアクセスすることを別のアカウントの信頼済みプリンシパルに許可できます。ロールは、クロスアカウントアクセスを許可する主な方法です。ただし、一部の AWS のサービスでは、(ロールをプロキシとして使用する代わりに) リソースにポリシーを直接アタッチできます。クロスアカウントアクセスでのロールとリソースベースのポリシーの違いの詳細については、IAM ユーザーガイド の「IAM ロールとリソースベースのポリシーとの相違点」を参照してください。

• AWS サービスアクセス – サービスロールは、サービスがお客様に代わってお客様のアカウントでアクションを実行するために引き受ける IAM ロールです。一部の AWS のサービス環境を設定するときに、サービスが引き受けるロールを定義する必要があります。このサービスロールには、サービスが必要とする AWS のリソースにサービスがアクセスするために必要なすべてのアクセス権限を含める必要があります。サービスロールはサービスによって異なりますが、多くのサービスロールでは、そのサービスの文書化された要件を満たしている限り、アクセス権限を選択することができます。サービスロールは、お客様のアカウント内のみでアクセスを提供します。他のアカウントのサービスへのアクセス権を付与するためにサービスロールを使用することはできません。IAM 内部からロールを作成、修正、削除できます。たとえば、Amazon Redshift がお客様に代わって Amazon S3 バケットにアクセスし、バケットからデータを Amazon Redshift クラスターにロードすることを許可するロールを作成できます。詳細については、IAM ユーザーガイドのAWS サービスにアクセス権限を委任するロールの作成を参照してください。

• Amazon EC2で実行されているアプリケーション – IAM ロールを使用して、EC2 インスタンスで実行され、AWS CLI または AWS API リクエストを作成しているアプリケーションの一時的な認証情報を管理できます。これは、EC2 インスタンス内でのアクセスキーの保存に推奨されます。AWS ロールを EC2インスタンスに割り当て、そのすべてのアプリケーションで使用できるようにするには、インスタンスにアタッチされたインスタンスプロファイルを作成します。インスタンスプロファイルにはロールが含まれ、EC2 インスタンスで実行されるプログラムは一時認証情報を取得することができます。詳細につ

Version227

Page 234: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドポリシーを使用したアクセスの管理

いては、IAM ユーザーガイドの「Amazon EC2 インスタンスで実行されるアプリケーションに IAM ロールを使用してアクセス権限を付与する」を参照してください。

IAM ロールを使用するべきかどうかについては、IAM ユーザーガイド の「IAM ロール (ユーザーではない)の作成が適している場合」を参照してください。

ポリシーを使用したアクセスの管理AWS でアクセスをコントロールするには、ポリシーを作成して IAM アイデンティティや AWS リソースにアタッチします。ポリシーは AWS のオブジェクトであり、アイデンティティやリソースに関連付けて、これらのアクセス許可を定義します。AWS は、エンティティ (ルートユーザー、IAM ユーザーまたはIAM ロール) によってリクエストが行われると、それらのポリシーを評価します。ポリシーでのアクセス許可により、リクエストが許可されるか拒否されるかが決まります。大半のポリシーは JSON ドキュメントとして AWS に保存されます。JSON ポリシードキュメントの構造と内容の詳細については、IAM ユーザーガイド の「JSON ポリシー概要」を参照してください。

IAM 管理者は、ポリシーを使用して、AWS リソースへのアクセスを許可するユーザーと、これらのリソースで実行できるアクションを指定できます。すべての IAM エンティティ (ユーザーまたはロール) は、アクセス許可のない状態からスタートします。言い換えると、デフォルト設定では、ユーザーは何もできず、自分のパスワードを変更することすらできません。何かを実行するアクセス許可をユーザーに付与するには、管理者がユーザーにアクセス許可ポリシーをアタッチする必要があります。また、管理者は、必要なアクセス許可があるグループにユーザーを追加できます。管理者がグループにアクセス許可を付与すると、そのグループ内のすべてのユーザーにこれらのアクセス許可が付与されます。

IAM ポリシーは、オペレーションの実行方法を問わず、アクションのアクセス許可を定義します。たとえば、iam:GetRole アクションを許可するポリシーがあるとします。このポリシーがあるユーザーは、AWS マネジメントコンソール、AWS CLI、または AWS API からロールの情報を取得できます。

アイデンティティベースのポリシーアイデンティティベースのポリシーは、IAM ユーザー、ロール、グループなどのアイデンティティにJSON ドキュメントとしてアタッチできるアクセス許可ポリシーです。これらのポリシーは、アイデンティティが実行できるアクション、リソース、および条件を制御します。アイデンティティベースのポリシーを作成する方法については、IAM ユーザーガイド の「IAM ポリシー の 作成」を参照してください 。

アイデンティティベースのポリシーは、さらにインラインポリシーまたは管理ポリシーに分類できます。インラインポリシーは、単一のユーザー、グループ、またはロールに直接埋め込まれています。管理ポリシーは、AWS アカウント内の複数のユーザー、グループ、およびロールにアタッチできるスタンドアロンポリシーです。管理ポリシーには、AWS 管理ポリシーとカスタマー管理ポリシーが含まれます。管理ポリシーまたはインラインポリシーのいずれかを選択する方法については、IAM ユーザーガイド の「管理ポリシーとインラインポリシーの比較」を参照してください。

リソースベースのポリシーリソースベースのポリシーは、Amazon S3 バケットなどのリソースにアタッチする JSON ポリシードキュメントです。サービス管理者は、これらのポリシーを使用して、特定のプリンシパル (アカウントメンバー、ユーザー、またはロール) がそのリソースに対して実行する条件およびアクションを定義することができます。リソースベースのポリシーはインラインポリシーです。マネージド型のリソースベースのポリシーはありません。

アクセスコントロールリスト (ACL)アクセスコントロールリスト (ACL) は、どのプリンシパル (アカウントメンバー、ユーザー、またはロール) にリソースへのアクセス許可を付与するかを制御する一種のポリシーです。ACL は、リソースベースのポリシーと似ていますが、JSON ポリシードキュメント形式を使用しません。ACL をサポートするサービスとして Amazon S3、AWS WAF、Amazon VPC などがあります。ACL の詳細については、『Amazon

Version228

Page 235: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAmazon GameLift と IAM の連携

Simple Storage Service 開発者ガイド』の「アクセスコントロールリスト (ACL) の概要」を参照してください。

その他のポリシータイプAWS では、別のあまり一般的ではないポリシータイプもサポートしています。これらのポリシータイプでは、より一般的なポリシータイプで付与された最大のアクセス許可を設定できます。

• アクセス許可の境界 – アクセス許可の境界は、アイデンティティベースのポリシーが IAM エンティティ(IAM ユーザーまたはロール) に付与できるアクセス許可の上限を設定する高度な機能です。エンティティのアクセス許可の境界を設定できます。結果として得られるアクセス許可は、エンティティの IDベースのポリシーとそのアクセス許可の境界の共通部分です。Principal フィールドでユーザーまたはロールを指定するリソースベースのポリシーは、アクセス許可の境界では制限されません。これらのポリシーのいずれかを明示的に拒否した場合、その許可は無効になります。アクセス許可の境界の詳細については、IAM ユーザーガイド の「IAM エンティティのアクセス許可の境界」を参照してください。

• サービスコントロールポリシー (SCP) – SCP は、AWS Organizations で 組織や組織単位 (OU) に最大権限を指定する JSON ポリシーです。AWS Organizations は、お客様のビジネスが所有する複数の AWSアカウントをグループ化し、一元的に管理するサービスです。組織内のすべての機能を有効にすると、サービス制御ポリシー (SCP) を一部またはすべてのアカウントに適用できます。SCP はメンバーアカウントのエンティティに対するアクセス許可を制限します (各 AWS アカウントのルートユーザー など)。組織 および SCP の詳細については、AWS Organizations ユーザーガイド の「SCP の動作」を参照してください。

• セッションポリシー – セッションポリシーは、ロールまたはフェデレーティッドユーザーの一時セッションをプログラムで作成する際にパラメータとして渡す高度なポリシーです。結果として得られるセッションのアクセス許可は、ユーザーまたはロールの ID ベースのポリシーとセッションポリシーの共通部分です。また、リソースベースのポリシーからアクセス許可が派生する場合もあります。これらのポリシーのいずれかを明示的に拒否した場合、その許可は無効になります。詳細については、IAM ユーザーガイド の「セッションポリシー」を参照してください。

複数のポリシータイプ1 つのリクエストに複数のタイプのポリシーが適用されると、結果として作成されるアクセス許可を理解するのがさらに複雑になります。複数のポリシータイプが関連するとき、リクエストを許可するかどうかを AWS が決定する方法の詳細については、IAM ユーザーガイド の「ポリシーの評価ロジック」を参照してください。

Amazon GameLift と IAM の連携GameLift へのアクセスを管理するために IAM 使用する前に、GameLift で使用できる IAM 機能を理解しておく必要があります。GameLift およびその他の AWS サービスが IAM と連携する方法の概要を理解するには、IAM ユーザーガイド の「IAM と連携する AWS サービス」を参照してください。

Amazon EC2 でスタンドアロン機能として GameLift FleetIQ を使用する場合は、Linux インスタンス用Amazon EC2 ユーザーガイドの「Amazon EC2 のセキュリティ」も参照してください。

GameLift アイデンティティベースのポリシーIAM アイデンティティベースのポリシーでは、許可または拒否されたアクションとリソースを指定でき、さらにアクションが許可または拒否された条件を指定できます。GameLift は、特定のアクション、リソース、および条件キーをサポートします。JSON ポリシーで使用するすべての要素については、IAM ユーザーガイド の「IAM JSON ポリシーエレメントのリファレンス」を参照してください 。

アクションIAM アイデンティティベースのポリシーの Action エレメントは、そのポリシーにより許可または拒否される特定のアクションについて説明します。ポリシーアクションの名前は通常、関連する AWS API オペ

Version229

Page 236: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAmazon GameLift と IAM の連携

レーションと同じです。このアクションは、関連付けられたオペレーションを実行するためのアクセス許可を付与するポリシーで使用されます。

GameLift のポリシーアクションは、アクションの前にプレフィックス gamelift: を使用します。たとえば、GameLiftStartGameSessionPlacement API オペレーションで新しいゲームセッションをリクエストするアクセス許可を付与するには、ポリシーに gamelift:StartGameSessionPlacement アクションを含めます。ポリシーステートメントには、Action 要素あるいは NotAction 要素を含める必要があります。GameLift は、このサービスで実行できるタスクを説明する独自の一連のアクションを定義します。

単一のステートメントに複数のアクションを指定するには、次のようにコンマで区切ります。

"Action": [ "gamelift:action1", "gamelift:action2"

ワイルドカード (*) を使用して複数のアクションを指定することができます。たとえば、Describe という単語で始まるすべてのアクションを指定するには、次のアクションを含めます。

"Action": "gamelift:Describe*"

GameLift のアクションを一覧表示するには、IAM ユーザーガイドの「Amazon GameLift で定義されるアクション」を参照してください。

次の GameLift アクションには、追加のアクセス許可の依存関係があります。

• VPC ピア接続アクション CreateVpcPeeringAuthorizationと、CreateVpcPeeringConnection には関連する VPC へのアクセスが必要です。VPCは、GameLift の管理に使用している同じ AWS アカウントで所有することも、別の AWS アカウントで所有することもできます。GameLift での VPC ピア接続の詳細については、「Amazon GameLift の VPCピア接続 (p. 173)」を参照してください。

• CreateGameServerGroup などの GameLift FleetIQ アクションには、特定の Amazon EC2、AutoScaling、およびその他の関連アクションへのアクセスが必要です。GameLift FleetIQ で使用する IAM アクセス許可の設定の詳細については、GameLift FleetIQ ガイドの IAM ユーザーおよびユーザーグループポリシーを更新する (p. 212) を参照してください。

リソースResource エレメントは、アクションが適用されるオブジェクトを指定します。ステートメントには、Resource または NotResource エレメントを含める必要があります。ARN を使用して、またはステートメントがすべてのリソースに適用されることを示すワイルドカード (*) を使用して、リソースを指定します。

存続期間の長い GameLift リソースには ARN 値。があり、これによりリソースは IAM ポリシーを使用してアクセスを管理できます。GameLift フリートリソースには、次の構文の ARN があります。

arn:${Partition}:gamelift:${Region}:${Account}:fleet/${FleetId}

ARN の形式の詳細については、「Amazon リソースネーム (ARN) と AWS サービスの名前空間」を参照してください。

たとえば、ステートメントで fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa フリートを指定するには、次の ARN を使用します。

"Resource": "arn:aws:gamelift:us-west-2:123456789012:fleet/fleet-2222bbbb-33cc-44dd-55ee-6666ffff77aa"

Version230

Page 237: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドAmazon GameLift と IAM の連携

特定のアカウントに属するすべてのフリートを指定するには、ワイルドカード (*) を使用します。

"Resource": "arn:aws:gamelift:us-west-2:123456789012:fleet/*"

リソースの作成など、一部の GameLift アクションは、特定のリソースで実行できません。このような場合は、ワイルドカード (*) を使用する必要があります。

"Resource": "*"

ARN を持つ GameLift リソースタイプのリストを表示するには、「Amazon GameLift ホスティングリソースについて (p. 88)」を参照してください。どのアクションで、各リソースの ARN を指定することができるかについては、「Amazon GameLift で定義されるアクション」を参照してください。

条件キーCondition エレメント (または Condition ブロック) を使用すると、ステートメントが有効な条件を指定できます。Conditionエレメントはオプションです。イコールや以下などの条件演算子を使用する条件式を構築して、リクエスト内に値のあるポリシーの条件に一致させることができます。

1 つのステートメントに複数の Condition エレメントを指定する場合、または 1 つの Condition エレメントに複数のキーを指定する場合、AWS が論理 AND 演算を使用してそれらを評価します。単一の条件キーに複数の値を指定する場合、AWS が論理 OR 演算を使用して条件を評価します。ステートメントのアクセス許可が付与される前にすべての条件が満たされる必要があります。

条件を指定する際にプレースホルダー変数も使用できます。たとえば、IAM ユーザー名でタグ付けされている場合のみ、リソースにアクセスする IAM ユーザーアクセス許可を付与できます。詳細については、IAM ユーザーガイド の「IAM ポリシーエレメント: 変数およびタグ」を参照してください。

GameLift では、いくつかのグローバル条件キーの使用がサポートされています。すべての AWS グローバル条件キーを確認するには、IAM ユーザーガイド の「AWS グローバル条件コンテキストキー」を参照してください 。

多くの GameLift アクションは、aws:RequestedTag 条件キーをサポートします。GameLift 条件キーのリストを表示するには、IAM ユーザーガイド の「Amazon GameLift の条件キー」を参照してください。どのアクションおよびリソースと条件キーを使用できるかについては、「Amazon GameLift で定義されるアクション」を参照してください。

GameLift アイデンティティベースのポリシーの例を表示するには、「Amazon GameLift アイデンティティベースのポリシーの例 (p. 232)」を参照してください。

GameLift リソースベースのポリシーGameLift では、リソースベースのポリシーはサポートされていません。

GameLift タグに基づいた承認タグを GameLift リソースにアタッチすることも、GameLift へのリクエストでタグを渡すこともできます。タグに基づいてアクセスを制御するには、gamelift:ResourceTag/key-name、aws:RequestTag/key-name、または aws:TagKeys の条件キーを使用して、ポリシーの条件要素でタグ情報を提供します。GameLift リソースのタグ付けの詳細については、Amazon GameLift API リファレンス の「TagResource()」を参照してください。

リソースのタグに基づいてリソースへのアクセスを制限するためのアイデンティティベースのポリシーの例については、「タグに基づいて GameLift フリートを表示する (p. 235)」を参照してください。

Version231

Page 238: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドアイデンティティベースのポリシーの例

GameLift IAM ロールIAM ロールは、特定のアクセス許可を持つ、AWS アカウント内のエンティティです。

GameLift を使用した一時的な認証情報の使用

一時的な認証情報を使用して、フェデレーションでサインイン、IAM ロールを引き受ける、またはクロスアカウントロールを引き受けることができます。一時的なセキュリティ認証情報を取得するには、AssumeRole または GetFederationToken などの AWS STS API オペレーションを呼び出します。

GameLiftでは、一時認証情報の使用をサポートしています。

サービスにリンクされたロール

サービスにリンクされたロールによって、AWS サービスが他のサービスのリソースにアクセスして自動的にアクションを完了できます。サービスにリンクされたロールは、IAM アカウント内に表示され、サービスによって所有されます。IAM 管理者は、サービスにリンクされたロールのアクセス許可を表示できますが、編集することはできません。

GameLift ではサービスにリンクされたロールをサポートしていません。

サービスロール

この機能では、サービスのロールをユーザーに代わって引き受けることをサービスに許可します。このロールにより、サービスはユーザーに代わって他のサービスのリソースにアクセスし、アクションを実行できます。サービスロールは、IAM アカウントに表示され、サービスによって所有されます。つまり、IAM 管理者は、このロールのアクセス許可を変更できます。ただし、これを行うことにより、サービスの機能が損なわれる場合があります。

GameLift では、次のシナリオでサービスロールの使用がサポートされています。

• GameLift でホストされているゲームサーバーが、AWS Lambda 関数や Amazon DynamoDB データベースなどの他の AWS リソースにアクセスできるようにします。ゲームサーバーは GameLift によって管理されるフリートでホストされるため、GameLift の他の AWS リソースへのアクセスを制限するサービスロールが必要です。詳細については、「フリートからの AWS リソースへのアクセス (p. 48)」を参照してください。

• GameLift FleetIQ をスタンドアロンソリューションとして使用する場合、GameLift がゲームサーバーをホストしている Amazon EC2 および Auto Scaling リソースを再分散できるようにします。詳細については、GameLift FleetIQ ユーザーガイドの「IAM サービスロールの作成 (p. 213)」を参照してください。

Amazon GameLift アイデンティティベースのポリシーの例デフォルトでは、IAM ユーザーおよびロールには、GameLift リソースを作成または変更するアクセス許可がありません。また、AWS マネジメントコンソール、AWS CLI、または AWS API を使用してタスクを実行することもできません。IAM 管理者は、ユーザーとロールに必要な、指定されたリソースで特定の APIオペレーションを実行するアクセス許可をユーザーとロールに付与する IAM ポリシーを作成する必要があります。続いて、管理者はそれらのアクセス権限が必要な IAM ユーザーまたはグループにそのポリシーをアタッチします。

JSON ポリシードキュメントのこれらの例を使用して、IAM アイデンティティベースのポリシーを作成する方法については、IAM ユーザーガイド の「[JSON] タブでのポリシーの 作成」を参照してください。

トピック

Version232

Page 239: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドアイデンティティベースのポリシーの例

• ポリシーのベストプラクティス (p. 233)• GameLift コンソールの使用 (p. 233)• ユーザーに自分のアクセス許可の表示を許可 (p. 233)• ゲームセッションに対するプレイヤーのアクセスを許可する (p. 234)• 1 つの GameLift キューへのアクセスを許可する (p. 234)• タグに基づいて GameLift フリートを表示する (p. 235)

ポリシーのベストプラクティスアイデンティティベースのポリシーは非常に強力です。アカウント内で、GameLift リソースを作成、アクセス、または削除できるかどうかを決定します。これらのアクションを実行すると、AWS アカウントに追加料金が発生する可能性があります。アイデンティティベースのポリシーを作成または編集するときは、以下のガイドラインと推奨事項に従います。

• AWS 管理ポリシーの使用を開始する – GameLift の使用をすばやく開始するには、AWS 管理ポリシーを使用して、従業員に必要なアクセス許可を付与します。これらのポリシーはアカウントですでに有効になっており、AWS によって管理および更新されています。詳細については、IAM ユーザーガイド の「AWS 管理ポリシーを使用したアクセス許可の使用開始」を参照してください 。

• 最小権限を付与する – カスタムポリシーを作成するときは、タスクを実行するために必要なアクセス許可のみを付与します。最小限のアクセス権限から開始し、必要に応じて追加のアクセス権限を付与します。この方法は、寛容なアクセス権限で始め、後でそれらを強化しようとするよりも安全です。詳細については、IAM ユーザーガイド の「最小権限を付与する」を参照してください。

• 機密性の高いオペレーションに MFA を有効にする – 追加セキュリティとして、機密性の高リソースまたは API オペレーションにアクセスするために IAM ユーザーに対して、多要素認証 (MFA) の使用を要求します。詳細については、IAM ユーザーガイドの「AWS のデバイスに 多要素認証 (MFA) を使用」を参照してください。

• 追加セキュリティに対するポリシー条件を使用する – 実行可能な範囲内で、アイデンティティベースのポリシーがリソースにアクセスできる条件を定義します。たとえば、要求が発生しなければならない許容 IP アドレスの範囲を指定するための条件を記述できます。指定された日付または時間範囲内でのみリクエストを許可する条件を書くことも、SSL や MFA の使用を要求することもできます。ポリシー要素の詳細については、IAM ユーザーガイド の「IAM JSON ポリシー要素: 条件」を参照してください。

GameLift コンソールの使用Amazon GameLift コンソールにアクセスするには、一連の最小限のアクセス許可が必要です。これらのアクセス許可により、AWS アカウントの GameLift リソースの詳細をリストおよび表示できます。最小限必要なアクセス許可よりも制限されたアイデンティティベースのポリシーを作成すると、そのポリシーをアタッチしたエンティティ (IAM ユーザーまたはロール) に対してはコンソールが意図したとおりに機能しません。

これらのエンティティが引き続き GameLift コンソールを使用できるようにするには、次のポリシー構文を使用して、ユーザーおよびグループにインラインポリシーを追加します。詳細については、IAM ユーザーガイド の「ユーザーへのアクセス許可の追加」を参照してください。ゲームクライアントを使用するプレイヤーなど、AWS CLI または AWS API のみを呼び出すユーザーには、最小限のコンソールアクセス許可を付与する必要はありません。代わりに、実行しようとしている API オペレーションに一致するアクションのみへのアクセスが許可されます。

• すべての GameLift コンソール機能を使用するために必要なアクセス許可:「 Amazon GameLift の IAMポリシーの例 (p. 23)」の管理者向けインラインポリシー構文を参照してください。

ユーザーに自分のアクセス許可の表示を許可この例は

Version233

Page 240: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドアイデンティティベースのポリシーの例

この例では、ユーザー ID にアタッチされたインラインおよび管理ポリシーの表示を IAM ユーザーに許可するポリシーを作成する方法を示します。このポリシーには、コンソールで、または AWS CLI か AWSAPI を使用してプログラム的に、このアクションを完了するアクセス許可が含まれています。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ]}

ゲームセッションに対するプレイヤーのアクセスを許可する新しいゲームセッションを作成し、利用可能なゲームセッションでプレイヤーの配置をリクエストするために、ゲームクライアント (またはゲームクライアントからのリクエストを管理するクライアントサービス) が必要とするアクセス許可を付与する場合。ゲームがこのタスクを達成するには、キューでのゲームセッションの配置、マッチメイキング、手動配置など、いくつかの方法があります。これらのシナリオのポリシー例を表示するには、Amazon GameLift の IAM ポリシーの例 (p. 23) のプレイヤーのインラインポリシー構文を参照してください。

1 つの GameLift キューへのアクセスを許可するこの例では、キューの送信先の追加、更新、削除を含む GameLift キュー、gamesessionqueue/examplequeue123 の 1 つへのアクセス許可を自分の AWS アカウントの IAM ユーザーに付与します。

このポリシーでは、gamelift:UpdateGameSessionQueue、gamelift:DeleteGameSessionQueue、およびgamelift:DescribeGameSessionQueues のアクションに対するアクセス許可をユーザーに付与します。図に示すように、このポリシーはリソース要素を使用して、単一のキューへのアクセスを制限します。

{ "Version":"2012-10-17", "Statement":[ {

Version234

Page 241: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドトラブルシューティング

"Sid":"ViewSpecificQueueInfo", "Effect":"Allow", "Action":[ "gamelift:DescribeGameSessionQueues" ], "Resource":"arn:aws:gamelift:::gamesessionqueue/examplequeue123" }, { "Sid":"ManageSpecificQueue", "Effect":"Allow", "Action":[ "gamelift:UpdateGameSessionQueue", "gamelift:DeleteGameSessionQueue" ], "Resource":"arn:aws:gamelift:::gamesessionqueue/examplequeue123" } ]}

タグに基づいて GameLift フリートを表示するアイデンティティベースのポリシーの条件を使用して、タグに基づいて GameLift リソースへのアクセスを制御できます。この例では、フリートを表示できるポリシーを作成する方法を示します。ただし、アクセス許可は、フリートタグ Owner にそのユーザーのユーザー名の値がある場合のみ、付与されます。このポリシーでは、このアクションをコンソールで実行するために必要なアクセス権限も付与します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListFleetsInConsole", "Effect": "Allow", "Action": "gamelift:ListFleets", "Resource": "*" }, { "Sid": "ViewFleetIfOwner", "Effect": "Allow", "Action": "gamelift:DescribeFleetAttributes", "Resource": "arn:aws:gamelift:*:*:fleet/*", "Condition": { "StringEquals": {"gamelift:ResourceTag/Owner": "${aws:username}"} } } ]}

このポリシーをアカウントの IAM ユーザーにアタッチできます。richard-roe という名前のユーザーが GameLift フリートを表示しようとすると、フリートには Owner=richard-roe またはowner=richard-roe のタグを付ける必要があります。それ以外の場合、アクセスは拒否されます。条件キー名では大文字と小文字は区別されないため、条件タグキー Owner は Owner と owner に一致します。ポリシー要素の詳細については、『IAM ユーザーガイド』の「IAM JSON ポリシー要素: 条件」を参照してください。

Amazon GameLift の Identity and Access のトラブルシューティング次の情報は、GameLift と IAM の使用に伴って発生する可能性がある一般的な問題の診断や修復に役立ちます。

Version235

Page 242: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドトラブルシューティング

トピック• GameLift でアクションを実行する権限がない (p. 236)• iam:PassRole を実行する権限がない (p. 236)• マイアクセスキーを表示したい (p. 236)• 管理者として GameLift へのアクセスを他のユーザーに許可したい (p. 237)• 自分の AWS アカウント以外のユーザーに GameLift リソースへのアクセスを許可したい (p. 237)

GameLift でアクションを実行する権限がないAWS マネジメントコンソール から、アクションを実行する権限がないと通知された場合、管理者に問い合わせ、サポートを依頼する必要があります。お客様のユーザー名とパスワードを発行したのが、担当の管理者です。

以下の例のエラーは、mateojackson IAM ユーザーがコンソールを使用して、キューの詳細を表示しようとしているが、gamelift:DescribeGameSessionQueues アクセス許可がない場合に発生します。

User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: gamelift:DescribeGameSessionQueues on resource: examplequeue123

この場合、Mateo は管理者に依頼し、gamelift:DescribeGameSessionQueues アクションを使用して examplequeue123 リソースにアクセスできるようにポリシーを更新してもらいます。

iam:PassRole を実行する権限がないiam:PassRole アクションを実行する権限がないというエラーが表示された場合、管理者に問い合わせ、サポートを依頼する必要があります。お客様のユーザー名とパスワードを発行したのが、担当の管理者です。GameLift にロールを渡すことができるようにポリシーを更新するよう、管理者に依頼します。

一部の AWS サービスでは、新しいサービスロールまたはサービスにリンクされたロールを作成せずに、既存のロールをサービスに渡すことができます。そのためには、サービスにロールを渡すアクセス許可が必要です。

以下の例のエラーは、marymajor という IAM ユーザーがコンソールを使用して GameLift でアクションを実行しようする場合に発生します。ただし、アクションでは、サービスロールによって付与されたアクセス許可がサービスにある必要があります。メアリーには、ロールをサービスに渡すアクセス許可がありません。

User: arn:aws:iam::123456789012:user/marymajor is not authorized to perform: iam:PassRole

この場合、メアリーは担当の管理者に iam:PassRole アクションを実行できるようにポリシーの更新を依頼します。

マイアクセスキーを表示したいIAM ユーザーアクセスキーを作成した後は、いつでもアクセスキー ID を表示できます。ただし、シークレットアクセスキーをもう一度表示することはできません。シークレットアクセスキーを紛失した場合は、新しいキーペアを作成する必要があります。

アクセスキーは、アクセスキー ID (例: AKIAIOSFODNN7EXAMPLE) とシークレットアクセスキー (例:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY) の 2 つの部分から構成されます。ユーザー名とパスワードと同様に、リクエストを認証するために、アクセスキー ID とシークレットアクセスキーの両方を使用する必要があります。ユーザー名とパスワードと同様に、アクセスキーをしっかり管理してください。

Version236

Page 243: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドGameLift を使用したログ記録とモニタリング

Important

正規ユーザー ID を確認するためであっても、アクセスキーをサードパーティーに提供しないでください。提供すると、第三者がアカウントへの永続的アクセスを取得する場合があります。

アクセスキーペアを作成する場合、アクセスキー ID とシークレットアクセスキーを安全な場所に保存するように求めるプロンプトが表示されます。このシークレットアクセスキーは、作成時にのみ使用できます。シークレットアクセスキーを紛失した場合、新しいアクセスキーを IAM ユーザーに追加する必要があります。最大 2 つのアクセスキーを持つことができます。すでに 2 つある場合は、新しいキーペアを作成する前に、いずれかを削除する必要があります。手順を表示するには、IAM ユーザーガイド の「アクセスキーの管理 」を参照してください。

管理者として GameLift へのアクセスを他のユーザーに許可したいGameLift へのアクセスを他のユーザーに許可するには、アクセスを必要とする人またはアプリケーションの IAM エンティティ (ユーザーまたはロール) を作成する必要があります。ユーザーは、このエンティティの認証情報を使用して AWS にアクセスします。次に、GameLift の適切なアクセス許可を付与するポリシーを、そのエンティティにアタッチする必要があります。

すぐに開始するには、IAM ユーザーガイド の「IAM が委任した最初のユーザーおよびグループの作成」を参照してください 。

自分の AWS アカウント以外のユーザーに GameLift リソースへのアクセスを許可したい他のアカウントのユーザーや組織外のユーザーが、リソースへのアクセスに使用できるロールを作成できます。ロールを引き受けるように信頼されたユーザーを指定することができます。リソースベースのポリシーまたはアクセスコントロールリスト (ACL) をサポートするサービスの場合、それらのポリシーを使用して、リソースへのアクセスを付与できます。

詳細については、以下を参照してください。

• GameLift でこれらの機能がサポートされるかどうかを確認するには、「Amazon GameLift と IAM の連携 (p. 229)」を参照してください。

• 所有している AWS アカウント間でリソースへのアクセスを付与する方法については、IAM ユーザーガイド の「所有している別の AWS アカウントへのアクセスを IAM ユーザーに許可」を参照してください。

• サードパーティーの AWS アカウントにリソースへのアクセスを提供する方法については、IAM ユーザーガイド の「第三者が所有する AWS アカウントへのアクセス権を付与する」を参照してください 。

• ID フェデレーションを介してアクセスを提供する方法については、IAM ユーザーガイド の「外部で認証されたユーザー (ID フェデレーション) へのアクセスの許可」を参照して ください 。

• クロスアカウントアクセスでのロールとリソースベースのポリシーの使用の違いの詳細については、IAM ユーザーガイド の「IAM ロールとリソースベースのポリシーとの相違点」を参照してください。

GameLift を使用したログ記録とモニタリングモニタリングは、GameLift および AWS ソリューションの信頼性、可用性、パフォーマンスを維持する上で重要な部分です。マルチポイント障害が発生した場合は、その障害をより簡単にデバッグできるように、AWS ソリューションのすべての部分からモニタリングデータを収集する必要があります。

AWS と GameLift は、ゲームホスティングリソースをモニタリングし、潜在的なインシデントに対応するためのいくつかのツールを提供します。

Version237

Page 244: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドコンプライアンス検証

Amazon CloudWatch アラーム

Amazon CloudWatch アラームを使用して、指定した期間にわたって 1 つのメトリクスを確認します。メトリクスが特定のしきい値を超えると、Amazon SNS トピックまたは AWS Auto Scaling ポリシーに通知が送信されます。CloudWatch アラームは、状態が変化したときにトリガーされ、特定の状態になるのではなく、指定した期間だけ維持されます。詳細については、「Amazon CloudWatch による AmazonGameLift のモニタリング (p. 187)」を参照してください。

AWS CloudTrail ログ

CloudTrail は、GameLift のユーザー、ロール、または AWS のサービスによって実行されたアクションの記録を提供します。CloudTrail で収集された情報を使用して、GameLift に対するリクエスト、リクエスト元の IP アドレス、リクエスト者、リクエスト日時などの詳細を確認できます。詳細については、「AWSCloudTrail を使用した Amazon GameLift API コールのログ記録 (p. 197)」を参照してください。

Amazon GameLift のコンプライアンス検証GameLift は AWS コンプライアンスプログラムの対象範囲ではありません。

特定のコンプライアンスプログラムの対象となる AWS サービスのリストについては、「コンプライアンスプログラムによる AWS 対象範囲内のサービス」を参照してください。一般的な情報については、「AWS コンプライアンスプログラム」を参照してください。

サードパーティーの監査レポートをダウンロードするには、AWS Artifact を使用します。詳細については、「AWS Artifact でレポートをダウンロードする」を参照してください。

AWS サービスを使用する際のお客様のコンプライアンス責任は、データの機密性、企業のコンプライアンス目的、適用法規によって決まります。AWS ではコンプライアンスに役立つ以下のリソースを用意しています。

• セキュリティおよびコンプライアンスのクイックスタートガイド – これらのデプロイガイドでは、アーキテクチャ上の考慮事項について説明し、セキュリティとコンプライアンスに重点を置いたベースライン環境を AWS でデプロイするための手順を説明します。

• HIPAA のセキュリティとコンプライアンスに関するホワイトペーパーを作成する – このホワイトペーパーでは、企業が AWS を使用して HIPAA 準拠のアプリケーションを作成する方法について説明します。

Note

すべてのサービスが HIPAA に準拠しているわけではありません。• AWS コンプライアンスのリソース – このワークブックおよびガイドのコレクションは、お客様の業界や

場所に適用される場合があります。• AWS Config 開発者ガイドの「ルールでのリソースの評価」– AWS Config サービスでは、リソース設定

が社内のプラクティス、業界のガイドライン、規制にどの程度適合しているかを評価します。• AWS Security Hub – この AWS サービスでは、AWS 内のセキュリティ状態を包括的に表示しており、

セキュリティ業界の標準およびベストプラクティスへの準拠を確認するのに役立ちます。

Amazon GameLift の耐障害性Amazon EC2 でスタンドアロン機能として GameLift FleetIQ を使用する場合は、Linux インスタンス用Amazon EC2 ユーザーガイドの「Amazon EC2 のセキュリティ」も参照してください。

AWS のグローバルインフラストラクチャは AWS リージョンとアベイラビリティーゾーンを中心として構築されます。AWS リージョンには、低レイテンシー、高いスループット、そして高度の冗長ネットワーク

Version238

Page 245: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドインフラストラクチャセキュリティ

で接続されている複数の物理的に独立・隔離されたアベイラビリティーゾーンがあります。アベイラビリティーゾーンでは、ゾーン間で中断することなく自動的にフェイルオーバーするアプリケーションとデータベースを設計および運用することができます。アベイラビリティーゾーンは、従来の単一または複数のデータセンターインフラストラクチャよりも可用性、耐障害性、および拡張性が優れています。

AWSのリージョンやアベイラビリティーゾーンの詳細については、AWSグローバルインフラストラクチャを参照してください。

GameLift では、AWS グローバルインフラストラクチャに加えて、データの耐障害性をサポートする次の機能を提供しています。

• マルチリージョンキュー – GameLift ゲームセッションキューは、利用可能なホスティングリソースで新しいゲームセッションを配置するために使用されます。複数のリージョンにまたがるキューは、リージョンが停止した場合にゲームセッションの配置をリダイレクトできます。ゲームセッションキューの作成のベストプラクティスについては、「ゲームセッションキューの設計 (p. 136)」を参照してください。

• 自動容量スケーリング – GameLift スケーリングツールを使用して、ホスティングリソースのヘルスと可用性を維持します。これらのツールには、ゲームやプレイヤーのニーズに合わせてフリートの容量を調整できるさまざまなオプションがあります。スケーリングの詳細については、「Amazon GameLift フリートの容量のスケーリング (p. 126)」を参照してください。

• インスタンス全体の配信 – GameLift では、フリートサイズに応じて、着信トラフィックを複数のインスタンスに配信します。ベストプラクティスとして、本稼働環境のゲームでは、インスタンスが異常または応答しなくなった場合に備えて、可用性を維持するために複数のインスタンスを持つ必要があります。

• Amazon S3 ストレージ – GameLift にアップロードされたゲームサーバーのビルドとスクリプトは、標準ストレージクラスを使用して Amazon S3 に格納されます。標準ストレージクラスでは、複数のデータセンターのレプリケーションを使用して耐障害性を高めます。ゲームセッションログは、標準ストレージクラスを使用して Amazon S3 にも保存されます。

Amazon GameLift のインフラストラクチャセキュリティ

Amazon EC2 でスタンドアロン機能として GameLift FleetIQ を使用する場合は、Linux インスタンス用Amazon EC2 ユーザーガイドの「Amazon EC2 のセキュリティ」も参照してください。

マネージド型サービスとして、Amazon GameLift は、ホワイトペーパー「Amazon Web Services: AWS セキュリティプロセスの概要」に記載されているAWS グローバルネットワークセキュリティの手順で保護されています。

AWS が公開した API コールを使用して、ネットワーク経由で GameLift にアクセスします。クライアントで Transport Layer Security (TLS) 1.0 以降がサポートされている必要があります。TLS 1.2 以降が推奨されています。また、Ephemeral Diffie-Hellman (DHE) や Elliptic Curve Ephemeral Diffie-Hellman (ECDHE)などの Perfect Forward Secrecy (PFS) を使用した暗号スイートもクライアントでサポートされている必要があります。これらのモードは、Java 7 以降など、最近のほとんどのシステムでサポートされています。

また、リクエストは、アクセスキー ID と、IAM プリンシパルに関連付けられているシークレットのアクセスキーを使用して署名する必要があります。または、AWS Security Token Service (AWS STS) を使用して、一時的なセキュリティ認証情報を生成し、リクエストに署名することもできます。

GameLift サービスでは、すべてのフリートが Amazon Virtual Private Cloud (VPC) に配置され、各フリートが AWS クラウド内の論理的に分離された領域に存在します。GameLift ポリシーを使用して、特定のVPC エンドポイントや特定の VPC からアクセスをコントロールできます。これにより効果的に、AWSネットワーク内の特定の VPC から特定の GameLift リソースへのネットワークアクセスのみが分離されます。フリートを作成するときは、ポート番号と IP アドレスの範囲を指定します。これらの範囲は、インバ

Version239

Page 246: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド設定と脆弱性の分析

ウンドトラフィックがフリート VPC 上のホストされたゲームサーバーにアクセスする方法を制限します。フリートアクセス設定を選択するときは、標準セキュリティのベストプラクティスを使用します。

Amazon GameLift での設定と脆弱性の分析Amazon EC2 でスタンドアロン機能として GameLift FleetIQ を使用する場合は、Linux インスタンス用Amazon EC2 ユーザーガイドの「Amazon EC2 のセキュリティ」も参照してください。

設定および IT 統制は、AWS とお客様の間で共有される責任です。詳細については、AWS 責任共有モデルを参照してください。AWS は、ゲストオペレーティングシステム (OS) やデータベースへのパッチ適用、ファイアウォール設定、災害対策などの基本的なセキュリティタスクを処理します。これらの手順は適切な第三者によって確認され、証明されています。詳細については、「アマゾン ウェブ サービス: セキュリティプロセスの概要」(ホワイトペーパー) を参照してください。

以下のセキュリティのベストプラクティスも GameLift での設定と脆弱性の分析に対処します。

• お客様は、ゲームホスティング用に GameLift インスタンスにデプロイされるソフトウェアの管理に責任があります。具体的には次のとおりです。• お客様が用意したゲームサーバーアプリケーションソフトウェアは、更新やセキュリティパッチを

含めて管理する必要があります。ゲームサーバーソフトウェアを更新するには、新しいビルドをGameLift にアップロードし、新しいフリートを作成し、トラフィックを新しいフリートにリダイレクトします。

• オペレーティングシステムを含む基本の Amazon マシンイメージ (AMI) は、新しいフリートが作成されたときにのみ更新されます。AMI の一部であるオペレーティングシステムやその他のアプリケーションにパッチを適用、更新、保護するには、ゲームサーバーの更新に関係なく、定期的にフリートをリサイクルします。

• お客様は、AWS SDK、GameLift サーバー SDK、リアルタイムサーバー用 GameLift クライアント SDKなど、最新の SDK バージョンでゲームを定期的に更新することを検討する必要があります。

Amazon GameLift のセキュリティのベストプラクティス

Amazon EC2 でスタンドアロン機能として GameLift FleetIQ を使用する場合は、Linux インスタンス用Amazon EC2 ユーザーガイドの「Amazon EC2 のセキュリティ」も参照してください。

GameLift には、独自のセキュリティポリシーを開発および実装する際に考慮する必要のあるいくつかのセキュリティ機能が用意されています。以下のベストプラクティスは一般的なガイドラインであり、完全なセキュリティソリューションに相当するものではありません。これらのベストプラクティスはお客様の環境に適切ではないか、十分ではない場合があるため、これらは処方箋ではなく、有用な考慮事項と見なしてください。

• アマゾン ウェブ サービス: セキュリティプロセスの概要 (ホワイトペーパー)• AWS セキュリティのベストプラクティス (ホワイトペーパー)

Version240

Page 247: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサービス API リファレンス (AWS SDK)

Amazon GameLift リファレンスガイド

このセクションには、Amazon GameLift を使用するためのリファレンスドキュメントが含まれます。

トピック• Amazon GameLift サービス API リファレンス (AWS SDK) (p. 241)• Amazon GameLift リアルタイムサーバー リファレンス (p. 245)• Amazon GameLift サーバー SDK リファレンス (p. 261)• Amazon GameLift FlexMatch リファレンス (p. 299)

Amazon GameLift サービス API リファレンス(AWS SDK)

Amazon GameLift サービス API は AWS SDK にパッケージ化されています。AWS SDK をダウンロードするか、Amazon GameLift API リファレンスドキュメントを参照してください。

マネージド GameLift 向け APIこれらの API は、カスタムゲームサーバーおよび リアルタイムサーバー の完全マネージド GameLift ソリューションの一部です。ここでは、2 つのカテゴリに分類されます。

• ゲームとプレイヤーを管理するための API (p. 241)• ゲームホスティングリソースを管理するためのアクション (p. 242)

ゲームとプレイヤーを管理するための APIゲームクライアントサービスからこれらの API アクションを呼び出して、新しいゲームセッションの開始、マッチメイキングのリクエスト、アクティブなゲームのプレイヤースロットの予約、ゲームとプレイヤーセッションデータの操作を行います。

• 1 人以上のプレイヤーの新しいゲームセッションを開始します。 ゲームセッション配置を使用して新しいゲームを開始し、利用可能な最適なホスティングリソースに配置します。または、1 つの特定のフリートに新しいゲームセッションを作成します。• StartGameSessionPlacement – 新しいゲームセッションの配置をリクエストし、1 人以上のプレイ

ヤーを追加します。• DescribeGameSessionPlacement – ステータスなど、配置リクエストの詳細を取得します。• StopGameSessionPlacement – 配置リクエストをキャンセルします。• CreateGameSession – 特定のフリートで新しいゲームセッションを開始します。GameLift Local で利

用可能です。• FlexMatch マッチメイキングを使用してプレーヤーをゲームセッションに参加させます。 プレイヤーを

マッチにグループ化し、新しいゲームセッションを開始します。マッチバックフィルを使用して、既存のゲームの新しいプレイヤーを検索します。• StartMatchmaking – 一緒にプレイするプレイヤーまたはグループのマッチメイキングをリクエストし

ます。

Version241

Page 248: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマネージド GameLift 向け API

• DescribeMatchmaking – ステータスなど、マッチメイキングリクエストの詳細を取得します。• AcceptMatch – プレイヤーの承諾を必要とするマッチングの場合は、プレイヤーがマッチング案を受

け入れるときに登録します。• StopMatchmaking – マッチメイキングリクエストをキャンセルします。• StartMatchBackfill - 既存のゲームセッションの空のスロットを埋めるために、追加のプレイヤーマッ

チングをリクエストします。• プレイヤーを既存のゲームに参加させます。 使用可能なプレイヤースロットがある既存のゲームを検索

し、新しいプレイヤー用に予約します。• SearchGameSessions – 利用可能なすべてのゲームセッションを取得するか、一連の条件に一致する

ゲームセッションを検索します。• CreatePlayerSession – プレイヤーがゲームセッションに参加できるように空きスロットを予約しま

す。GameLift Local で利用可能です。• CreatePlayerSessions – 複数のプレイヤーがゲームセッションに参加できるように空きスロットを予

約します。GameLift Local で利用可能です。• ゲームセッションとプレイヤーセッションデータを操作します。 既存のゲームセッションとプレイヤー

セッションの現在のデータを取得し、必要に応じて更新します。• DescribeGameSessions – アクティブ時間の長さや現在のプレイヤー数など、1 つ以上のゲームセッ

ションのメタデータを取得します。GameLift Local で利用可能です。• DescribeGameSessionDetails – 1 つ以上のゲームセッションのメタデータとゲームセッション保護設

定を取得します。• GetGameSessionLogUrl – ゲームセッションのログが保存された場所を取得します。• DescribePlayerSessions – ステータス、プレイ時間、プレイヤーデータなど、プレイヤーアクティビ

ティの詳細を取得します。GameLift Local で利用可能です。• UpdateGameSession – 最大プレイヤー数や参加ポリシーなどのゲームセッション設定を変更します。

ゲームホスティングリソースを管理するためのアクションこれらの API アクションを使用して、ゲームのホスティングリソース、プレイヤーの需要に合わせた容量のスケーリング、アクセスパフォーマンスと使用率メトリクスなどを設定します。ほとんどのリソース管理機能は GameLift Console で使用できますが、AWS Command Line Interface (AWS CLI) ツールまたはAWS SDK を使用してサービスを直接呼び出すこともできます。

• ゲームビルドを管理します。 GameLift サービスにアップロードされ、フリートにデプロイされるカスタムゲームサーバーのビルドを操作します。• CreateBuild – Amazon S3 バケットに保存されているファイルを使用して新しいビルドを作成

します。ビルドを作成し、ローカルパスからファイルをアップロードするには、AWS CLI のみで、upload-build コマンドを使用します。

• ListBuilds – GameLift リージョンにアップロードされたすべてのビルドのリストを取得します。• DescribeBuild – ビルドに関連付けられた情報を取得します。• UpdateBuild – ビルド名とバージョンを含むビルドメタデータを変更します。• DeleteBuild – GameLift からビルドを削除します。

• RealTime スクリプトを管理します。 リアルタイムサーバー で使用する設定スクリプトを操作します。カスタムゲームビルドとは異なり、スクリプトは GameLift サービスにアップロードされた後に更新できます。• CreateScript – リアルタイムサーバー で実行する新しいサーバースクリプトを作成します。• ListScripts – GameLift リージョンにアップロードされたすべての RealTime スクリプトのリストを取

得します。• DescribeScript – RealTime スクリプトに関連付けられた情報を取得します。• UpdateScript – スクリプトメタデータを変更し、変更されたスクリプトコンテンツをアップロードし

ます。 Version242

Page 249: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマネージド GameLift 向け API

• DeleteScript – GameLift から RealTime スクリプトを削除します。• ゲームホスティングのフリートを管理します。 ホスティングリソースのフリートを設定し、ゲームサー

バーまたは RealTime スクリプトをフリートにデプロイします。• CreateFleet – カスタムゲームサーバーのビルドまたは RealTime スクリプトを実行する新しいフリー

トを設定してアクティブ化します。• ListFleets – GameLift リージョン内のすべてのフリートのリストを取得します。• DeleteFleet – ゲームサーバーの実行やプレーヤーのホストをしなくなったフリートを終了します。• フリート設定の表示/更新。

• DescribeFleetAttributes / UpdateFleetAttributes – ゲームセッション保護とリソース作成の制限に関するフリートのメタデータと設定を表示または変更します。

• DescribeFleetPortSettings / UpdateFleetPortSettings – フリートに許可されているインバウンドアクセス権限 (IP アドレスとポート設定範囲) を表示または変更します。

• DescribeRuntimeConfiguration / UpdateRuntimeConfiguration – フリート内の各インスタンスで実行するサーバープロセス (および数) を表示または変更します。

• フリートの容量をスケールします。 フリートの自動スケーリングをセットアップするか、フリートの容量を手動で設定します。• DescribeEC2InstanceLimits – AWS アカウントと現在の使用レベルで許可されているインスタンスの

最大数を取得します。• DescribeFleetCapacity – フリートの現在の容量設定を取得します。• UpdateFleetCapacity – フリートの容量設定を手動で調整します。• Auto Scaling を管理します。

• PutScalingPolicy – ターゲットベースの Auto Scaling を有効にするか、カスタム Auto Scaling ポリシーを作成します。または、既存のポリシーを更新します。

• DescribeScalingPolicies – 既存の Auto Scaling ポリシーを取得します。• DeleteScalingPolicy – Auto Scaling ポリシーを削除し、フリートの容量に影響しないようにしま

す。• StartFleetActions – フリートの Auto Scaling ポリシーを再起動します。• StopFleetActions – フリートの Auto Scaling ポリシーを停止します。

• ゲームセッションキューを管理します。 マルチフリート、マルチリージョンのキューをセットアップして、利用可能な最善のホスティングリソースでゲームセッションを配置します。FlexMatch マッチメイキングではキューが必要です。• CreateGameSessionQueue – ゲームセッション配置のリクエストを処理するときに使用するキューを

作成します。• DescribeGameSessionQueues – GameLift リージョンで定義されているゲームセッションキューを取

得します。• UpdateGameSessionQueue– ゲームセッションキューの設定を変更します。• DeleteGameSessionQueue – リージョンからゲームセッションキューを削除します。

• FlexMatch リソースを管理します。 ゲームのマッチメーカーを設定し、カスタム仕様を満たすプレイヤーのチームを作成するマッチングルールを指定します。• CreateMatchmakingConfiguration – プレイヤーグループを構築し、新しいゲームセッションに配置す

る手順を含むマッチメイキング設定を作成します。• DescribeMatchmakingConfigurations – GameLift リージョンが定義されているマッチメイキング設定

を取得します。• UpdateMatchmakingConfiguration – マッチメイキング設定の設定を変更します。キュー。• DeleteMatchmakingConfiguration – リージョンからマッチメイキング設定を削除します。• CreateMatchmakingRuleSet – プレイヤーのマッチングを検索するときに使用するルールのセットを作

成します。• DescribeMatchmakingRuleSets – GameLift リージョンで定義されているマッチメイキングルールセッ

トを取得します。

Version243

Page 250: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドGameLift FleetIQ 向け API

• ValidateMatchmakingRuleSet – 一連のマッチメイキングルールの構文を検証します。• DeleteMatchmakingRuleSet – リージョンからマッチメイキングルールセットを削除します。

• フリートのアクティビティをモニタリングします。 フリートのサーバープロセスとゲームセッションアクティビティに関する最新情報を取得します。• DescribeFleetUtilization – フリートで現在アクティブなサーバープロセス、ゲームセッション、プレイ

ヤーの数の統計を取得します。• DescribeFleetEvents – 指定した期間中のフリートの記録されたイベントを表示します。• DescribeGameSessions – ゲームの実行時間や現在のプレイヤー数など、ゲームセッションのメタ

データを取得します。• インスタンスにリモートでアクセスします。 指定されたフリートインスタンスのアクティビティをモニ

タリングまたはトラブルシューティングします。• DescribeInstances – ID、IP アドレス、ステータスなど、フリート内の各インスタンスに関する情報を

取得します。• GetInstanceAccess – フリート内の指定されたインスタンスにリモート接続するために必要なアクセ

ス認証情報をリクエストします。• フリートエイリアスを管理します。 フリートを表すエイリアスを使用するか、別の送信先を指定しま

す。• CreateAlias – 新しいエイリアスを定義し、必要に応じてフリートに割り当てます。• ListAliases – GameLift リージョンで定義されているすべてのフリートエイリアスを取得します。• DescribeAlias – 既存のエイリアスに関する情報を取得します。• UpdateAlias – エイリアスの設定 (フリートから別のフリートへのリダイレクトなど) を変更します。• DeleteAlias – リージョンからエイリアスを削除します。• ResolveAlias – 指定されたエイリアスが指すフリート ID を取得します。

• フリートの VPC ピア接続を管理します。 VPC ピア接続を使用して、GameLift と他の AWS リソース間の安全なアクセスを確立します。• CreateVpcPeeringAuthorization – いずれかの VPC へのピア接続を許可します。• DescribeVpcPeeringAuthorizations – 有効なピア接続の承認を取得します。• DeleteVpcPeeringAuthorization – ピア接続の承認を削除します。• CreateVpcPeeringConnection – GameLift フリートの VPC といずれかの VPC の間にピア接続を確立

します。• DescribeVpcPeeringConnections – GameLift フリートとのアクティブまたは保留中の VPC ピア接続

に関する情報を取得します。• DeleteVpcPeeringConnection – GameLift フリートとの VPC ピア接続を削除します。

GameLift FleetIQ 向け APIこれらの API は、スタンドアロン GameLift FleetIQ ソリューションの一部です。これらの操作を使用して、Amazon EC2 リソースで Auto Scaling グループとともにホストされているゲームサーバーグループとゲームサーバーを管理します。スタンドアロン GameLift FleetIQ の詳細については、「GameLift FleetIQガイド [パブリックプレビュー] (p. 200)」を参照してください。

• ゲームサーバーグループを管理します。 ゲームサーバーグループを構成して、ゲームサーバーをAmazon EC2 リソースにデプロイし、ゲームのホスティングを最適化します。• CreateGameServerGroup – 新しいゲームサーバーグループを作成し、対応する Auto Scaling グルー

プをセットアップして、ゲームサーバーをホストするインスタンスの起動を開始します。• ListGameServerGroups – GameLift リージョン内のすべてのゲームサーバーグループのリストを取得

します。• DescribeGameServerGroup – ゲームサーバーグループのメタデータを取得します。• UpdateGameServerGroup – ゲームサーバーグループのメタデータを変更します。

Version244

Page 251: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド利用可能なプログラミング言語

• DeleteGameServerGroup – ゲームサーバーグループを完全に削除し、関連付けられているホスティングリソースの FleetIQ アクティビティを終了します。

• ResumeGameServerGroup – ゲームサーバーグループで中断された FleetIQ アクティビティを復元します。

• SuspendGameServerGroup – ゲームサーバーグループの FleetIQ アクティビティを一時的に停止します。

• ゲームサーバーのステータスを管理します。 ゲームサーバーのステータスを追跡し、新しいゲームセッションのリクエストに応答します。• RegisterGameServer – 新しいゲームサーバーがゲームプレイをホストする準備ができていることを

GameLift FleetIQ に通知します。• ListGameServers – ゲームサーバーグループで現在実行されているすべてのゲームサーバーのリスト

を取得します。• ClaimGameServer– 新しいゲームセッションをホストするゲームサーバーを見つけて予約します。• DescribeGameServer – ゲームサーバーのメタデータを取得します。

UpdateGameServer – ゲームサーバーのメタデータ、健全性ステータス、または利用状況ステータスを変更します。

• DeregisterGameServer – ゲームサーバーグループからゲームサーバーリソースを削除します。

利用可能なプログラミング言語Amazon GameLift の AWS SDK は以下の言語で利用可能です。開発環境のサポートの詳細については、各言語のドキュメントを参照してください。

• C++ (SDK ドキュメント) (Amazon GameLift)• Java (SDK ドキュメント) (Amazon GameLift)• .NET (SDK ドキュメント) (Amazon GameLift)• Go (SDK ドキュメント) (Amazon GameLift)• Python (SDK ドキュメント) (Amazon GameLift)• Ruby (SDK ドキュメント) (Amazon GameLift)• PHP (SDK ドキュメント) (Amazon GameLift)• JavaScript/Node.js (SDK ドキュメント) (Amazon GameLift)

Amazon GameLift リアルタイムサーバー リファレンス

このセクションには、Amazon GameLift リアルタイムサーバー SDK のリファレンスドキュメントが含まれます。また、RealTime クライアント API と、リアルタイムサーバー スクリプトを設定するためのガイダンスも含まれます。

トピック• リアルタイムサーバー Client API (C#) リファレンス (p. 245)• Amazon GameLift リアルタイムサーバー スクリプトリファレンス (p. 256)

リアルタイムサーバー Client API (C#) リファレンスRealTime クライアント API を使用して、Amazon GameLift リアルタイムサーバー で使用するマルチプレイヤーゲームクライアントを準備します。統合プロセスの詳細については、「リアルタイムサーバー の開

Version245

Page 252: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムクライアント API (C#) リファレンス

始方法 (p. 34)」を参照してください。クライアント API には、ゲームクライアントが RealTime サーバーに接続し、サーバーを介して他のゲームクライアントとメッセージやデータを交換できるようにする同期API 呼び出しと非同期コールバックのセットが含まれています。

この API は以下のライブラリで定義されています。

Client.cs

• 非同期アクション (p. 246)• 非同期コールバック (p. 250)• データ型 (p. 252)

RealTime クライアント API をセットアップするには

1. Amazon GameLift RealTime クライアント SDK をダウンロードします。2. C# SDK ライブラリを構築します。 ソリューションファイル

GameScaleLightweightClientSdkNet45.sln を探します。C# Server SDK の最小要件と追加のビルドオプションについては、README.md ファイルを参照してください。IDE で、ソリューションファイルをロードします。SDK ライブラリを生成するには、NuGet パッケージを復元し、ソリューションを構築します。

3. RealTime クライアントライブラリをゲームクライアントプロジェクトに追加します。

リアルタイムサーバー Client API (C#) リファレンス: アクションこの RealTime クライアント API リファレンスは、Amazon GameLift フリートにデプロイされた リアルタイムサーバー で使用するマルチプレイヤーゲームを準備するのに役立ちます。統合プロセスの詳細については、「リアルタイムサーバー の開始方法 (p. 34)」を参照してください。

• 非同期アクション• 非同期コールバック (p. 250)• データ型 (p. 252)

Client()

Realtime サーバーと通信するように新しいクライアントを初期化し、使用する接続のタイプを識別します。

構文

public Client(ClientConfiguration configuration)

パラメータ

clientConfiguration

クライアント/サーバー接続タイプを指定する設定の詳細。このパラメータを指定しないで Client() を呼び出すことを選択できます。ただしこのアプローチでは、デフォルトでセキュリティ保護なしの接続になります。

タイプ: ClientConfiguration (p. 252)

必須: いいえ

Version246

Page 253: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムクライアント API (C#) リファレンス

戻り値

Realtime サーバーとの通信に使用するリアルタイムクライアントのインスタンスを返します。

Connect()

ゲームセッションをホストしているサーバープロセスへの接続をリクエストします。

構文

public ConnectionStatus Connect(string endpoint, int remoteTcpPort, int listenPort, ConnectionToken token)

パラメータ

エンドポイント

接続するゲームセッションの DNS 名または IP アドレス。エンドポイントは GameSession オブジェクトで指定されます。このオブジェクトは AWS SDK Amazon GameLift API アクションStartGameSessionPlacement、CreateGameSession、または DescribeGameSessions のクライアント呼び出しに応じて返されます。

Note

TLS 証明書の生成が有効になっているフリートで Realtime サーバーが実行されている場合は、DNS 名を使用する必要があります。

型: 文字列

必須: はいremoteTcpPort

ゲームセッションに割り当てられている TCP 接続のポート番号。この情報は、GameSession オブジェクトで指定されます。これは、StartGameSessionPlacement CreateGameSession、またはDescribeGameSession リクエストに応答して返されます。

タイプ: 整数

有効な値: 1900 ~ 2000。

必須: はいlistenPort

ゲームクライアントが UDP チャンネルを使用して送信されたメッセージをリッスンしているポート番号。

タイプ: 整数

有効な値: 33400 ~ 33500。

必須: はいトークン

サーバープロセスにリクエストしているゲームクライアントを識別するオプションの情報。

タイプ: ConnectionToken (p. 253)

必須: はい

Version247

Page 254: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムクライアント API (C#) リファレンス

戻り値

クライアントの接続ステータスを示す ConnectionStatus (p. 255) 列挙値を返します。

Disconnect()

ゲームセッションに接続すると、ゲームクライアントをゲームセッションから切断します。

構文

public void Disconnect()

パラメータ

このアクションにはパラメータがありません。

戻り値

このメソッドは何も返しません。

NewMessage()

指定されたオペレーションコードで新しいメッセージオブジェクトを作成します。メッセージオブジェクトが返されたら、ターゲットを指定し、配信方法を更新します。必要に応じてデータペイロードを追加して、メッセージの内容を完成させます。完了したら、SendMessage() を使用してメッセージを送信します。

構文

public RTMessage NewMessage(int opCode)

パラメータ

opCode

プレイヤーの移動やサーバーの通知など、ゲームのイベントやアクションを識別する開発者定義のオペレーションコード。

タイプ: 整数

必須: はい

戻り値

指定されたオペレーションコードとデフォルトの配信方法を含む RTMessage (p. 253) オブジェクトを返します。配信インテントパラメータはデフォルトで FAST に設定されています。

SendMessage()

指定された配信方法を使用して、プレイヤーまたはグループにメッセージを送信します。

構文

public void SendMessage(RTMessage message)

Version248

Page 255: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムクライアント API (C#) リファレンス

パラメータ

メッセージ

ターゲット受信者、配信方法、およびメッセージの内容を指定するメッセージオブジェクト。

タイプ: RTMessage (p. 253)

必須: はい

戻り値

このメソッドは何も返しません。

JoinGroup()指定されたグループのメンバーシップにプレイヤーを追加します。グループには、ゲームに接続しているすべてのプレイヤーを含めることができます。参加すると、プレイヤーはグループに送信された今後のメッセージをすべて受信し、グループ全体にメッセージを送信できます。

構文

public void JoinGroup(int targetGroup)

パラメータ

targetGroup

プレイヤーを追加するグループを識別する一意の ID。グループ ID は開発者定義です。

タイプ: 整数

必須: はい

戻り値

このメソッドは何も返しません。このリクエストは信頼できる (TCP) 配信方法を使用して送信されるため、失敗したリクエストはコールバックをトリガーしますOnError() (p. 251)。

LeaveGroup()指定されたグループのメンバーシップからプレイヤーを削除します。グループに参加しなくなったプレイヤーは、グループに送信されたメッセージを受信せず、グループ全体にメッセージを送信することもできません。

構文

public void LeaveGroup(int targetGroup)

パラメータ

targetGroup

プレイヤーを削除するグループを識別する一意の ID。グループ ID は開発者定義です。

タイプ: 整数

必須: はい

Version249

Page 256: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムクライアント API (C#) リファレンス

戻り値

このメソッドは何も返しません。このリクエストは信頼できる (TCP) 配信方法を使用して送信されるため、失敗したリクエストはコールバックをトリガーしますOnError() (p. 251)。

RequestGroupMembership()指定されたグループのプレイヤーのリストをゲームクライアントに送信するようにリクエストします。グループのメンバーであるかどうかにかかわらず、どのプレイヤーでもこの情報をリクエストできます。このリクエストに応答して、メンバーシップリストは OnGroupMembershipUpdated() (p. 252) コールバックを介してクライアントに送信されます。

構文

public void RequestGroupMembership(int targetGroup)

パラメータ

targetGroup

メンバーシップ情報を取得するグループを識別する一意の ID。グループ ID は開発者定義です。

タイプ: 整数

必須: はい

戻り値

このメソッドは何も返しません。

リアルタイムサーバー クライアント API (C#) リファレンス: 非同期コールバックこの C# RealTime クライアント API リファレンスを使用して、Amazon GameLift フリートにデプロイされている リアルタイムサーバー で使用するためのマルチプレイヤーゲームを準備してください。統合プロセスの詳細については、「リアルタイムサーバー の開始方法 (p. 34)」を参照してください。

• 非同期アクション (p. 246)• 非同期コールバック• データ型 (p. 252)

ゲームクライアントは、イベントに応答するためにこれらのコールバックメソッドを実装する必要があります。RealTime サーバーはこれらのコールバックを呼び出して、ゲーム関連の情報をゲームクライアントに送信します。同じイベントのコールバックは、RealTime サーバースクリプトのカスタムゲームロジックでも実装できます。「リアルタイムサーバー のスクリプトのコールバック (p. 256)」を参照してください。

コールバックメソッドは ClientEvents.cs で定義されています。

OnOpen()サーバープロセスがゲームクライアントの接続リクエストを受け入れて接続を開くと呼び出されます。

構文

public void OnOpen()

Version250

Page 257: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムクライアント API (C#) リファレンス

パラメータ

このメソッドにはパラメータはありません。

戻り値

このメソッドは何も返しません。

OnClose()ゲームセッションの終了後など、サーバープロセスがゲームクライアントとの接続を終了したときに呼び出されます。

構文

public void OnClose()

パラメータ

このメソッドにはパラメータはありません。

戻り値

このメソッドは何も返しません。

OnError()リアルタイムクライアント API リクエストに障害が発生したときに呼び出されます。このコールバックは、さまざまな接続エラーを処理するようにカスタマイズできます。

構文

private void OnError(byte[] args)

パラメータ

このメソッドにはパラメータはありません。

戻り値

このメソッドは何も返しません。

OnDataReceived()ゲームクライアントが RealTime サーバーからメッセージを受信したときに呼び出されます。これは、メッセージと通知がゲームクライアントによって受信される主な方法です。

構文

public void OnDataReceived(DataReceivedEventArgs dataReceivedEventArgs)

パラメータ

dataReceivedEventArgs

メッセージのアクティビティに関連する情報。

タイプ: DataReceivedEventArgs (p. 254)

必須: はい

Version251

Page 258: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムクライアント API (C#) リファレンス

戻り値

このメソッドは何も返しません。

OnGroupMembershipUpdated()プレイヤーが属するグループのメンバーシップが更新されたときに呼び出されます。このコールバックは、クライアントが RequestGroupMembership を呼び出すときにも呼び出されます。

構文

public void OnGroupMembershipUpdated(GroupMembershipEventArgs groupMembershipEventArgs)

パラメータ

groupMembershipEventArgs

グループメンバーシップアクティビティに関連する情報。

タイプ: GroupMembershipEventArgs (p. 254)

必須: はい

戻り値

このメソッドは何も返しません。

リアルタイムサーバー クライアント API (C#) リファレンス:データ型この RealTime クライアント API リファレンスは、Amazon GameLift フリートにデプロイされた リアルタイムサーバー で使用するマルチプレイヤーゲームを準備するのに役立ちます。統合プロセスの詳細については、「リアルタイムサーバー の開始方法 (p. 34)」を参照してください。

• 非同期アクション (p. 246)• 非同期コールバック (p. 250)• データ型

ClientConfigurationゲームクライアントが RealTime サーバーに接続する方法に関する情報。

コンテンツ

ConnectionType

使用するクライアント/サーバー接続のタイプ (セキュリティ保護ありまたはなし)。接続タイプを指定しない場合、デフォルトではセキュリティ保護なしになります。

Note

TLS 証明書の生成が有効になっているセキュリティ保護ありのフリート上の Realtime サーバーに接続する場合は、値 RT_OVER_WSS_DTLS_TLS12 を使用する必要があります。

型: ConnectionType 列挙 (p. 255)値。

必須: いいえ

Version252

Page 259: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムクライアント API (C#) リファレンス

ConnectionToken

RealTime サーバーとの接続をリクエストしているゲームクライアントまたはプレイヤーに関する情報。

内容

playerSessionId

新しいプレイヤーセッションが作成されたときに、GameLift によって発行される一意の ID。プレイヤーセッション ID は PlayerSession オブジェクトで指定されます。このオブジェクトは AWS SDK Amazon GameLift API アクションStartGameSessionPlacement、CreateGameSession、DescribeGameSessions、またはDescribePlayerSessions のクライアント呼び出しに応じて返されます。

型: 文字列

必須: いいえpayload

接続時に RealTime サーバーに伝達される開発者定義の情報。これには、カスタムサインインメカニズムに使用できる任意のデータが含まれます。たとえば、ペイロードは、クライアントに接続を許可する前に、RealTime サーバースクリプトによって処理される認証情報を提供します。

タイプ: バイト配列

必須: いいえ

RTMessage

メッセージの内容と配信情報。メッセージはターゲットプレイヤーかターゲットグループのどちらかを指定する必要があります。

内容

opCode

プレイヤーの移動やサーバーの通知など、ゲームのイベントやアクションを識別する開発者定義のオペレーションコード。メッセージのオペコードは、提供されているデータペイロードのコンテキストを提供します。NewMessage() を使用して作成されたメッセージにはすでにオペレーションコードが設定されていますが、いつでも変更できます。

タイプ: 整数

必須: はいtargetPlayer

送信されているメッセージの目的の受信者であるプレイヤーを識別する一意の ID。ターゲットは、サーバー自体 (サーバー ID を使用) または別のプレイヤー (プレイヤー ID を使用) のいずれかです。

タイプ: 整数

必須: いいえtargetGroup

送信されているメッセージの目的の受信者であるグループを識別する一意の ID。グループ ID は開発者定義です。

タイプ: 整数

Version253

Page 260: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムクライアント API (C#) リファレンス

必須: いいえdeliveryIntent

信頼性のある TCP 接続を使用してメッセージを送信するか、または高速 UDP チャンネルを使用してメッセージを送信するかを示します。NewMessage() (p. 248) を使用して作成したメッセージ。

タイプ: DeliveryIntent enum

有効な値: FAST | RELIABLE

必須: はいpayload

メッセージの内容。この情報は、必要に応じて付随するオペレーションコードに基づいてゲームクライアントによって処理されるように構成されています。ゲームクライアント間またはゲームクライアントとリアルタイムサーバーとの間で通信される必要があるゲームの状態データまたは他の情報が含まれています。

タイプ: バイト配列

必須: いいえ

DataReceivedEventArgsOnDataReceived() (p. 251) コールバックで提供されるデータ

内容

sender

メッセージを発信したエンティティ (プレイヤー ID またはサーバー ID) を識別する一意の ID。

タイプ: 整数

必須: はいopCode

プレイヤーの移動やサーバーの通知など、ゲームのイベントやアクションを識別する開発者定義のオペレーションコード。メッセージのオペコードは、提供されているデータペイロードのコンテキストを提供します。

タイプ: 整数

必須: はいdata

メッセージの内容。この情報は、必要に応じて付随するオペレーションコードに基づいてゲームクライアントによって処理されるように構成されています。ゲームクライアント間またはゲームクライアントとリアルタイムサーバーとの間で通信される必要があるゲームの状態データまたは他の情報が含まれています。

タイプ: バイト配列

必須: いいえ

GroupMembershipEventArgsOnGroupMembershipUpdated() (p. 252) コールバックで提供されるデータ

Version254

Page 261: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムクライアント API (C#) リファレンス

内容

sender

グループメンバーシップの更新をリクエストしたプレイヤーを識別する一意の ID。

タイプ: 整数

必須: はいopCode

ゲームのイベントまたはアクションを識別する開発者定義のオペレーションコード。

タイプ: 整数

必須: はいgroupId

送信されているメッセージの目的の受信者であるグループを識別する一意の ID。グループ ID は開発者定義です。

タイプ: 整数

必須: はいplayerId

指定されたグループの現在のメンバーであるプレイヤー ID のリスト。

タイプ: 整数配列

必須: はい

列挙型RealTime クライアント SDK に定義された列挙値は次のように定義されます。

ConnectionStatus• CONNECTED – ゲームクライアントは TCP 接続のみで RealTime サーバーに接続されています。

配信目的に関係なく、すべてのメッセージは TCP 経由で送信されます。• CONNECTED_SEND_FAST – ゲームクライアントは、TCP および UDP 接続で RealTime サーバー

に接続されています。ただし、UDP を介してメッセージを受信する機能はまだ検証されていません。その結果、ゲームクライアントに送信されるすべてのメッセージは TCP を使用します。

• CONNECTED_SEND_AND_RECEIVE_FAST – ゲームクライアントは、TCP および UDP 接続でRealTime サーバーに接続されています。ゲームクライアントは、TCP または UDP を使用してメッセージを送受信できます。

• CONNECTING ゲームクライアントが接続リクエストを送信し、RealTime サーバーがそれを処理しています。

• DISCONNECTED_CLIENT_CALL – ゲームクライアントからの Disconnect() (p. 248) リクエストに応答して、ゲームクライアントが RealTime リアルタイムサーバーから切断されました。

• DISCONNECTED – ゲームクライアントが切断呼び出し以外の理由で、クライアントが RealTimeサーバーから切断されました。

ConnectionType• RT_OVER_WSS_DTLS_TLS12 – セキュリティ保護ありの接続タイプ。

TLS 証明書の生成が有効になっている GameLift フリートで実行されている Realtime サーバーで使用します。セキュリティ保護ありの接続を使用する場合、TCP トラフィックは TLS 1.2 を使用して暗号化され、UDP トラフィックは DTLS 1.2 を使用して暗号化されます。

Version255

Page 262: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー スクリプトリファレンス

• RT_OVER_WSS_DTLS_TLS12 – セキュリティ保護なしの接続タイプ。• RT_OVER_WEBSOCKET – セキュリティ保護なしの接続タイプ。この値は推奨されなくなりまし

た。DeliveryIntent

• FAST – UDP チャンネルを使用して配信されました。• RELIABLE – TCP 接続を使用して配信されました。

Amazon GameLift リアルタイムサーバー スクリプトリファレンス以下のリソースを使用して、RealTime スクリプトのカスタムロジックを構築します。

トピック• リアルタイムサーバー のスクリプトのコールバック (p. 256)• リアルタイムサーバー インターフェイス (p. 258)

リアルタイムサーバー のスクリプトのコールバックRealTime スクリプトにこれらのコールバックを実装することで、イベントに応答するためのカスタムロジックを提供できます。

init

RealTime サーバーを初期化し、Realtime Server インターフェイスを受け取ります。

構文

init(rtsession)

onMessage

受信したメッセージがサーバーに送信されたときに呼び出されます。

構文

onMessage(gameMessage)

onHealthCheck

ゲームセッションの状態を設定するために呼び出されます。デフォルトでは、ヘルスステータスは正常(true) です。このコールバックは、カスタムヘルスチェックを実行してステータスを返すために実装できます。

構文

onHealthCheck()

onStartGameSession

新しいゲームセッションが開始されてゲームセッションオブジェクトを渡されると呼び出されます。

Version256

Page 263: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー スクリプトリファレンス

構文

onStartGameSession(session)

onProcessTerminate

サーバープロセスが Amazon GameLift サービスによって終了中になると呼び出されます。これは、ゲームセッションから正常に終了するためのトリガーとして機能します。processEnding(). を呼び出す必要はありません

構文

onProcessTerminate()

onPlayerConnect

プレイヤーが接続をリクエストし、初期検証に合格したときに呼び出されます。

構文

onPlayerConnect(connectMessage)

onPlayerAccepted

プレイヤーの接続が受け入れられると呼び出されます。

構文

onPlayerAccepted(player)

onPlayerDisconnect

プレイヤーが切断リクエストを送信するか、または他の方法でゲームセッションから切断したときに呼び出されます。

構文

onPlayerDisconnect(peerId)

onProcessStarted

サーバープロセスの起動時に呼び出されます。このコールバックにより、スクリプトはゲームセッションをホストするための準備に必要なカスタムタスクを実行できます。

構文

onProcessStarted(args)

onSendToPlayer

あるプレイヤーから別のプレイヤーに配信されるメッセージがサーバー上で受信されたときに呼び出されます。このプロセスはメッセージが配信される前に実行されます。

Version257

Page 264: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー スクリプトリファレンス

構文

onSendToPlayer(gameMessage)

onSendToGroupグループに配信されるメッセージが 1 人のプレイヤーからサーバー上で受信されたときに呼び出されます。このプロセスはメッセージが配信される前に実行されます。

構文

onSendToGroup(gameMessage))

onPlayerJoinGroupプレイヤーがグループに参加するためのリクエストを送信したときに呼び出されます。

構文

onPlayerJoinGroup(groupId, peerId)

onPlayerLeaveGroupプレイヤーがグループから脱退するためのリクエストを送信したときに呼び出されます。

構文

onPlayerLeaveGroup(groupId, peerId)

リアルタイムサーバー インターフェイスRealTime スクリプトが初期化を実行すると、RealTime サーバーへのインターフェイスが返されます。このトピックでは、インターフェイスを通じて使用できるプロパティとメソッドについて説明します。RealTime スクリプトの記述方法の詳細について説明し、「RealTime スクリプトの作成 (p. 67)」で詳細なスクリプト例を示します。

RealTime インターフェイスは、以下のオブジェクトへのアクセスを提供します。

• session• player• gameMessage

RealTime セッションオブジェクト

以下のメソッドを使用して、サーバー関連の情報にアクセスし、サーバー関連のアクションを実行します。

getPlayers()現在ゲームセッションに接続しているプレイヤーのピア ID のリストを取得します。プレイヤーオブジェクトの配列を返します。

構文

rtSession.getPlayers()

Version258

Page 265: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー スクリプトリファレンス

broadcastGroupMembershipUpdate()更新されたグループメンバーシップリストのプレイヤーグループへの配信をトリガーします。ブロードキャストするメンバーシップ (groupIdToBroadcast) と更新を受け取るグループ (targetGroupId) を指定します。

構文

rtSession.broadcastGroupMembershipUpdate(groupIdToBroadcast, targetGroupId)

getServerId()メッセージをサーバーにルーティングするために使用される、サーバーの一意のピア ID 識別子を取得します。

構文

rtSession.getServerId()

getAllPlayersGroupId()現在ゲームセッションに接続しているすべてのプレイヤーを含むデフォルトグループのグループ ID を取得します。

構文

rtSession.getAllPlayersGroupId()

processEnding()ゲームサーバーを終了するために RealTime サーバーをトリガーします。この関数は、ゲームセッションから正常に終了するための RealTime スクリプトから呼び出す必要があります。

構文

rtSession.processEnding()

getGameSessionId()現在実行中のゲームセッションの一意の ID を取得します。

構文

rtSession.getGameSessionId()

getLogger()ログ記録用のインターフェイスを取得します。この関数を使用して、ゲームセッションログに収集されるステートメントを記録します。ロガーは「info」、「warn」、および「error」ステートメントの使用をサポートしています。例: logger.info("<string>")。

構文

rtSession.getLogger()

Version259

Page 266: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリアルタイムサーバー スクリプトリファレンス

sendMessage()newTextGameMessage または newBinaryGameMessage を使用して作成されたメッセージを RealTimeサーバーからプレイヤー受取人に UDP チャネルで送信します。プレイヤーのピア ID を使用して受取人を識別します。

構文

rtSession.sendMessage(gameMessage, targetPlayer)

sendGroupMessage()newTextGameMessage または newBinaryGameMessage を使用して作成されたメッセージを RealTimeサーバーからプレイヤーグループ内のすべてのプレイヤーに UDP チャネルで送信します。グループ ID を使用して受取人を識別します。

構文

rtSession.sendGroupMessage(gameMessage, targetGroup)

sendReliableMessage()newTextGameMessage または newBinaryGameMessage を使用して作成されたメッセージを RealTimeサーバーからプレイヤー受取人に TCP チャネルで送信します。プレイヤーのピア ID を使用して受取人を識別します。

構文

rtSession.sendReliableMessage(gameMessage, targetPlayer)

sendReliableGroupMessage()newTextGameMessage または newBinaryGameMessage を使用して作成されたメッセージを RealTimeサーバーからプレイヤーグループ内のすべてのプレイヤーに TCP チャネルで送信します。グループ ID を使用して受取人を識別します。

構文

rtSession.sendReliableGroupMessage(gameMessage, targetGroup)

newTextGameMessage()SendMessage 関数を使用してサーバーからプレイヤー受取人に送信される、テキストを含む新しいメッセージを作成します。メッセージ形式は、Realtime Client SDK で使用されている形式と同様です(「RTMessage (p. 253)」を参照)。gameMessage オブジェクトを返します。

構文

rtSession.newTextGameMessage(opcode, sender, payload)

newBinaryGameMessage()SendMessage 関数を使用してサーバーからプレイヤー受取人に送信される、バイナリデータを含む新しいメッセージを作成します。メッセージ形式は、Realtime Client SDK で使用されている形式と同様です(「RTMessage (p. 253)」を参照)。gameMessage オブジェクトを返します。

Version260

Page 267: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー SDK リファレンス

構文

rtSession.newBinaryGameMessage(opcode, sender, binaryPayload)

プレイヤーオブジェクト

プレイヤー関連の情報にアクセスします。

player.peerIdゲームクライアントが RealTime サーバーに接続してゲームセッションに参加したときに割り当てられる一意の ID。

player.playerSessionIdゲームクライアントが RealTime サーバーに接続してゲームセッションに参加したときに参照したプレイヤーセッション ID。

ゲームメッセージオブジェクト

以下のメソッドを使用して、RealTime サーバーによって受信されたメッセージにアクセスします。ゲームクライアントから受信したメッセージは RTMessage (p. 253) 構造になっています。

gameMessage.opcodeメッセージに含まれているオペレーションコード。

gameMessage.payloadメッセージに含まれているペイロード。テキストまたはバイナリです。

gameMessage.senderメッセージを送信したゲームクライアントのピア ID。

gameMessage.reliableメッセージが TCP (true) または UDP (false) のどちらで送信されたかを示すブール値。

Amazon GameLift サーバー SDK リファレンスこのセクションには、Amazon GameLift サーバー SDK のリファレンスドキュメントが含まれます。Server SDK を使用してカスタムゲームサーバーを Amazon GameLift サービスと統合し、必要に応じてゲームサーバーを起動および管理します。

トピック• Amazon GameLiftサーバー API (C++) リファレンス (p. 261)• Amazon GameLiftサーバー API (C#) リファレンス (p. 277)• Unreal Engine の Amazon GameLift サーバー API リファレンス (p. 291)

Amazon GameLiftサーバー API (C++) リファレンスこの Amazon GameLift C++ サーバー API リファレンスは、Amazon GameLift で使用するマルチプレイヤーゲームを準備するのに役立ちます。統合プロセスの詳細については、「ゲームサーバーへの AmazonGameLift の追加 (p. 44)」を参照してください。

Version261

Page 268: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C++) リファレンス

この API は、GameLiftServerAPI.h、LogParameters.h、および ProcessParameters.h で定義されています。

• アクション (p. 262)• データ型 (p. 273)

Amazon GameLift サーバー API (C++) リファレンス: アクションこの Amazon GameLift C++ サーバー API リファレンスは、Amazon GameLift で使用するマルチプレイヤーゲームを準備するのに役立ちます。統合プロセスの詳細については、「ゲームサーバーへの AmazonGameLift の追加 (p. 44)」を参照してください。

この API は、GameLiftServerAPI.h、LogParameters.h、ProcessParameters.h で定義されています。

• アクション• データ型 (p. 273)

AcceptPlayerSession()指定されたプレイヤーセッション ID のプレイヤーがサーバープロセスに接続し、検証が必要であることをAmazon GameLift サービスに通知します。Amazon GameLift は、プレイヤーセッション ID が有効であること、つまり、そのプレイヤー ID でゲームセッションにプレイヤースロットが予約されていることを確認します。—検証後、Amazon GameLift はプレイヤースロットの状態を RESERVED から ACTIVE に変更します。

構文

GenericOutcome AcceptPlayerSession(const std::string& playerSessionId);

パラメータ

playerSessionId

Amazon GameLift サービスが AWS SDK Amazon GameLift API アクション CreatePlayerSession の呼び出しに応じて発行する一意の ID。ゲームクライアントはサーバープロセスに接続するときにこの IDを参照します。

タイプ: std::string

必須: いいえ

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

この例では、無効なプレイヤーセッション ID の検証や拒否を含む、接続リクエストを処理するための関数を示します。

void ReceiveConnectingPlayerSessionID (Connection& connection, const std::string& playerSessionId){ Aws::GameLift::GenericOutcome connectOutcome = Aws::GameLift::Server::AcceptPlayerSession(playerSessionId); if(connectOutcome.IsSuccess()) {

Version262

Page 269: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C++) リファレンス

connectionToSessionMap.emplace(connection, playerSessionId); connection.Accept(); } else { connection.Reject(connectOutcome.GetError().GetMessage(); } }

ActivateGameSession()サーバープロセスがゲームセッションを開始し、プレイヤーの接続を受ける準備ができていることをAmazon GameLift サービスに通知します。このアクションは、すべてのゲームセッションの初期化が完了した後、onStartGameSession() コールバック関数の一部として呼び出されます。

構文

GenericOutcome ActivateGameSession();

パラメータ

このアクションにはパラメーターがありません。

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

この例では、ActivateGameSession() が onStartGameSession() コールバック関数の一部として呼び出されていることを示しています。

void onStartGameSession(Aws::GameLift::Model::GameSession myGameSession){ // game-specific tasks when starting a new game session, such as loading map GenericOutcome outcome = Aws::GameLift::Server::ActivateGameSession();}

DescribePlayerSessions()設定、セッションメタデータ、プレイヤーデータを含む、プレイヤーセッションデータを取得します。このアクションを使用して、単一のプレイヤーセッション、ゲームセッション内のすべてのプレイヤーセッション、または単一のプレイヤー ID に関連付けられたすべてのプレイヤーセッションに関する情報を取得します。

構文

DescribePlayerSessionsOutcome DescribePlayerSessions ( const Aws::GameLift::Server::Model::DescribePlayerSessionsRequest &describePlayerSessionsRequest);

パラメータ

describePlayerSessionsRequest

取得するプレイヤーセッションを記述する DescribePlayerSessionsRequest (p. 273) オブジェクト。

必須: はい

Version263

Page 270: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C++) リファレンス

戻り値

成功した場合は、リクエストのパラメータに適合したプレイヤーセッションオブジェクトのセットを含む DescribePlayerSessionsOutcome オブジェクトを返します。プレイヤーセッションオブジェクトは、AWS SDK Amazon GameLift API PlayerSession データ型と同じ構造を持ちます。

この例は、指定したゲームセッションにアクティブに接続されているすべてのプレイヤーセッションのリクエストを示しています。NextToken を省略し、Limit 値を 10 に設定すると、Amazon GameLift はリクエストに一致する最初の 10 個のプレイヤーセッションを返します。

// Set request parametersAws::GameLift::Server::Model::DescribePlayerSessionsRequest request;request.SetPlayerSessionStatusFilter(Aws::GameLift::Server::Model::PlayerSessionStatusMapper::GetNameForPlayerSessionStatus(Aws::GameLift::Server::Model::PlayerSessionStatus::Active));request.SetLimit(10);request.SetGameSessionId("the game session ID"); // can use GetGameSessionId()

// Call DescribePlayerSessionsAws::GameLift::DescribePlayerSessionsOutcome playerSessionsOutcome = Aws::GameLift::Server::DescribePlayerSessions(request);

GetGameSessionId()

サーバープロセスがアクティブな場合、サーバープロセスが現在ホストしているゲームセッションの一意の識別子を取得します。識別子は ARN 形式で返されます:arn:aws:gamelift:<region>::gamesession/fleet-<fleet ID>/<ID string>

構文

AwsStringOutcome GetGameSessionId();

パラメータ

このアクションにはパラメーターがありません。

戻り値

成功した場合、ゲームセッション ID を AwsStringOutcome オブジェクトとして返します。成功しなかった場合、エラーメッセージを返します。

Aws::GameLift::AwsStringOutcome sessionIdOutcome = Aws::GameLift::Server::GetGameSessionId();

GetInstanceCertificate()

フリートとそのインスタンスに関連付けられている pem エンコードされた TLS 証明書のファイルの場所を取得します。この証明書は、証明書設定を GENERATED に指定した新しいフリートが作成されると生成されます。この証明書を使用して、ゲームクライアントとのセキュリティ保護ありの接続を確立し、クライアント/サーバー通信を暗号化します。

構文

GetInstanceCertificateOutcome GetInstanceCertificate();

Version264

Page 271: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C++) リファレンス

パラメータ

このアクションにはパラメーターがありません。

戻り値

成功すると、インスタンスに保存されているフリートの TLS 証明書ファイルの場所を含むGetInstanceCertificateOutcome オブジェクトを返します。成功しなかった場合、エラーメッセージを返します。

Aws::GameLift::GetInstanceCertificateOutcome certificateOutcome = Aws::GameLift::Server::GetInstanceCertificate();

GetSdkVersion()使用中の SDK の現在のバージョン番号を返します。

構文

AwsStringOutcome GetSdkVersion();

パラメータ

このアクションにはパラメーターがありません。

戻り値

成功した場合、AwsStringOutcome オブジェクトとして現在の SDK バージョンを返します。返される文字列は、バージョン番号のみを含みます。(例:"3.1.5")。成功しなかった場合、エラーメッセージを返します。

Aws::GameLift::AwsStringOutcome SdkVersionOutcome = Aws::GameLift::Server::GetSdkVersion();

GetTerminationTime()終了時刻が判る場合に、サーバープロセスがシャットダウンを予定している時刻を返します。サーバープロセスは、Amazon GameLift サービスから onProcessTerminate() コールバックを受信した後にこのアクションを実行します。サーバープロセスのシャットダウンにはいくつかの理由が考えられます。(1) プロセスの障害、(2) スケールダウンイベント中にインスタンスが終了した場合、(3) スポットインスタンスの中断 (p. 109)が原因でインスタンスが終了した場合。

プロセスが onProcessTerminate() コールバックを受信した場合、戻り値は、エポック秒の予想終了時刻です。終了時刻が判らない場合、戻り値は -1 であり、これはサーバープロセスがいつでも終了される可能性があることを示します。プロセスが onProcessTerminate() コールバックを受信しなかった場合、戻り値は常に -1 です。サーバープロセスのシャットダウン (p. 47)の詳細を確認してください。

構文

AwsLongOutcome GetTerminationTime();

パラメータ

このアクションにはパラメーターがありません。

Version265

Page 272: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C++) リファレンス

戻り値

成功した場合、AwsLongOutcome オブジェクトとして現在の SDK バージョンを返します。値はエポック病の終了時刻、または値 -1 のいずれかです。成功しなかった場合、エラーメッセージを返します。

Aws::GameLift::AwsLongOutcome TermTimeOutcome = Aws::GameLift::Server::GetTerminationTime();

InitSDK()

Amazon GameLift SDK を初期化します。このメソッドは起動時に他の Amazon GameLift 関連の初期化が実行される前に呼び出す必要があります。

構文

InitSDKOutcome InitSDK();

パラメータ

このアクションにはパラメーターがありません。

戻り値

成功した場合は、サーバープロセスが ProcessReady() (p. 267) を呼び出す準備ができていることを示すInitSdkOutcome オブジェクトを返します。

Aws::GameLift::Server::InitSDKOutcome initOutcome = Aws::GameLift::Server::InitSDK();

ProcessEnding()

サーバープロセスがシャットダウンしていることを Amazon GameLift サービスに通知します。このメソッドは、終了コード 0 で終了します。0 以外の終了コードでは、処理が問題なく終了しなかったというイベントメッセージが発生します。

構文

GenericOutcome ProcessEnding();

パラメータ

このアクションにはパラメーターがありません。

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

Aws::GameLift::GenericOutcome outcome = Aws::GameLift::Server::ProcessEnding();

Version266

Page 273: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C++) リファレンス

ProcessReady()サーバープロセスがゲームセッションをホストする準備ができたことを Amazon GameLift サービスに通知します。このメソッドは、InitSDK() (p. 266) の呼び出しが成功して必要な設定タスクが完了した後、サーバープロセスがゲームセッションをホストできるようになる前に呼び出す必要があります。

この呼び出しは同期です。非同期呼び出しを実行するには、ProcessReadyAsync() (p. 268) を使用します。詳細については、サーバープロセスを準備する (p. 45) をご覧ください。

構文

GenericOutcome ProcessReady( const Aws::GameLift::Server::ProcessParameters &processParameters);

パラメータ

processParameters

サーバープロセスに関する以下の情報を伝える ProcessParameters (p. 274) オブジェクト。• サーバープロセスと通信するために Amazon GameLift サービスが呼び出す、ゲームサーバーコード

で実装されたコールバックメソッドの名前。• サーバープロセスがリッスンするポートの番号。• Amazon GameLift でキャプチャして保存するゲームセッション固有のファイルへのパス。

必須: はい

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

この例では、ProcessReady() (p. 267) 呼び出しとコールバック関数の実装の両方を示します。

// Set parameters and call ProcessReadystd::string serverLog("serverOut.log"); // Example of a log file written by the game serverstd::vector<std::string> logPaths;logPaths.push_back(serverLog);

int listenPort = 9339;

Aws::GameLift::Server::ProcessParameters processReadyParameter = Aws::GameLift::Server::ProcessParameters( std::bind(&Server::onStartGameSession, this, std::placeholders::_1), std::bind(&Server::onProcessTerminate, this), std::bind(&Server::OnHealthCheck, this), std::bind(&Server::OnUpdateGameSession, this), listenPort, Aws::GameLift::Server::LogParameters(logPaths));

Aws::GameLift::GenericOutcome outcome = Aws::GameLift::Server::ProcessReady(processReadyParameter);

// Implement callback functionsvoid Server::onStartGameSession(Aws::GameLift::Model::GameSession myGameSession){ // game-specific tasks when starting a new game session, such as loading map GenericOutcome outcome = Aws::GameLift::Server::ActivateGameSession (maxPlayers);

Version267

Page 274: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C++) リファレンス

}

void Server::onProcessTerminate(){ // game-specific tasks required to gracefully shut down a game session, // such as notifying players, preserving game state data, and other cleanup GenericOutcome outcome = Aws::GameLift::Server::ProcessEnding();}

bool Server::onHealthCheck(){ bool health; // complete health evaluation within 60 seconds and set health return health;}

ProcessReadyAsync()サーバープロセスがゲームセッションをホストする準備ができたことを Amazon GameLift サービスに通知します。サーバープロセスがゲームセッションをホストする準備ができたら、このメソッドを呼び出します。パラメータは、特定の状況で呼び出す Amazon GameLift のコールバック関数名を指定します。ゲームサーバーコードは、これらの関数を実装する必要があります。

この呼び出しは非同期です。同期呼び出しを実行するには、ProcessReady() (p. 267) を使用します。詳細については、サーバープロセスを準備する (p. 45) をご覧ください。

構文

GenericOutcomeCallable ProcessReadyAsync( const Aws::GameLift::Server::ProcessParameters &processParameters);

パラメータ

processParameters

サーバープロセスに関する以下の情報を伝える ProcessParameters (p. 274) オブジェクト。• サーバープロセスと通信するために Amazon GameLift サービスが呼び出す、ゲームサーバーコード

で実装されたコールバックメソッドの名前。• サーバープロセスがリッスンするポートの番号。• Amazon GameLift でキャプチャして保存するゲームセッション固有のファイルへのパス。

必須: はい

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

// Set parameters and call ProcessReadystd::string serverLog("serverOut.log"); // This is an example of a log file written by the game serverstd::vector<std::string> logPaths;logPaths.push_back(serverLog);

int listenPort = 9339;

Aws::GameLift::Server::ProcessParameters processReadyParameter = Aws::GameLift::Server::ProcessParameters( std::bind(&Server::onStartGameSession, this, std::placeholders::_1),

Version268

Page 275: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C++) リファレンス

std::bind(&Server::onProcessTerminate, this), std::bind(&Server::OnHealthCheck, this), std::bind(&Server::OnUpdateGameSession, this), listenPort, Aws::GameLift::Server::LogParameters(logPaths));

Aws::GameLift::GenericOutcomeCallable outcome = Aws::GameLift::Server::ProcessReadyAsync(processReadyParameter);

// Implement callback functionsvoid onStartGameSession(Aws::GameLift::Model::GameSession myGameSession){ // game-specific tasks when starting a new game session, such as loading map GenericOutcome outcome = Aws::GameLift::Server::ActivateGameSession (maxPlayers);}

void onProcessTerminate(){ // game-specific tasks required to gracefully shut down a game session, // such as notifying players, preserving game state data, and other cleanup GenericOutcome outcome = Aws::GameLift::Server::ProcessEnding();}

bool onHealthCheck(){ // perform health evaluation and complete within 60 seconds return health;}

RemovePlayerSession()指定されたプレイヤーセッション ID のプレイヤーがサーバープロセスから切断されたことを AmazonGameLift サービスに通知します。それに応じて、Amazon GameLift はプレイヤースロットを新しいプレイヤーに割り当てられるよう利用可能に変更します。

構文

GenericOutcome RemovePlayerSession( const std::string& playerSessionId);

パラメータ

playerSessionId

Amazon GameLift サービスが AWS SDK Amazon GameLift API アクション CreatePlayerSession の呼び出しに応じて発行する一意の ID。ゲームクライアントはサーバープロセスに接続するときにこの IDを参照します。

タイプ: std::string

必須: いいえ

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

Aws::GameLift::GenericOutcome disconnectOutcome = Aws::GameLift::Server::RemovePlayerSession(playerSessionId);

Version269

Page 276: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C++) リファレンス

StartMatchBackfill()FlexMatch で作成されたゲームセッションの空きスロット用に新規プレイヤーを検索するリクエストを送信します。AWS SDK アクション StartMatchBackfill() 参照してください。このアクションを使用すると、ゲームセッションをホストするゲームサーバーのプロセスによってマッチバックフィルリクエストを開始できます。FlexMatch のバックフィル機能の詳細については、「FlexMatch を使用した既存のゲームのバックフィル (p. 80)」を参照してください。

このアクションは非同期です。新規プレイヤーが正常にマッチングされると、Amazon GameLift サービスはコールバック関数 OnUpdateGameSession() を使用して更新済みマッチメーカーデータを送信します。

サーバープロセスではアクティブなマッチバックフィルリクエストは一度に 1 つだけです。新しいリクエストを送信するには、まず StopMatchBackfill() (p. 271) を呼び出して元のリクエストをキャンセルする必要があります。

構文

StartMatchBackfillOutcome StartMatchBackfill ( const Aws::GameLift::Server::Model::StartMatchBackfillRequest &startBackfillRequest);

パラメータ

StartMatchBackfillRequest

次の情報を通信する StartMatchBackfillRequest (p. 276) オブジェクト。• バックフィルリクエストに割り当てるチケット ID。この情報はオプションです。ID が指定されてい

ない場合は Amazon GameLift が ID を 1 つ自動生成します。• リクエストを送信するマッチメーカー。完全な設定 ARN が必要です。この値は、ゲームセッショ

ンのマッチメーカーデータから取得できます。• バックフィルされるゲームセッションの ID。• ゲームセッションの現在のプレイヤーに利用可能なマッチメーキングデータ。

必須: はい

戻り値

StartMatchBackfillOutcome オブジェクトを、マッチバックフィルチケットまたはエラーメッセージを伴うエラーとともに返します。チケットのステータスは、AWS SDK アクション DescribeMatchmaking() を使用して追跡できます。

// Build a backfill requeststd::vector<Player> players;Aws::GameLift::Server::Model::StartMatchBackfillRequest startBackfillRequest;startBackfillRequest.SetTicketId("a ticket ID"); //optional, autogenerated if not providedstartBackfillRequest.SetMatchmakingConfigurationArn("the matchmaker configuration ARN"); //from the game session matchmaker datastartBackfillRequest.SetGameSessionArn("the game session ARN"); // can use GetGameSessionId()startBackfillRequest.SetPlayers(players); //from the game session matchmaker data

// Send backfill requestAws::GameLift::StartMatchBackfillOutcome backfillOutcome = Aws::GameLift::Server::StartMatchBackfill(startBackfillRequest);

Version270

Page 277: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C++) リファレンス

// Implement callback function for backfillvoid Server::OnUpdateGameSession(Aws::GameLift::Server::Model::GameSession gameSession, Aws::GameLift::Server::Model::UpdateReason updateReason, std::string backfillTicketId){ // handle status messages // perform game-specific tasks to prep for newly matched players}

StopMatchBackfill()StartMatchBackfill() (p. 270) とともに作成されたアクティブなマッチバックフィルリクエストをキャンセルします。AWS SDK アクション StopMatchmaking() も参照してください。FlexMatch のバックフィル機能の詳細については、「FlexMatch を使用した既存のゲームのバックフィル (p. 80)」を参照してください。

構文

GenericOutcome StopMatchBackfill ( const Aws::GameLift::Server::Model::StopMatchBackfillRequest &stopBackfillRequest);

パラメータ

StopMatchBackfillRequest

キャンセルするマッチメーキングチケットを識別する StopMatchBackfillRequest (p. 276)オブジェクト:• キャンセルされるバックフィルリクエストに割り当てられたチケット ID• バックフィルリクエストが送信されるマッチメーカー• バックフィルリクエストに関連付けられたゲームセッション

必須: はい

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

// Set backfill stop request parameters

Aws::GameLift::Server::Model::StopMatchBackfillRequest stopBackfillRequest;stopBackfillRequest.SetTicketId("the ticket ID");stopBackfillRequest.SetGameSessionArn("the game session ARN"); // can use GetGameSessionId()stopBackfillRequest.SetMatchmakingConfigurationArn("the matchmaker configuration ARN"); // from the game session matchmaker data

Aws::GameLift::GenericOutcome stopBackfillOutcome = Aws::GameLift::Server::StopMatchBackfillRequest(stopBackfillRequest);

TerminateGameSession()サーバープロセスがゲームセッションをシャットダウンしたことを Amazon GameLift サービスに通知します。各サーバープロセスは一度に 1 つのゲームセッションのみをホストしているので、どのセッションかを指定する必要はありません。このアクションは、ゲームセッションのシャットダウンプロセスの最後に呼び出されます。このアクションを呼び出した後、サーバープロセスはProcessReady() (p. 267) を呼び出して、新しいゲームセッションをホスト可能かどうかを通知します。

Version271

Page 278: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C++) リファレンス

または、ProcessEnding() (p. 266) を呼び出してサーバープロセスをシャットダウンし、インスタンスを終了します。

構文

GenericOutcome TerminateGameSession();

パラメータ

このアクションにはパラメーターがありません。

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

この例は、ゲームセッションの終了時のサーバープロセスを示しています。

// game-specific tasks required to gracefully shut down a game session, // such as notifying players, preserving game state data, and other cleanup

Aws::GameLift::GenericOutcome outcome = Aws::GameLift::Server::TerminateGameSession();Aws::GameLift::GenericOutcome outcome = Aws::GameLift::Server::ProcessReady(onStartGameSession, onProcessTerminate);

UpdatePlayerSessionCreationPolicy()現在のゲームセッションの機能を更新し、新しいプレイヤーセッションを承諾します。ゲームセッションは、新しいプレイヤーセッションをすべて受け入れるか拒否するかを設定できます。AWS SDK アクション UpdateGameSession() も参照してください。

構文

GenericOutcome UpdatePlayerSessionCreationPolicy( Aws::GameLift::Model::PlayerSessionCreationPolicy newPlayerSessionPolicy);

パラメータ

newPlayerSessionPolicy

ゲームセッションで新しいプレイヤーを承諾するかどうかを示す文字列値。

型: Aws::GameLift::Model::PlayerSessionCreationPolicy 列挙。有効な値を以下に示します。• ACCEPT_ALL – すべての新しいプレイヤーセッションを承諾します。• DENY_ALL – すべての新しいプレイヤーセッションを拒否します。

必須: はい

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

この例は、現在のゲームセッションの参加ポリシーを、すべてのプレイヤーを受け入れるように設定します。

Version272

Page 279: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C++) リファレンス

Aws::GameLift::GenericOutcome outcome = Aws::GameLift::Server::UpdatePlayerSessionCreationPolicy(Aws::GameLift::Model::PlayerSessionCreationPolicy::ACCEPT_ALL);

Amazon GameLift サーバー API (C++) リファレンス: データ型この Amazon GameLift C++ サーバー API リファレンスは、Amazon GameLift で使用するマルチプレイヤーゲームを準備するのに役立ちます。統合プロセスの詳細については、「ゲームサーバーへの AmazonGameLift の追加 (p. 44)」を参照してください。

この API は、GameLiftServerAPI.h、LogParameters.h、および ProcessParameters.h で定義されています。

• アクション (p. 262)• データ型

DescribePlayerSessionsRequest

このデータ型は、取得するプレイヤーセッションを指定するのに使用されます。このデータ型は次のように使用できます。

• 特定のプレーヤーセッションをリクエストする PlayerSessionId を提供します。• 指定したゲームセッションのすべてのプレイヤーセッションをリクエストする GameSessionId を提供

します。• 指定したプレイヤーのすべてのプレイヤーセッションをリクエストする PlayerId を提供します。

プレイヤーセッション数が多い場合は、ページ分割パラメータを使用して結果を順次ブロックとして取得します。

内容

GameSessionId

一意のゲームセッション識別子。このパラメータを使用して、指定したゲームセッションのすべてのプレイヤーセッションをリクエストします。ゲームセッション ID の形式は、arn:aws:gamelift:<region>::gamesession/fleet-<fleet ID>/<ID string> です。<ID string> の値は、カスタム ID 文字列または (ゲームセッション作成時に指定した場合) 生成された文字列のいずれかです。

型: 文字列

必須: いいえ制限

返される結果の最大数。このパラメータを NextToken とともに使用して、結果を一連の順次ページとして取得します。プレイヤーセッション ID を指定した場合、このパラメータは無視されます。

タイプ: 整数

必須: いいえNextToken

結果において次の順次ページの開始を示すトークン。このアクションの以前の呼び出しで返されたトークンを使用します。結果セットの先頭を指定するには、値を指定しないでください。プレイヤーセッション ID を指定した場合、このパラメータは無視されます。

Version273

Page 280: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C++) リファレンス

型: 文字列

必須: いいえPlayerId

プレイヤーを表す一意の識別子。プレイヤー ID は開発者によって定義されます。「プレイヤー ID の生成 (p. 54)」を参照してください。

型: 文字列

必須: いいえPlayerSessionId

プレイヤーセッションを表す一意の識別子。

型: 文字列

必須: いいえPlayerSessionStatusFilter

結果をフィルタリングするプレイヤーセッションステータス。可能なプレイヤーセッションステータスとして以下のステータスがあります。• RESERVED – プレイヤーセッションリクエストは受領されましたが、プレイヤーのサーバープロセ

スへの接続や検証はまだ行われていません。• ACTIVE – プレイヤーはサーバープロセスによって検証され、現時点で接続されています。• COMPLETED – プレイヤー接続は削除されました。• TIMEDOUT – プレイヤーセッションリクエストは受領されましたが、タイムアウト制限 (60 秒) 内

でのプレイヤーの接続や検証は行われていません。

型: 文字列

必須: いいえ

LogParametersこのデータ型は、ゲームセッション中に生成されたファイルのうち、ゲームセッション終了時にAmazon GameLift でアップロードして保存するファイルを識別するのに使用されます。この情報は、ProcessReady() (p. 267) 呼び出しで Amazon GameLift サービスに伝えられます。

内容

logPaths

Amazon GameLift で将来のアクセスに備えて保存するゲームサーバーログファイルへのディレクトリパス。これらのファイルは、各ゲームセッション中に生成されます。ファイルのパスと名前はゲームサーバーで定義され、ルートゲームビルドディレクトリに保存されます。たとえば、ゲームビルドによって MyGame\sessionlogs\ などのパスに保存されるゲームセッションログのログパスは c:\game\MyGame\sessionLogs (Windows インスタンスの場合) または /local/game/MyGame/sessionLogs (Linux インスタンスの場合) となります。

型: std:vector<std::string>

必須: いいえ

ProcessParametersこのデータ型には、ProcessReady() (p. 267) 呼び出しで Amazon GameLift サービスに送られたパラメータセットが含まれます。

Version274

Page 281: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C++) リファレンス

内容

port

サーバープロセスが新しいプレイヤーの接続をリスンするポート番号。値は、このゲームサーバービルドをデプロイするすべてのフリートで設定されているポート番号の範囲に含まれる必要があります。このポート番号は、ゲームセッションオブジェクトとプレイヤーセッションオブジェクトに含まれ、ゲームセッションがサーバープロセスに接続するときに使用します。

タイプ: 整数

必須: はいlogParameters

ゲームセッションログファイルへのディレクトリパスのリストを含むオブジェクト。

タイプ: Aws::GameLift::Server::LogParameters (p. 274)

必須: いいえonStartGameSession

Amazon GameLift サービスが新しいゲームセッションをアクティブにするために呼び出すコールバック関数名。Amazon GameLift はクライアントリクエスト CreateGameSession に応じて、この関数を呼び出します。コールバック関数は GameSession オブジェクト (Amazon GameLift サービス API リファレンスで定義) を渡します。

タイプ: const std::function<void(Aws::GameLift::Model::GameSession)>onStartGameSession

必須: はいonProcessTerminate

Amazon GameLift サービスがサーバープロセスを強制シャットダウンするために呼び出すコールバック関数名。この関数を呼び出すと、Amazon GameLift はサーバープロセスがシャットダウンするのを5 分間待ち、ProcessEnding() (p. 266) 呼び出しで応答します。応答がない場合は、受信サーバープロセスをシャットダウンします。

タイプ: std::function<void()> onProcessTerminate

必須: いいえonHealthCheck

Amazon GameLift サービスがサーバープロセスにヘルスステータスレポートをリクエストするために呼び出すコールバック関数名。Amazon GameLift は、この関数を 60 秒ごとに呼び出します。この関数を呼び出すと、Amazon GameLift は応答を 60 秒ほど待ちます。応答がなければ、サーバープロセスを異常と記録します。

タイプ: std::function<bool()> onHealthCheck

必須: いいえonUpdateGameSession

Amazon GameLift サービスが更新されたゲームセッションオブジェクトを提供するために呼び出すコールバック関数名。Amazon GameLift は、マッチバックフィル (p. 80)リクエストが処理されるとこの関数を呼び出します。GameSession オブジェクト、ステータス更新 (updateReason)、およびマッチバックフィルチケット ID が渡されます。

タイプ: std::function<void(Aws::GameLift::Server::Model::UpdateGameSession)>onUpdateGameSession

必須: いいえ

Version275

Page 282: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C++) リファレンス

StartMatchBackfillRequestこのデータ型はマッチメーキングバックフィルリクエストの送信に使用します。この情報は、StartMatchBackfill() (p. 270) 呼び出しで Amazon GameLift サービスに伝えられます。

内容

GameSessionArn

一意のゲームセッション識別子。API アクション GetGameSessionId() (p. 264) は ARN 形式の識別子を返します。

型: 文字列

必須: はいMatchmakingConfigurationArn

このリクエストに使用されるマッチメーカーの ARN 形式の一意な識別子。元のゲームセッションの作成に使用されたマッチメーカーを見つけるには、ゲームセッションオブジェクトのマッチメーカーデータプロパティを確認します。マッチメーカーデータの詳細については「マッチメーカーデータの操作 (p. 79)」を参照してください。

型: 文字列

必須: はいPlayers

現在ゲームセッションに参加しているすべてのプレイヤーを表すデータのセット。マッチメーカーはこの情報を使用して、現在のプレイヤーとマッチする新しいプレイヤーを検索します。プレイヤーオブジェクトの形式の説明については、Amazon GameLift API リファレンスガイドを参照してください。プレイヤー属性、ID、チームの割り当てを見つけるには、マッチメーカーデータプロパティのゲームセッションオブジェクトを参照してください。マッチメーカーでレイテンシーが使用されている場合は、現在のリージョンの更新されたレイテンシーを収集し、それを各プレイヤーのデータに含めます。

型: std:vector<Player>

必須: はいTicketId

マッチメーキングまたはバックフィルリクエストチケットの一意の識別子。ここで値を指定しない場合、Amazon GameLift によって UUID 形式で自動的に生成されます。この識別子を使用してマッチバックフィルチケットのステータスを追跡したり、必要に応じてリクエストをキャンセルしたりします。

型: 文字列

必須: いいえ

StopMatchBackfillRequestこのデータ型はマッチメーキングバックフィルリクエストのキャンセルに使用します。この情報は、StopMatchBackfill() (p. 271) 呼び出しで Amazon GameLift サービスに伝えられます。

内容

GameSessionArn

キャンセルされるリクエストに関連付けられた一意のゲームセッション識別子。

Version276

Page 283: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C#) リファレンス

型: 文字列

必須: はいMatchmakingConfigurationArn

このリクエストが送信されたマッチメーカーの一意の識別子。

型: 文字列

必須: はいTicketId

キャンセルされるバックフィルリクエストチケットの一意の識別子。

型: 文字列

必須: はい

Amazon GameLiftサーバー API (C#) リファレンスこの Amazon GameLift C# サーバー API リファレンスは、Amazon GameLift で使用するマルチプレイヤーゲームを準備するのに役立ちます。統合プロセスの詳細については、「ゲームサーバーへの AmazonGameLift の追加 (p. 44)」を参照してください。

この API は、GameLiftServerAPI.cs、LogParameters.cs、および ProcessParameters.cs で定義されています。

• アクション (p. 277)• データ型 (p. 287)

Amazon GameLift サーバー API (C#) リファレンス: アクションこの Amazon GameLift C# サーバー API リファレンスは、Amazon GameLift で使用するマルチプレイヤーゲームを準備するのに役立ちます。統合プロセスの詳細については、「ゲームサーバーへの AmazonGameLift の追加 (p. 44)」を参照してください。

この API は、GameLiftServerAPI.cs、LogParameters.cs、および ProcessParameters.cs で定義されています。

• アクション• データ型 (p. 287)

AcceptPlayerSession()

指定されたプレイヤーセッション ID のプレイヤーがサーバープロセスに接続し、検証が必要であることをAmazon GameLift サービスに通知します。Amazon GameLift は、プレイヤーセッション ID が有効であること、つまり、そのプレイヤー ID でゲームセッションにプレイヤースロットが予約されていることを確認します。—検証後、Amazon GameLift はプレイヤースロットの状態を RESERVED から ACTIVE に変更します。

構文

GenericOutcome AcceptPlayerSession(String playerSessionId)

Version277

Page 284: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C#) リファレンス

パラメータ

playerSessionId

新しいプレイヤーセッションが作成されたときに、GameLift によって発行される一意の ID。プレイヤーセッション ID は PlayerSession オブジェクトで指定されます。このオブジェクトは AWS SDK Amazon GameLift API アクションStartGameSessionPlacement、CreateGameSession、DescribeGameSessions、またはDescribePlayerSessions のクライアント呼び出しに応じて返されます。

型: 文字列

必須: いいえ

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

この例では、無効なプレイヤーセッション ID の検証や拒否を含む、接続リクエストを処理するための関数を示します。

void ReceiveConnectingPlayerSessionID (Connection connection, String playerSessionId){ var acceptPlayerSessionOutcome = GameLiftServerAPI.AcceptPlayerSession(playerSessionId); if(acceptPlayerSessionOutcome.Success) { connectionToSessionMap.emplace(connection, playerSessionId); connection.Accept(); } else { connection.Reject(acceptPlayerSessionOutcome.Error.ErrorMessage); } }

ActivateGameSession()サーバープロセスがゲームセッションをアクティブにし、プレイヤーの接続を受ける準備ができていることを Amazon GameLift サービスに通知します。このアクションは、すべてのゲームセッションの初期化が完了した後、onStartGameSession() コールバック関数の一部として呼び出されます。

構文

GenericOutcome ActivateGameSession()

パラメータ

このアクションにはパラメーターがありません。

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

この例では、ActivateGameSession() が onStartGameSession() 委任関数の一部として呼び出されていることを示しています。

void OnStartGameSession(GameSession gameSession)

Version278

Page 285: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C#) リファレンス

{ // game-specific tasks when starting a new game session, such as loading map

// When ready to receive players var activateGameSessionOutcome = GameLiftServerAPI.ActivateGameSession();}

DescribePlayerSessions()

設定、セッションメタデータ、プレイヤーデータを含む、プレイヤーセッションデータを取得します。このアクションを使用して、単一のプレイヤーセッション、ゲームセッション内のすべてのプレイヤーセッション、または単一のプレイヤー ID に関連付けられたすべてのプレイヤーセッションに関する情報を取得します。

構文

DescribePlayerSessionsOutcome DescribePlayerSessions(DescribePlayerSessionsRequest describePlayerSessionsRequest)

パラメータ

describePlayerSessionsRequest

取得するプレイヤーセッションを記述する DescribePlayerSessionsRequest (p. 287) オブジェクト。

必須: はい

戻り値

成功した場合は、リクエストのパラメータに適合したプレイヤーセッションオブジェクトのセットを含む DescribePlayerSessionsOutcome オブジェクトを返します。プレイヤーセッションオブジェクトは、AWS SDK Amazon GameLift API PlayerSession データ型と同じ構造を持ちます。

この例は、指定したゲームセッションにアクティブに接続されているすべてのプレイヤーセッションのリクエストを示しています。NextToken を省略し、Limit 値を 10 に設定すると、Amazon GameLift は、リクエストに一致するプレイヤーセッションレコードの最初の 10 個を返します。

// Set request parameters var describePlayerSessionsRequest = new Aws.GameLift.Server.Model.DescribePlayerSessionsRequest(){ GameSessionId = GameLiftServerAPI.GetGameSessionId().Result, //gets the ID for the current game session Limit = 10, PlayerSessionStatusFilter = PlayerSessionStatusMapper.GetNameForPlayerSessionStatus(PlayerSessionStatus.ACTIVE)}; // Call DescribePlayerSessionsAws::GameLift::DescribePlayerSessionsOutcome playerSessionsOutcome = Aws::GameLift::Server::Model::DescribePlayerSessions(describePlayerSessionRequest);

GetGameSessionId()

サーバープロセスがアクティブな場合、サーバープロセスが現在ホストしているゲームセッションの ID を取得します。

Version279

Page 286: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C#) リファレンス

構文

AwsStringOutcome GetGameSessionId()

パラメータ

このアクションにはパラメーターがありません。

戻り値

成功した場合、ゲームセッション ID を AwsStringOutcome オブジェクトとして返します。成功しなかった場合、エラーメッセージを返します。

var getGameSessionIdOutcome = GameLiftServerAPI.GetGameSessionId();

GetInstanceCertificate()

フリートとそのインスタンスに関連付けられている pem エンコードされた TLS 証明書のファイルの場所を取得します。この証明書は、証明書設定を GENERATED に指定した新しいフリートが作成されると生成されます。この証明書を使用して、ゲームクライアントとのセキュリティ保護ありの接続を確立し、クライアント/サーバー通信を暗号化します。

構文

GetInstanceCertificateOutcome GetInstanceCertificate();

パラメータ

このアクションにはパラメーターがありません。

戻り値

成功すると、インスタンスに保存されているフリートの TLS 証明書ファイルの場所を含むGetInstanceCertificateOutcome オブジェクトを返します。成功しなかった場合、エラーメッセージを返します。

var getInstanceCertificateOutcome = GameLiftServerAPI.GetInstanceCertificate();

GetSdkVersion()

サーバープロセスに組み込まれた SDK の現在のバージョン番号を返します。

構文

AwsStringOutcome GetSdkVersion()

パラメータ

このアクションにはパラメーターがありません。

Version280

Page 287: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C#) リファレンス

戻り値

成功した場合、AwsStringOutcome オブジェクトとして現在の SDK バージョンを返します。返される文字列は、バージョン番号のみを含みます。(例:"3.1.5")。成功しなかった場合、エラーメッセージを返します。

var getSdkVersionOutcome = GameLiftServerAPI.GetSdkVersion();

GetTerminationTime()終了時刻が判る場合に、サーバープロセスがシャットダウンを予定している時刻を返します。サーバープロセスは、Amazon GameLift サービスから onProcessTerminate() コールバックを受信した後にこのアクションを実行します。サーバープロセスのシャットダウンにはいくつかの理由が考えられます。(1) プロセスの障害、(2) スケールダウンイベント中にインスタンスが終了した場合、(3) スポットインスタンスの中断 (p. 109)が原因でインスタンスが終了した場合。

プロセスが onProcessTerminate() コールバックを受信した場合、戻り値は、エポック秒の予想終了時刻です。終了時刻が判らない場合、戻り値は -1 であり、これはサーバープロセスがいつでも終了される可能性があることを示します。プロセスが onProcessTerminate() コールバックを受信しなかった場合、戻り値は常に -1 です。サーバープロセスのシャットダウン (p. 47)の詳細を確認してください。

構文

AwsLongOutcome GetTerminationTime()

パラメータ

このアクションにはパラメーターがありません。

戻り値

成功した場合、AwsLongOutcome オブジェクトとして現在の SDK バージョンを返します。値はエポック病の終了時刻、または値 -1 のいずれかです。成功しなかった場合、エラーメッセージを返します。

var getTerminationTimeOutcome = GameLiftServerAPI.GetTerminationTime();

InitSDK()Amazon GameLift SDK を初期化します。このメソッドは起動時に他の Amazon GameLift 関連の初期化が実行される前に呼び出す必要があります。

構文

InitSDKOutcome InitSDK()

パラメータ

このアクションにはパラメーターがありません。

戻り値

成功した場合は、サーバープロセスが ProcessReady() (p. 282) を呼び出す準備ができていることを示すInitSdkOutcome オブジェクトを返します。

Version281

Page 288: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C#) リファレンス

var initSDKOutcome = GameLiftServerAPI.InitSDK();

ProcessEnding()サーバープロセスがシャットダウンしていることを Amazon GameLift サービスに通知します。このメソッドは、終了コード 0 で終了します。0 以外の終了コードでは、処理が問題なく終了しなかったというイベントメッセージが発生します。

構文

GenericOutcome ProcessEnding()

パラメータ

このアクションにはパラメーターがありません。

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

var processEndingOutcome = GameLiftServerAPI.ProcessEnding();

ProcessReady()サーバープロセスがゲームセッションをホストする準備ができたことを Amazon GameLift サービスに通知します。このメソッドは、InitSDK() (p. 281) の呼び出しが成功して必要な設定タスクが完了した後、サーバープロセスがゲームセッションをホストできるようになる前に呼び出す必要があります。

構文

GenericOutcome ProcessReady(ProcessParameters processParameters)

パラメータ

processParameters

サーバープロセスに関する以下の情報を伝える ProcessParameters (p. 289) オブジェクト。• サーバープロセスと通信するために Amazon GameLift サービスが呼び出す、ゲームサーバーコード

で実装されたコールバックメソッドの名前。• サーバープロセスがリッスンするポートの番号。• Amazon GameLift でキャプチャして保存するゲームセッション固有のファイルへのパス。

必須: はい

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

この例では、ProcessReady() (p. 282) 呼び出しと委任関数の実装の両方を示します。

Version282

Page 289: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C#) リファレンス

// Set parameters and call ProcessReadyvar processParams = new ProcessParameters( this.OnGameSession, this.OnProcessTerminate, this.OnHealthCheck, this.OnGameSessionUpdate, port, new LogParameters(new List<string>() // Examples of log and error files written by the game server { "C:\\game\\logs", "C:\\game\\error" }));

var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParams);

// Implement callback functionsvoid OnGameSession(GameSession gameSession){ // game-specific tasks when starting a new game session, such as loading map // When ready to receive players var activateGameSessionOutcome = GameLiftServerAPI.ActivateGameSession();}

void OnProcessTerminate(){ // game-specific tasks required to gracefully shut down a game session, // such as notifying players, preserving game state data, and other cleanup var ProcessEndingOutcome = GameLiftServerAPI.ProcessEnding(); GameLiftServerAPI.Destroy();}

bool OnHealthCheck(){ bool isHealthy; // complete health evaluation within 60 seconds and set health return isHealthy;}

RemovePlayerSession()

指定されたプレイヤーセッション ID のプレイヤーがサーバープロセスから切断されたことを AmazonGameLift サービスに通知します。それに応じて、Amazon GameLift はプレイヤースロットを新しいプレイヤーに割り当てられるよう利用可能に変更します。

構文

GenericOutcome RemovePlayerSession(String playerSessionId)

パラメータ

playerSessionId

新しいプレイヤーセッションが作成されたときに、GameLift によって発行される一意の ID。プレイヤーセッション ID は PlayerSession オブジェクトで指定されます。このオブジェクトは AWS SDK Amazon GameLift API アクションStartGameSessionPlacement、CreateGameSession、DescribeGameSessions、またはDescribePlayerSessions のクライアント呼び出しに応じて返されます。

型: 文字列

Version283

Page 290: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C#) リファレンス

必須: いいえ

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

Aws::GameLift::GenericOutcome disconnectOutcome = Aws::GameLift::Server::RemovePlayerSession(playerSessionId);

StartMatchBackfill()FlexMatch で作成されたゲームセッションの空きスロット用に新規プレイヤーを検索するリクエストを送信します。AWS SDK アクション StartMatchBackfill() 参照してください。このアクションを使用すると、ゲームセッションをホストするゲームサーバーのプロセスによってマッチバックフィルリクエストを開始できます。FlexMatch のバックフィル機能の詳細については、「FlexMatch を使用した既存のゲームのバックフィル (p. 80)」を参照してください。

このアクションは非同期です。新規プレイヤーが正常にマッチングされると、Amazon GameLift サービスはコールバック関数 OnUpdateGameSession() を使用して更新済みマッチメーカーデータを送信します。

サーバープロセスではアクティブなマッチバックフィルリクエストは一度に 1 つだけです。新しいリクエストを送信するには、まず StopMatchBackfill() (p. 285) を呼び出して元のリクエストをキャンセルする必要があります。

構文

StartMatchBackfillOutcome StartMatchBackfill (StartMatchBackfillRequest startBackfillRequest);

パラメータ

StartMatchBackfillRequest

次の情報を通信する StartMatchBackfillRequest (p. 290) オブジェクト。• バックフィルリクエストに割り当てるチケット ID。この情報はオプションです。ID が指定されてい

ない場合は Amazon GameLift が ID を 1 つ自動生成します。• リクエストを送信するマッチメーカー。完全な設定 ARN が必要です。この値は、ゲームセッショ

ンのマッチメーカーデータから取得できます。• バックフィルされるゲームセッションの ID。• ゲームセッションの現在のプレイヤーに利用可能なマッチメーキングデータ。

必須: はい

戻り値

StartMatchBackfillOutcome オブジェクトを、マッチバックフィルチケット ID またはエラーメッセージを伴うエラーとともに返します。

// Build a backfill requestvar startBackfillRequest = new AWS.GameLift.Server.Model.StartMatchBackfillRequest(){

Version284

Page 291: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C#) リファレンス

TicketId = "a ticket ID", //optional MatchmakingConfigurationArn = "the matchmaker configuration ARN", GameSessionId = GameLiftServerAPI.GetGameSessionId().Result, // gets ID for current game session //get player data for all currently connected players MatchmakerData matchmakerData = MatchmakerData.FromJson(gameSession.MatchmakerData); // gets matchmaker data for current players // get matchmakerData.Players // remove data for players who are no longer connected Players = ListOfPlayersRemainingInTheGame};

// Send backfill requestvar startBackfillOutcome = GameLiftServerAPI.StartMatchBackfill(startBackfillRequest);

// Implement callback function for backfillvoid OnUpdateGameSession(GameSession myGameSession){ // game-specific tasks to prepare for the newly matched players and update matchmaker data as needed }

StopMatchBackfill()

StartMatchBackfill() (p. 284) とともに作成されたアクティブなマッチバックフィルリクエストをキャンセルします。AWS SDK アクション StopMatchmaking() も参照してください。FlexMatch のバックフィル機能の詳細については、「FlexMatch を使用した既存のゲームのバックフィル (p. 80)」を参照してください。

構文

GenericOutcome StopMatchBackfill (StopMatchBackfillRequest stopBackfillRequest);

パラメータ

StopMatchBackfillRequest

キャンセルするマッチメーキングチケットを識別する StopMatchBackfillRequest (p. 290)オブジェクト:• キャンセルされるバックフィルリクエストに割り当てられたチケット ID• バックフィルリクエストが送信されるマッチメーカー• バックフィルリクエストに関連付けられたゲームセッション

必須: はい

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

// Set backfill stop request parameters

var stopBackfillRequest = new AWS.GameLift.Server.Model.StopMatchBackfillRequest(){ TicketId = "a ticket ID", //optional, if not provided one is autogenerated MatchmakingConfigurationArn = "the matchmaker configuration ARN", //from the game session matchmaker data

Version285

Page 292: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C#) リファレンス

GameSessionId = GameLiftServerAPI.GetGameSessionId().Result //gets the ID for the current game session};

var stopBackfillOutcome = GameLiftServerAPI.StopMatchBackfillRequest(stopBackfillRequest);

TerminateGameSession()サーバープロセスがゲームセッションをシャットダウンしたことを Amazon GameLift サービスに通知します。(現在、各サーバー プロセスは一度に 1 つのゲームセッションのみをホストしているので、どのセッションかを指定する必要はありません。) このアクションは、ゲームセッションのシャットダウンプロセスの最後に呼び出されます。このアクションを呼び出した後、サーバープロセスはProcessReady() (p. 282) を呼び出して、新しいゲームセッションをホスト可能かどうかを通知します。また、ProcessEnding() (p. 282) を呼び出してサーバープロセスをシャットダウンし、インスタンスを終了することができます。

構文

GenericOutcome TerminateGameSession()

パラメータ

このアクションにはパラメーターがありません。

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

この例は、ゲームセッションの終了時のサーバープロセスを示しています。

// game-specific tasks required to gracefully shut down a game session, // such as notifying players, preserving game state data, and other cleanup

var terminateGameSessionOutcome = GameLiftServerAPI.TerminateGameSession();var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParams);

UpdatePlayerSessionCreationPolicy()現在のゲームセッションの機能を更新し、新しいプレイヤーセッションを承諾します。ゲームセッションは、新しいプレイヤーセッションをすべて受け入れるか拒否するかを設定できます。(Amazon GameLiftサービス API リファレンスの「UpdateGameSession() アクション」も参照)。

構文

GenericOutcome UpdatePlayerSessionCreationPolicy(PlayerSessionCreationPolicy playerSessionPolicy)

パラメータ

newPlayerSessionPolicy

ゲームセッションで新しいプレイヤーを承諾するかどうかを示す文字列値。

型: PlayerSessionCreationPolicy 列挙。有効な値を以下に示します。• ACCEPT_ALL – すべての新しいプレイヤーセッションを承諾します。• DENY_ALL – すべての新しいプレイヤーセッションを拒否します。

Version286

Page 293: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C#) リファレンス

必須: はい

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

この例は、現在のゲームセッションの参加ポリシーを、すべてのプレイヤーを受け入れるように設定します。

var updatePlayerSessionCreationPolicyOutcomex = GameLiftServerAPI.UpdatePlayerSessionCreationPolicy(PlayerSessionCreationPolicy.ACCEPT_ALL);

Amazon GameLift サーバー API (C#) リファレンス: データ型この Amazon GameLift C# サーバー API リファレンスは、Amazon GameLift で使用するマルチプレイヤーゲームを準備するのに役立ちます。統合プロセスの詳細については、「ゲームサーバーへの AmazonGameLift の追加 (p. 44)」を参照してください。

この API は、GameLiftServerAPI.cs、LogParameters.cs、および ProcessParameters.cs で定義されています。

• アクション (p. 277)• データ型

LogParametersこのデータ型は、ゲームセッション中に生成されたファイルのうち、ゲームセッション終了時にAmazon GameLift でアップロードして保存するファイルを識別するのに使用されます。この情報は、ProcessReady() (p. 282) 呼び出しで Amazon GameLift サービスに伝えられます。

内容

logPaths

Amazon GameLift で将来のアクセスに備えて保存するゲームサーバーログファイルへのディレクトリパスのリスト。これらのファイルは各ゲームセッション中にサーバープロセスによって生成されます。ファイルのパスと名前は、ゲームサーバー内に定義され、ルートゲームビルドディレクトリに保存されます。たとえば、ゲームビルドによって MyGame\sessionlogs\ などのパスに保存されるゲームセッションログのログパスは c:\game\MyGame\sessionLogs (Windows インスタンスの場合) または /local/game/MyGame/sessionLogs (Linux インスタンスの場合) となります。

型: List<String>

必須: いいえ

DescribePlayerSessionsRequestこのデータ型は、取得するプレイヤーセッションを指定するのに使用されます。複数の方法で使用できます。(1) 特定のプレイヤーセッションをリクエストする PlayerSessionId; を使用します。(2) 指定したゲームセッションのすべてのプレイヤーをリクエストするには、GameSessionId を指定します。または、(3)指定したプレイヤーのすべてのプレイヤーセッションをリクエストするには、PlayerId を指定します。プレイヤーセッション数が多い場合は、ページ分割パラメータを使用して結果を順次ページとして取得します。

Version287

Page 294: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C#) リファレンス

内容

GameSessionId

一意のゲームセッション識別子。このパラメータを使用して、指定したゲームセッションのすべてのプレイヤーセッションをリクエストします。ゲームセッション ID の形式は、arn:aws:gamelift:<region>::gamesession/fleet-<fleet ID>/<ID string> です。<ID string> の値は、カスタム ID 文字列または (ゲームセッション作成時に指定した場合) 生成された文字列のいずれかです。

型: 文字列

必須: いいえ制限

返される結果の最大数。このパラメータを NextToken とともに使用して、結果を一連の順次ページとして取得します。プレイヤーセッション ID を指定した場合、このパラメータは無視されます。

タイプ: 整数

必須: いいえNextToken

結果において次の順次ページの開始を示すトークン。このアクションの以前の呼び出しで返されたトークンを使用します。結果セットの先頭を指定するには、値を指定しないでください。プレイヤーセッション ID を指定した場合、このパラメータは無視されます。

型: 文字列

必須: いいえPlayerId

プレイヤーを表す一意の識別子。プレイヤー ID は開発者によって定義されます。「プレイヤー ID の生成 (p. 54)」を参照してください。

型: 文字列

必須: いいえPlayerSessionId

プレイヤーセッションを表す一意の識別子。

型: 文字列

必須: いいえPlayerSessionStatusFilter

結果をフィルタリングするプレイヤーセッションステータス。可能なプレイヤーセッションステータスとして以下のステータスがあります。• RESERVED – プレイヤーセッションリクエストは受領されましたが、プレイヤーのサーバープロセ

スへの接続や検証はまだ行われていません。• ACTIVE – プレイヤーはサーバープロセスによって検証され、現時点で接続されています。• COMPLETED – プレイヤー接続は削除されました。• TIMEDOUT – プレイヤーセッションリクエストは受領されましたが、タイムアウト制限 (60 秒) 内

でのプレイヤーの接続や検証は行われていません。

型: 文字列

必須: いいえ

Version288

Page 295: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C#) リファレンス

ProcessParametersこのデータ型には、ProcessReady() (p. 282) 呼び出しで Amazon GameLift サービスに送られたパラメータセットが含まれます。

内容

port

サーバープロセスが新しいプレイヤーの接続をリスニングするポート番号。値は、このゲームサーバービルドをデプロイするすべてのフリートで設定されているポート番号の範囲に含まれる必要があります。このポート番号は、ゲームセッションオブジェクトとプレイヤーセッションオブジェクトに含まれ、ゲームセッションがサーバープロセスに接続するときに使用します。

タイプ: 整数

必須: はいlogParameters

ゲームセッションログファイルへのディレクトリパスのリストを含むオブジェクト。

タイプ: Aws::GameLift::Server::LogParameters (p. 287)

必須: はいonStartGameSession

Amazon GameLift サービスが新しいゲームセッションをアクティブにするために呼び出すコールバック関数の名前。Amazon GameLift は、クライアントリクエスト CreateGameSession に応じて、この関数を呼び出します。コールバック関数は GameSession オブジェクト (Amazon GameLift サービスAPI リファレンスで定義) を取得します。

タイプ: void OnStartGameSessionDelegate(GameSession gameSession)

必須: はいonProcessTerminate

Amazon GameLift サービスがサーバープロセスを強制シャットダウンするために呼び出すコールバック関数名。この関数を呼び出すと、Amazon GameLift はサーバープロセスがシャットダウンするために 5 分間待ち、サーバープロセスをシャットダウンする前に ProcessEnding() (p. 282) 呼び出しで応答します。

タイプ: void OnProcessTerminateDelegate()

必須: はいonHealthCheck

Amazon GameLift サービスがサーバープロセスにヘルスステータスレポートをリクエストするために呼び出すコールバック関数名。Amazon GameLift は、この関数を 60 秒ごとに呼び出します。この関数を呼び出すと、Amazon GameLift は応答を 60 秒ほど待ちます。応答がなければ、サーバープロセスを異常と記録します。

タイプ: bool OnHealthCheckDelegate()

必須: はいonUpdateGameSession

Amazon GameLift サービスが更新されたゲームセッションオブジェクトを提供するために呼び出すコールバック関数の名前。Amazon GameLift は、マッチバックフィルリクエストが処理されると、この関数を呼び出します。GameSession オブジェクト、ステータス更新 (updateReason)、およびマッチバックフィルチケット ID が渡されます。

Version289

Page 296: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (C#) リファレンス

タイプ: void OnUpdateGameSessionDelegate ( UpdateGameSessionupdateGameSession )

必須: いいえ

StartMatchBackfillRequestこのデータ型はマッチメーキングバックフィルリクエストの送信に使用します。この情報は、StartMatchBackfill() (p. 284) 呼び出しで Amazon GameLift サービスに伝えられます。

内容

GameSessionArn

一意のゲームセッション識別子。API アクション GetGameSessionId() (p. 279) は ARN 形式の識別子を返します。

型: 文字列

必須: はいMatchmakingConfigurationArn

このリクエストに使用されるマッチメーカーの ARN 形式の一意な識別子。元のゲームセッションの作成に使用されたマッチメーカーを見つけるには、ゲームセッションオブジェクトのマッチメーカーデータプロパティを確認します。マッチメーカーデータの詳細については「マッチメーカーデータの操作 (p. 79)」を参照してください。

型: 文字列

必須: はいPlayers

現在ゲームセッションに参加しているすべてのプレイヤーを表すデータのセット。マッチメーカーはこの情報を使用して、現在のプレイヤーとマッチする新しいプレイヤーを検索します。プレイヤーオブジェクトの形式の説明については、Amazon GameLift API リファレンスガイドを参照してください。プレイヤー属性、ID、チームの割り当てを見つけるには、マッチメーカーデータプロパティのゲームセッションオブジェクトを参照してください。マッチメーカーでレイテンシーが使用されている場合は、現在のリージョンの更新されたレイテンシーを収集し、それを各プレイヤーのデータに含めます。

型: プレイヤー[ ]

必須: はいTicketId

マッチメーキングまたはバックフィルリクエストチケットの一意の識別子。ここで値を指定しない場合、Amazon GameLift によって UUID 形式で自動的に生成されます。この識別子を使用してマッチバックフィルチケットのステータスを追跡したり、必要に応じてリクエストをキャンセルしたりします。

型: 文字列

必須: いいえ

StopMatchBackfillRequestこのデータ型はマッチメーキングバックフィルリクエストのキャンセルに使用します。この情報は、StopMatchBackfill() (p. 285) 呼び出しで Amazon GameLift サービスに伝えられます。

Version290

Page 297: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (Unreal Engine) リファレンス

内容

GameSessionArn

キャンセルされるリクエストに関連付けられた一意のゲームセッション識別子。

型: 文字列

必須: はいMatchmakingConfigurationArn

このリクエストが送信されたマッチメーカーの一意の識別子。

型: 文字列

必須: はいTicketId

キャンセルされるバックフィルリクエストチケットの一意の識別子。

型: 文字列

必須: はい

Unreal Engine の Amazon GameLift サーバー API リファレンスこの Amazon GameLift サーバー API リファレンスは、Unreal Engine のゲームプロジェクトを AmazonGameLift で使用するために準備するのに役立ちます。統合プロセスの詳細については、「ゲームサーバーへの Amazon GameLift の追加 (p. 44)」を参照してください。

この API は、GameLiftServerSDK.h と GameLiftServerSDKModels.h で定義されます。

Unreal Engine プラグインを設定するには、コードサンプル「Amazon GameLift を Unreal Engine ゲームサーバープロジェクトに追加 (p. 38)」を参照してください。

• アクション (p. 291)• データ型 (p. 297)

Unreal Engine の Amazon GameLift サーバー API リファレンス:アクションこの Amazon GameLift サーバー API リファレンスは、Unreal Engine のゲームプロジェクトを AmazonGameLift で使用するために準備するのに役立ちます。統合プロセスの詳細については、「ゲームサーバーへの Amazon GameLift の追加 (p. 44)」を参照してください。

この API は、GameLiftServerSDK.h と GameLiftServerSDKModels.h で定義されます。

Unreal Engine プラグインを設定するには、コードサンプル「Amazon GameLift を Unreal Engine ゲームサーバープロジェクトに追加 (p. 38)」を参照してください。

• アクション• データ型 (p. 297)

Version291

Page 298: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (Unreal Engine) リファレンス

AcceptPlayerSession()指定されたプレイヤーセッション ID のプレイヤーがサーバープロセスに接続し、検証が必要であることをAmazon GameLift サービスに通知します。Amazon GameLift は、プレイヤーセッション ID が有効であること、つまり、そのプレイヤー ID でゲームセッションにプレイヤースロットが予約されていることを確認します。—検証後、Amazon GameLift はプレイヤースロットの状態を RESERVED から ACTIVE に変更します。

構文

FGameLiftGenericOutcome AcceptPlayerSession(const FString& playerSessionId)

パラメータ

playerSessionId

Amazon GameLift サービスが AWS SDK Amazon GameLift API アクション CreatePlayerSession の呼び出しに応じて発行する一意の ID。ゲームクライアントはサーバープロセスに接続するときにこの IDを参照します。

タイプ: FString

必須: いいえ

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

ActivateGameSession()サーバープロセスがゲームセッションをアクティブにし、プレイヤーの接続を受ける準備ができていることを Amazon GameLift サービスに通知します。このアクションは、すべてのゲームセッションの初期化が完了した後、onStartGameSession() コールバック関数の一部として呼び出されます。

構文

FGameLiftGenericOutcome ActivateGameSession()

パラメータ

このアクションにはパラメーターがありません。

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

GetGameSessionId()サーバープロセスがアクティブな場合、サーバープロセスが現在ホストしているゲームセッションの ID を取得します。

構文

FGameLiftStringOutcome GetGameSessionId()

パラメータ

このアクションにはパラメーターがありません。

Version292

Page 299: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (Unreal Engine) リファレンス

戻り値

成功した場合、ゲームセッション ID を FGameLiftStringOutcome オブジェクトとして返します。成功しなかった場合、エラーメッセージを返します。

GetSdkVersion()

サーバープロセスに組み込まれた SDK の現在のバージョン番号を返します。

構文

FGameLiftStringOutcome GetSdkVersion();

パラメータ

このアクションにはパラメーターがありません。

戻り値

成功した場合、FGameLiftStringOutcome オブジェクトとして現在の SDK バージョンを返します。返される文字列は、バージョン番号のみを含みます。(例:"3.1.5")。成功しなかった場合、エラーメッセージを返します。

Aws::GameLift::AwsStringOutcome SdkVersionOutcome = Aws::GameLift::Server::GetSdkVersion();

InitSDK()

Amazon GameLift SDK を初期化します。このメソッドは起動時に他の Amazon GameLift 関連の初期化が実行される前に呼び出す必要があります。

構文

FGameLiftGenericOutcome InitSDK()

パラメータ

このアクションにはパラメーターがありません。

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

ProcessEnding()

サーバープロセスがシャットダウンしていることを Amazon GameLift サービスに通知します。このメソッドは、すべてのアクティブゲームセッションのシャットダウンを含む他のすべてのクリーンアップタスクの後に呼び出されます。このメソッドは、終了コード 0 で終了します。0 以外の終了コードでは、処理が問題なく終了しなかったというイベントメッセージが発生します。

構文

FGameLiftGenericOutcome ProcessEnding()

Version293

Page 300: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (Unreal Engine) リファレンス

パラメータ

このアクションにはパラメーターがありません。

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

ProcessReady()

サーバープロセスがゲームセッションをホストする準備ができたことを Amazon GameLift サービスに通知します。このメソッドは、InitSDK() (p. 293) の呼び出しが成功して必要な設定タスクが完了した後、サーバープロセスがゲームセッションをホストできるようになる前に呼び出す必要があります。

構文

FGameLiftGenericOutcome ProcessReady(FProcessParameters &processParameters)

パラメータ

FProcessParameters

サーバープロセスに関する以下の情報を伝える FProcessParameters (p. 297) オブジェクト。• サーバープロセスと通信するために Amazon GameLift サービスが呼び出す、ゲームサーバーコード

で実装されたコールバックメソッドの名前。• サーバープロセスがリッスンするポートの番号。• Amazon GameLift でキャプチャして保存するゲームセッション固有のファイルへのパス。

必須: はい

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

Using the Unreal Engine Plugin (p. 40) にあるサンプルコードを参照してください。

RemovePlayerSession()

指定されたプレイヤーセッション ID のプレイヤーがサーバープロセスから切断されたことを AmazonGameLift サービスに通知します。それに応じて、Amazon GameLift はプレイヤースロットを新しいプレイヤーに割り当てられるよう利用可能に変更します。

構文

FGameLiftGenericOutcome RemovePlayerSession(const FString& playerSessionId)

パラメータ

playerSessionId

Amazon GameLift サービスが AWS SDK Amazon GameLift API アクション CreatePlayerSession の呼び出しに応じて発行する一意の ID。ゲームクライアントはサーバープロセスに接続するときにこの IDを参照します。

Version294

Page 301: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (Unreal Engine) リファレンス

タイプ: FString

必須: いいえ

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

StartMatchBackfill()

FlexMatch で作成されたゲームセッションの空きスロット用に新規プレイヤーを検索するリクエストを送信します。AWS SDK アクション StartMatchBackfill() 参照してください。このアクションを使用すると、ゲームセッションをホストするゲームサーバーのプロセスによってマッチバックフィルリクエストを開始できます。FlexMatch のバックフィル機能の詳細については、「FlexMatch を使用した既存のゲームのバックフィル (p. 80)」を参照してください。

サーバープロセスではアクティブなマッチバックフィルリクエストは一度に 1 つだけです。新しいリクエストを送信するには、まず StopMatchBackfill() (p. 295) を呼び出して元のリクエストをキャンセルする必要があります。

構文

FGameLiftStringOutcome StartMatchBackfill (FStartMatchBackfillRequest &startBackfillRequest);

パラメータ

FStartMatchBackfillRequest

次の情報を通信する FStartMatchBackfillRequest (p. 298) オブジェクト。• バックフィルリクエストに割り当てるチケット ID。この情報はオプションです。ID が指定されてい

ない場合は Amazon GameLift が ID を 1 つ自動生成します。• リクエストを送信するマッチメーカー。完全な設定 ARN が必要です。この値は、ゲームセッショ

ンのマッチメーカーデータから取得できます。• バックフィルされるゲームセッションの ID。• ゲームセッションの現在のプレイヤーに利用可能なマッチメーキングデータ。

必須: はい

戻り値

成功した場合、マッチバックフィルチケットを FGameLiftStringOutcome オブジェクトとして返します。成功しなかった場合、エラーメッセージを返します。チケットのステータスは、AWS SDK アクション DescribeMatchmaking() を使用して追跡できます。

StopMatchBackfill()

StartMatchBackfill() (p. 295) とともに作成されたアクティブなマッチバックフィルリクエストをキャンセルします。AWS SDK アクション StopMatchmaking() も参照してください。FlexMatch のバックフィル機能の詳細については、「FlexMatch を使用した既存のゲームのバックフィル (p. 80)」を参照してください。

構文

FGameLiftGenericOutcome StopMatchBackfill (FStopMatchBackfillRequest &stopBackfillRequest);

Version295

Page 302: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (Unreal Engine) リファレンス

パラメータ

StopMatchBackfillRequest

キャンセルするマッチメーキングチケットを識別する FStopMatchBackfillRequest (p. 299)オブジェクト:• キャンセルされるバックフィルリクエストに割り当てられたチケット ID• バックフィルリクエストが送信されるマッチメーカー• バックフィルリクエストに関連付けられたゲームセッション

必須: はい

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

TerminateGameSession()サーバープロセスがゲームセッションをシャットダウンしたことを Amazon GameLift サービスに通知します。(現在、各サーバー プロセスは一度に 1 つのゲームセッションのみをホストしているので、どのセッションかを指定する必要はありません。) このアクションは、ゲームセッションのシャットダウンプロセスの最後に呼び出されます。このアクションを呼び出した後、サーバープロセスはProcessReady() (p. 294) を呼び出して、新しいゲームセッションをホスト可能かどうかを通知します。また、ProcessEnding() (p. 293) を呼び出してサーバープロセスをシャットダウンし、インスタンスを終了することができます。

構文

FGameLiftGenericOutcome TerminateGameSession()

パラメータ

このアクションにはパラメーターがありません。

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

UpdatePlayerSessionCreationPolicy()現在のゲームセッションの機能を更新し、新しいプレイヤーセッションを承諾します。ゲームセッションは、新しいプレーヤーセッションをすべて受け入れるか拒否するかを設定できます。(Amazon GameLiftサービス API リファレンスの「UpdateGameSession() アクション」も参照)

構文

FGameLiftGenericOutcome UpdatePlayerSessionCreationPolicy(EPlayerSessionCreationPolicy policy)

パラメータ

ポリシー

ゲームセッションで新しいプレイヤーを承諾するかどうかを示す値。

タイプ: EPlayerSessionCreationPolicy enum.有効な値を以下に示します。• ACCEPT_ALL – すべての新しいプレイヤーセッションを承諾します。

Version296

Page 303: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (Unreal Engine) リファレンス

• DENY_ALL – すべての新しいプレイヤーセッションを拒否します。

必須: はい

戻り値

エラーメッセージとともに成功か失敗の一般的な結果を返します。

Unreal Engine の Amazon GameLift サーバー API リファレンス:データ型この Amazon GameLift サーバー API リファレンスは、Unreal Engine のゲームプロジェクトを AmazonGameLift で使用するために準備するのに役立ちます。統合プロセスの詳細については、「ゲームサーバーへの Amazon GameLift の追加 (p. 44)」を参照してください。

この API は、GameLiftServerSDK.h と GameLiftServerSDKModels.h で定義されます。

Unreal Engine プラグインを設定するには、コードサンプル「Amazon GameLift を Unreal Engine ゲームサーバープロジェクトに追加 (p. 38)」を参照してください。

• アクション (p. 291)• データ型

FProcessParametersこのデータ型には、ProcessReady() (p. 294) 呼び出しで Amazon GameLift サービスに送られたパラメータセットが含まれます。

内容

port

サーバープロセスが新しいプレイヤーの接続をリスニングするポート番号。値は、このゲームサーバービルドをデプロイするすべてのフリートで設定されているポート番号の範囲に含まれる必要があります。このポート番号は、ゲームセッションオブジェクトとプレイヤーセッションオブジェクトに含まれ、ゲームセッションがサーバープロセスに接続するときに使用します。

タイプ: 整数

必須: はいlogParameters

ゲームセッションログファイルへのディレクトリパスのリストを含むオブジェクト。

型: TArray<FString>

必須: いいえonStartGameSession

Amazon GameLift サービスが新しいゲームセッションをアクティブにするために呼び出すコールバック関数名。Amazon GameLift はクライアントリクエスト CreateGameSession に応じて、この関数を呼び出します。コールバック関数は GameSession オブジェクトを取得します (Amazon GameLiftサービス API リファレンスで定義)。

型: FOnStartGameSession

必須: はい

Version297

Page 304: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドサーバー API (Unreal Engine) リファレンス

onProcessTerminate

Amazon GameLift サービスがサーバープロセスを強制シャットダウンするために呼び出すコールバック関数名。この関数を呼び出すと、Amazon GameLift はサーバープロセスがシャットダウンするために 5 分間待ち、サーバープロセスをシャットダウンする前に ProcessEnding() (p. 293) 呼び出しで応答します。

型: FSimpleDelegate

必須: いいえonHealthCheck

Amazon GameLift サービスがサーバープロセスにヘルスステータスレポートをリクエストするために呼び出すコールバック関数名。Amazon GameLift は、この関数を 60 秒ごとに呼び出します。この関数を呼び出すと、Amazon GameLift は応答を 60 秒ほど待ちます。応答がなければ、サーバープロセスを異常と記録します。

型: FOnHealthCheck

必須: いいえ

FStartMatchBackfillRequestこのデータ型はマッチメーキングバックフィルリクエストの送信に使用します。この情報は、StartMatchBackfill() (p. 295) 呼び出しで Amazon GameLift サービスに伝えられます。

内容

GameSessionArn

一意のゲームセッション識別子。API アクション GetGameSessionId() (p. 292) は ARN 形式の識別子を返します。

タイプ: FString

必須: はいMatchmakingConfigurationArn

このリクエストに使用されるマッチメーカーの ARN 形式の一意な識別子。元のゲームセッションの作成に使用されたマッチメーカーを見つけるには、ゲームセッションオブジェクトのマッチメーカーデータプロパティを確認します。マッチメーカーデータの詳細については「マッチメーカーデータの操作 (p. 79)」を参照してください。

タイプ: FString

必須: はいPlayers

現在ゲームセッションに参加しているすべてのプレイヤーを表すデータのセット。マッチメーカーはこの情報を使用して、現在のプレイヤーとマッチする新しいプレイヤーを検索します。プレイヤーオブジェクトの形式の説明については、Amazon GameLift API リファレンスガイドを参照してください。プレイヤー属性、ID、チームの割り当てを見つけるには、マッチメーカーデータプロパティのゲームセッションオブジェクトを参照してください。マッチメーカーでレイテンシーが使用されている場合は、現在のリージョンの更新されたレイテンシーを収集し、それを各プレイヤーのデータに含めます。

型: TArray<FPlayer>

必須: はい

Version298

Page 305: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドFlexMatch リファレンス

TicketId

マッチメーキングまたはバックフィルリクエストチケットの一意の識別子。ここで値を指定しない場合、Amazon GameLift によって UUID 形式で自動的に生成されます。この識別子を使用してマッチバックフィルチケットのステータスを追跡したり、必要に応じてリクエストをキャンセルしたりします。

タイプ: FString

必須: いいえ

FStopMatchBackfillRequestこのデータ型はマッチメーキングバックフィルリクエストのキャンセルに使用します。この情報は、StopMatchBackfill() (p. 295) 呼び出しで Amazon GameLift サービスに伝えられます。

内容

GameSessionArn

キャンセルされるリクエストに関連付けられた一意のゲームセッション識別子。

タイプ: FString

必須: はいMatchmakingConfigurationArn

このリクエストが送信されたマッチメーカーの一意の識別子。

タイプ: FString

必須: はいTicketId

キャンセルされるバックフィルリクエストチケットの一意の識別子。

タイプ: FString

必須: はい

Amazon GameLift FlexMatch リファレンスAmazon GameLift FlexMatch については、リファレンスのドキュメントを参照してください。

トピック• FlexMatch ルールセットスキーマ (p. 299)• FlexMatch ルール言語 (p. 306)• FlexMatch マッチメイキングイベント (p. 310)

FlexMatch ルールセットスキーマこのトピックでは、小規模マッチングルールセットと大規模マッチングルールセットに対する標準スキーマについて説明します。カスタム値を作成するには、「

FlexMatch ルールセットのルールを記述するときは、以下のプロパティ式構文を使用します。

FlexMatch ルールの作成の詳細については、以下を参照してください。

Version299

Page 306: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットスキーマ

• FlexMatch ルールセットの作成 (p. 149)

• マッチメーキングルールセットの作成 (p. 154)• FlexMatch ルールセットの例 (p. 156)ルールタイプFlexMatch は次のルールタイプをサポートします。各ルール時間には一連のプロパティがあります。それらのプロパティを以下に示します。

距離ルール (distance)

距離ルールでは、スキルレベル間の距離など、2 つの数値間の差異を測定します。たとえば、距離ルールでは、すべてのプレイヤー相互間のレベル差が 2 レベル以内であることが必要になる場合があります。

距離ルールのプロパティ• measurements – 距離を測定するプレイヤー属性値。数値にする必要があります。• referenceValue – マッチング候補に対して距離を測定する数値。• minDistance/maxDistance – マッチングを成功させるために許可される距離の最大

値または最小値。• partyAggregation – マルチプレイヤー (パーティ) リクエストを処理する方法。有効

なオプションとして、リクエストのプレイヤーに対して最小 (min)、最大 (max)、または平均 (avg) の値を使います。デフォルトは avg です。

比較ルール (comparison)

比較ルールでは、他の値に対してプレイヤー属性値を比較します。比較ルールには 2 つのタイプがあります。最初のタイプでは、属性値を参照値に対して比較します。参照値および有効な比較演算子を指定します。たとえば、ルールでは、マッチングされたプレイヤーのスキルレベルが 24 レベル以上であることが要求される場合があります。2 つ目のタイプでは、チームまたはマッチングのすべてのプレイヤー間で属性値を比較します。このタイプでは参照値が省略され、等しいまたは等しくないが指定されます (すべてのプレイヤーが同じ属性値を持つか、いずれのプレイヤーも同じ属性値を持たない)。たとえば、ルールでは、すべてのプレイヤーが同じゲームマップを選択することが要求される場合があります。

比較ルールのプロパティ• measurements – 比較するプレイヤーの属性値。• referenceValue – マッチング候補に対して測定の評価基準となる値。• operation – 測定値を評価する方法。有効なオペレーションは <, <=, =, !=, >,>= です。

• partyAggregation – マルチプレイヤー (パーティ) リクエストを並べ替える方法。有効なオプションとして、リクエストのプレイヤーに対して最小 (min)、最大 (max)、または平均 (avg) の値を使います。デフォルトは avg です。

収集ルール (collection)

収集ルールでは、プレイヤー属性値のコレクションが評価されます。コレクションには、複数のプレイヤーの属性値、コレクション (文字列リスト) であるプレイヤー属性、またはその両方が含まれます。たとえば、収集ルールでは、チームのプレイヤーによって選択されたキャラクターのコレクションを調べ、そのコレクションに少なくとも特定のキャラクターの 1 つが含まれることが要求される場合があります。

収集ルールのプロパティ• measurements – 評価するプレイヤー属性値のコレクション。属性値は文字列のリスト

である必要があります。

Version300

Page 307: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットスキーマ

• referenceValue – マッチング候補で測定の評価基準となる値、または値のコレクション。

• operation – コレクションの測定値を評価する方法。有効なオペレーションは次のとおりです。• intersection は、すべてのプレイヤーのコレクションに共通の値の数を測定しま

す。「例 4: 明示的な並べ替えを使用して最適なマッチングを見つける (p. 161)」のMapOverlap ルールを参照してください。

• contains は、特定の参照値を含むプレイヤー属性のコレクションの数を測定します。「例 3: チームレベル要件とレイテンシーの制限を設定する (p. 160)」のOverallMedicLimit ルールを参照してください。

• reference_intersection_count は、プレイヤー属性のコレクションと参照値のコレクション間の交差を測定します。測定値の各プレイヤー属性のコレクション(文字列のリスト) は、参照コレクションに対して個別に評価されます。このオペレーションを使用して、さまざまなプレイヤー属性を評価できます。「例 5: 複数のプレイヤー属性間の交差を見つける (p. 163)」の OpponentMatch ルールを参照してください。

• minCount/maxCount – マッチングを成功させるために許可されるカウントの最大値または最小値。

• partyAggregation – マルチプレイヤー (パーティ) リクエストを並べ替える方法。有効なオプションとして、リクエストのプレイヤーに対して値の union またはintersection を使用します。デフォルトは union です。

レイテンシールール (latency)

レイテンシールールでは、承諾可能なマッチングのプレイヤーレイテンシー設定が評価されます。たとえば、ルールでは、すべてのマッチングされたプレイヤーのリージョン別のレイテンシーが上限未満であることが要求される場合があります。現在のところ、これが大規模マッチングのルールセットに使用できる唯一のルールタイプで、maxLatency の設定が唯一のオプションです。

レイテンシールールのプロパティ• maxLatency – リージョンで許容される最大のレイテンシー値。プレイヤーごとに、こ

のレイテンシーを超えるすべてのリージョンを無視します。• maxDistance – 各プレイヤーのレイテンシーと距離の参照値との間の最大の差異。• distanceReference – maxDistance で使用します。成功したマッチングに対して距

離を測定する数値。レイテンシーの場合、この値は複数のプレイヤーのレイテンシーの合計値となります。有効なオプションは最小 (min) または平均 (avg) プレイヤーレイテンシー値です(プロパティ式のセクションを参照してください)。

• partyAggregation – マルチプレイヤー (パーティ) のマッチングリクエストを並べ替える方法。有効なオプションとして、リクエストのプレイヤーに対して最小 (min)、最大 (max)、または平均 (avg) の値を使います。デフォルトは avg です。

距離ソートルール (distanceSort)

距離ソートは明示的な並べ替えオプションであり、プレイヤー属性に基づいてマッチメーキングリクエストを事前に並べ替えることをマッチメーカーに指示します。距離ソートルールは、アンカーリクエストからの距離に基づいてマッチメーキングリクエストを評価します。

距離並べ替えルールのプロパティ• sortDirection – マッチメーキングリクエストを並べ替える方向。有効なオプション

は ascending または descending です。• sortAttribute – プレイヤーを並べ替えるためのプレイヤー属性。• mapKey – プレイヤー属性 (マップである場合) を評価する方法。有効なオペレーション

は以下のとおりです。• minValue: アンカープレイヤーの場合、最低値のキーを見つけます。

Version301

Page 308: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットスキーマ

• maxValue: アンカープレイヤーの場合、最高値のキーを見つけます。

• partyAggregation – マルチプレイヤー (パーティ) リクエストを並べ替える方法。有効なオプションとして、リクエストのプレイヤーに対して最小 (min)、最大 (max)、または平均 (avg) の値を使います。デフォルトは avg です。

絶対ソートルール (absoluteSort)

絶対ソートは明示的なソートオプションであり、プレイヤー属性に基づいてマッチメーキングリクエストを事前に並べ替えることをマッチメーカーに指示します。プレイヤー属性がアンカーリクエストの属性と一致するかどうかに基づいてマッチメーキングリクエストを評価します。

絶対並べ替えルールのプロパティ• sortDirection – マッチメーキングリクエストを並べ替える方向。有効なオプション

は ascending または descending です。• sortAttribute – プレイヤーを並べ替えるためのプレイヤー属性。• mapKey – プレイヤー属性 (マップである場合) を評価する方法。有効なオペレーション

は以下のとおりです。• minValue: アンカープレイヤーの場合、最低値のキーを見つけます。• maxValue: アンカープレイヤーの場合、最高値のキーを見つけます。

• partyAggregation – マルチプレイヤー (パーティ) リクエストを並べ替える方法。有効なオプションとして、リクエストのプレイヤーに対して最小 (min)、最大 (max)、または平均 (avg) の値を使います。デフォルトは avg です。

プロパティ式プロパティ式は、マッチメーキングに関連する特定のプロパティを参照するためにルールセットで使用します。プロパティには、マッチメーキングリクエストからのプレイヤー属性値を含めることができます。たとえば、ルールでプロパティ式を使用して、評価するプレイヤー属性を識別します。

通常、これらは 2 種類の形式のいずれかです。

• 個別のプレイヤーデータ

• 計算されたチームデータ (個別のプレイヤーデータのコレクション)。有効なプロパティ式は、単一のプレーヤー、チーム、またはマッチの特定の値を識別します。次の部分的な式は、チームとプレーヤーを特定する方法を示しています。マッチングの特定のチームを識別するには:

teams[red] Red チーム Team

マッチングのすべてのチームを識別するには:

teams[*] すべてのチーム List<Team>

特定のチームのプレイヤーを識別するには:

team[red].players Red チームのプレイヤー

List<Player>

マッチングのプレイヤーを識別するには:

team[*].players マッチングのプレイヤー (チーム別にグループ分け)

List<List<Player>>

Version302

Page 309: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットスキーマ

次の表は、前の例に基づいて構築された有効なプロパティ式を示しています。teams[red].players[playerid] Red チームに属するすべての

プレイヤーのプレイヤー IDList<string>

teams[red].players.attributes[skill]Red チームに属するすべてのプレイヤーの「skill」属性

List<number>

teams[*].players.attributes[skill] マッチングに属するすべてのプレイヤーの「skill」属性(チーム別にグループ分け)

List<List<number>>

式 意味 結果のタイププロパティ式は、以下の関数や関数の組み合わせを使用してチームデータを集約するために使用できます。分 List<number> リスト内のすべての

数値の最小値を取得します。

number

max List<number> リスト内のすべての数値の最大値を取得します。

number

avg List<number> リスト内のすべての数値の平均値を取得します。

number

中央値 List<number> リスト内のすべての数値の中央値を取得します。

number

sum List<number> リスト内のすべての数値の合計値を取得します。

number

count List<?> リスト内の要素の数を取得します。

number

stddev List<number> リスト内のすべての数値の標準偏差を取得します。

number

flatten List<List<?>> ネストされたリストのコレクションを、

List<?>

すべての要素を含む単一のリストに変換します。

set_intersection List<List<string>> コレクションのすべての文字列リスト

List<string>

で見つかった文字列のリストを取得します。

Version303

Page 310: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットスキーマ

All above List<List<?>> ネストされたリストに対するすべてのオ

List<?>

ペレーションをサブリスト別に適用し、結果のリストを生成します。

集計 入力 意味 出力次の表は、集約関数を使用する有効なプロパティ式を示しています。flatten(teams[*].players.attributes[skill]) マッチングに属する

すべてのプレイヤーList<number>

の「skill」属性 (グループ分けしない)

avg(teams[red].players.attributes[skill]) Red チームに属するすべてのプレイヤーの平均スキル

number

avg(teams[*].players.attributes[skill] マッチングの各チームの平均スキル

List<number>

avg(flatten(teams[*].players.attributes[skill])) マッチングに属するすべてのプレイヤー

number

の平均スキルレベル。この式では、プレイヤースキルのフラット化されたリストを取得し、スキルを平均化します。

count(teams[red].players) Red チームのプレイヤーの数

number

count (teams[*].players) マッチングのチーム別のプレイヤー数

List<number>

max(avg(teams[*].players.attributes[skill])) マッチングの最高のチームスキルレベル

number

式 意味 結果のタイプ (p. 306)」で説明しているルール言語を使用します。

小規模マッチング用のルールセットスキーマ最小 40 人のプレイヤーのマッチングを構築するためのルールセットを作成するときに、このスキーマを使用します。

{ "name": <descriptive label, string>, "ruleLanguageVersion": <must be "1.0">, "playerAttributes":[{ "name": <unique name for player attribute to be used by matchmaker, string>, "type": <attribute data type, allowed values are "string", "number", "string_list", "string_number_map">,

Version304

Page 311: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルールセットスキーマ

"default": <value to use when no player-specific value is provided> }], "teams": [{ "name": <unique label, string>, "maxPlayers": <max players allowed in team>, "minPlayers": <min players required in team>, "quantity": <number of teams to create with this definition> }], "rules": [{ "name": <unique label, string>, "description": <descriptive label, string>, "type": <rule type, string>, "<type-specific property>": <property expression> }], "expansions": [{ "target": <rule/team and property to adjust value for, example: "rules[<minSkill>].referenceValue">, "steps": [{ "waitTimeSeconds": <length of 1st wait period before relaxing rule>, "value": <new value> }, { "waitTimeSeconds": <length of 2nd wait period before further relaxing rule>, "value": <new value> }] }]}

大規模マッチング用のルールセットスキーマ40 人よりも多いプレイヤーのマッチングを構築するためのルールセットを作成するときに、このスキーマを使用します。ルールセットで定義されているすべてのチームの maxPlayers 値が 40 を超える場合、GameLift は大規模マッチングガイドラインに従って、このルールセットを使用するすべてのリクエストを処理します。

{ "name": <descriptive label, string>, "ruleLanguageVersion": <must be "1.0">, "playerAttributes":[{ "name": <unique name for player attribute to be used by matchmaker, string>, "type": <attribute data type, allowed values are "string", "number", "string_list", "string_number_map">, "default": <value to use when no player-specific value is provided> }], "teams": [{ "name": <unique label, string>, "maxPlayers": <max players allowed in team>, "minPlayers": <min players required in team>, "quantity": <number of teams to create with this team definition> }], "algorithm": { "balancedAttribute": <name of player attribute, data type "number", to use when grouping players >, "strategy": <must be "balanced">, "batchingPreference": <choose between "largestPopulation" (default) or "fastestRegion"> }, "rules": [{ "name": <unique label, string>, "description": <descriptive label, string>, "type": <rule type, must be "latency">, "<type-specific property>": <property expression, must set value for "maxLatency"> }], "expansions": [{

Version305

Page 312: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルール言語

"target": <rule/team and property to adjust value for, example: "rules[<rule name>].maxLatency">, "steps": [{ "waitTimeSeconds": <length of 1st wait period before relaxing rule>, "value": <new value> }, { "waitTimeSeconds": <length of 2nd wait period before further relaxing rule>, "value": <new value> }] }]}

FlexMatch ルール言語FlexMatch ルールセットのルールを記述するときは、以下のプロパティ式構文を使用します。

FlexMatch ルールの作成の詳細については、以下を参照してください。

• FlexMatch ルールセットの作成 (p. 149)• マッチメーキングルールセットの作成 (p. 154)• FlexMatch ルールセットの例 (p. 156)

ルールタイプFlexMatch は次のルールタイプをサポートします。各ルール時間には一連のプロパティがあります。それらのプロパティを以下に示します。

距離ルール (distance)

距離ルールでは、スキルレベル間の距離など、2 つの数値間の差異を測定します。たとえば、距離ルールでは、すべてのプレイヤー相互間のレベル差が 2 レベル以内であることが必要になる場合があります。

距離ルールのプロパティ• measurements – 距離を測定するプレイヤー属性値。数値にする必要があります。• referenceValue – マッチング候補に対して距離を測定する数値。• minDistance/maxDistance – マッチングを成功させるために許可される距離の最大値または最小

値。• partyAggregation – マルチプレイヤー (パーティ) リクエストを処理する方法。有効なオプショ

ンとして、リクエストのプレイヤーに対して最小 (min)、最大 (max)、または平均 (avg) の値を使います。デフォルトは avg です。

比較ルール (comparison)

比較ルールでは、他の値に対してプレイヤー属性値を比較します。比較ルールには 2 つのタイプがあります。最初のタイプでは、属性値を参照値に対して比較します。参照値および有効な比較演算子を指定します。たとえば、ルールでは、マッチングされたプレイヤーのスキルレベルが 24 レベル以上であることが要求される場合があります。2 つ目のタイプでは、チームまたはマッチングのすべてのプレイヤー間で属性値を比較します。このタイプでは参照値が省略され、等しいまたは等しくないが指定されます (すべてのプレイヤーが同じ属性値を持つか、いずれのプレイヤーも同じ属性値を持たない)。たとえば、ルールでは、すべてのプレイヤーが同じゲームマップを選択することが要求される場合があります。

比較ルールのプロパティ• measurements – 比較するプレイヤーの属性値。

Version306

Page 313: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルール言語

• referenceValue – マッチング候補に対して測定の評価基準となる値。• operation – 測定値を評価する方法。有効なオペレーションは <, <=, =, !=, >, >= です。• partyAggregation – マルチプレイヤー (パーティ) リクエストを並べ替える方法。有効なオプ

ションとして、リクエストのプレイヤーに対して最小 (min)、最大 (max)、または平均 (avg) の値を使います。デフォルトは avg です。

収集ルール (collection)

収集ルールでは、プレイヤー属性値のコレクションが評価されます。コレクションには、複数のプレイヤーの属性値、コレクション (文字列リスト) であるプレイヤー属性、またはその両方が含まれます。たとえば、収集ルールでは、チームのプレイヤーによって選択されたキャラクターのコレクションを調べ、そのコレクションに少なくとも特定のキャラクターの 1 つが含まれることが要求される場合があります。

収集ルールのプロパティ• measurements – 評価するプレイヤー属性値のコレクション。属性値は文字列のリストである必要

があります。• referenceValue – マッチング候補で測定の評価基準となる値、または値のコレクション。• operation – コレクションの測定値を評価する方法。有効なオペレーションは次のとおりです。

• intersection は、すべてのプレイヤーのコレクションに共通の値の数を測定します。「例 4:明示的な並べ替えを使用して最適なマッチングを見つける (p. 161)」の MapOverlap ルールを参照してください。

• contains は、特定の参照値を含むプレイヤー属性のコレクションの数を測定します。「例 3:チームレベル要件とレイテンシーの制限を設定する (p. 160)」の OverallMedicLimit ルールを参照してください。

• reference_intersection_count は、プレイヤー属性のコレクションと参照値のコレクション間の交差を測定します。測定値の各プレイヤー属性のコレクション (文字列のリスト) は、参照コレクションに対して個別に評価されます。このオペレーションを使用して、さまざまなプレイヤー属性を評価できます。「例 5: 複数のプレイヤー属性間の交差を見つける (p. 163)」のOpponentMatch ルールを参照してください。

• minCount/maxCount – マッチングを成功させるために許可されるカウントの最大値または最小値。

• partyAggregation – マルチプレイヤー (パーティ) リクエストを並べ替える方法。有効なオプションとして、リクエストのプレイヤーに対して値の union または intersection を使用します。デフォルトは union です。

レイテンシールール (latency)

レイテンシールールでは、承諾可能なマッチングのプレイヤーレイテンシー設定が評価されます。たとえば、ルールでは、すべてのマッチングされたプレイヤーのリージョン別のレイテンシーが上限未満であることが要求される場合があります。現在のところ、これが大規模マッチングのルールセットに使用できる唯一のルールタイプで、maxLatency の設定が唯一のオプションです。

レイテンシールールのプロパティ• maxLatency – リージョンで許容される最大のレイテンシー値。プレイヤーごとに、このレイテン

シーを超えるすべてのリージョンを無視します。• maxDistance – 各プレイヤーのレイテンシーと距離の参照値との間の最大の差異。• distanceReference – maxDistance で使用します。成功したマッチングに対して距離を測定す

る数値。レイテンシーの場合、この値は複数のプレイヤーのレイテンシーの合計値となります。有効なオプションは最小 (min) または平均 (avg) プレイヤーレイテンシー値です(プロパティ式のセクションを参照してください)。

• partyAggregation – マルチプレイヤー (パーティ) のマッチングリクエストを並べ替える方法。有効なオプションとして、リクエストのプレイヤーに対して最小 (min)、最大 (max)、または平均(avg) の値を使います。デフォルトは avg です。

Version307

Page 314: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルール言語

距離ソートルール (distanceSort)

距離ソートは明示的な並べ替えオプションであり、プレイヤー属性に基づいてマッチメーキングリクエストを事前に並べ替えることをマッチメーカーに指示します。距離ソートルールは、アンカーリクエストからの距離に基づいてマッチメーキングリクエストを評価します。

距離並べ替えルールのプロパティ• sortDirection – マッチメーキングリクエストを並べ替える方向。有効なオプションはascending または descending です。

• sortAttribute – プレイヤーを並べ替えるためのプレイヤー属性。• mapKey – プレイヤー属性 (マップである場合) を評価する方法。有効なオペレーションは以下のと

おりです。• minValue: アンカープレイヤーの場合、最低値のキーを見つけます。• maxValue: アンカープレイヤーの場合、最高値のキーを見つけます。

• partyAggregation – マルチプレイヤー (パーティ) リクエストを並べ替える方法。有効なオプションとして、リクエストのプレイヤーに対して最小 (min)、最大 (max)、または平均 (avg) の値を使います。デフォルトは avg です。

絶対ソートルール (absoluteSort)

絶対ソートは明示的なソートオプションであり、プレイヤー属性に基づいてマッチメーキングリクエストを事前に並べ替えることをマッチメーカーに指示します。プレイヤー属性がアンカーリクエストの属性と一致するかどうかに基づいてマッチメーキングリクエストを評価します。

絶対並べ替えルールのプロパティ• sortDirection – マッチメーキングリクエストを並べ替える方向。有効なオプションはascending または descending です。

• sortAttribute – プレイヤーを並べ替えるためのプレイヤー属性。• mapKey – プレイヤー属性 (マップである場合) を評価する方法。有効なオペレーションは以下のと

おりです。• minValue: アンカープレイヤーの場合、最低値のキーを見つけます。• maxValue: アンカープレイヤーの場合、最高値のキーを見つけます。

• partyAggregation – マルチプレイヤー (パーティ) リクエストを並べ替える方法。有効なオプションとして、リクエストのプレイヤーに対して最小 (min)、最大 (max)、または平均 (avg) の値を使います。デフォルトは avg です。

プロパティ式プロパティ式は、マッチメーキングに関連する特定のプロパティを参照するためにルールセットで使用します。プロパティには、マッチメーキングリクエストからのプレイヤー属性値を含めることができます。たとえば、ルールでプロパティ式を使用して、評価するプレイヤー属性を識別します。

通常、これらは 2 種類の形式のいずれかです。

• 個別のプレイヤーデータ• 計算されたチームデータ (個別のプレイヤーデータのコレクション)。

有効なプロパティ式は、単一のプレーヤー、チーム、またはマッチの特定の値を識別します。次の部分的な式は、チームとプレーヤーを特定する方法を示しています。

マッチングの特定のチームを識別するには:

teams[red] Red チーム Team

Version308

Page 315: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドルール言語

マッチングのすべてのチームを識別するには:

teams[*] すべてのチーム List<Team>

特定のチームのプレイヤーを識別するには:

team[red].players Red チームのプレイヤー

List<Player>

マッチングのプレイヤーを識別するには:

team[*].players マッチングのプレイヤー (チーム別にグループ分け)

List<List<Player>>

次の表は、前の例に基づいて構築された有効なプロパティ式を示しています。

式 意味 結果のタイプ

teams[red].players[playerid] Red チームに属するすべてのプレイヤーのプレイヤー ID

List<string>

teams[red].players.attributes[skill] Red チームに属するすべてのプレイヤーの「skill」属性

List<number>

teams[*].players.attributes[skill] マッチングに属するすべてのプレイヤーの「skill」属性 (チーム別にグループ分け)

List<List<number>>

プロパティ式は、以下の関数や関数の組み合わせを使用してチームデータを集約するために使用できます。

集計 入力 意味 出力

分 List<number> リスト内のすべての数値の最小値を取得します。

number

max List<number> リスト内のすべての数値の最大値を取得します。

number

avg List<number> リスト内のすべての数値の平均値を取得します。

number

中央値 List<number> リスト内のすべての数値の中央値を取得します。

number

sum List<number> リスト内のすべての数値の合計値を取得します。

number

count List<?> リスト内の要素の数を取得します。

number

stddev List<number> リスト内のすべての数値の標準偏差を取得します。

number

Version309

Page 316: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマッチメイキングイベント

集計 入力 意味 出力

flatten List<List<?>> ネストされたリストのコレクションを、すべての要素を含む単一のリストに変換します。

List<?>

set_intersection List<List<string>> コレクションのすべての文字列リストで見つかった文字列のリストを取得します。

List<string>

All above List<List<?>> ネストされたリストに対するすべてのオペレーションをサブリスト別に適用し、結果のリストを生成します。

List<?>

次の表は、集約関数を使用する有効なプロパティ式を示しています。

式 意味 結果のタイプ

flatten(teams[*].players.attributes[skill]) マッチングに属するすべてのプレイヤーの「skill」属性 (グループ分けしない)

List<number>

avg(teams[red].players.attributes[skill]) Red チームに属するすべてのプレイヤーの平均スキル

number

avg(teams[*].players.attributes[skill] マッチングの各チームの平均スキル

List<number>

avg(flatten(teams[*].players.attributes[skill])) マッチングに属するすべてのプレイヤーの平均スキルレベル。この式では、プレイヤースキルのフラット化されたリストを取得し、スキルを平均化します。

number

count(teams[red].players) Red チームのプレイヤーの数

number

count (teams[*].players) マッチングのチーム別のプレイヤー数

List<number>

max(avg(teams[*].players.attributes[skill])) マッチングの最高のチームスキルレベル

number

FlexMatch マッチメイキングイベントAmazon GameLift はマッチメーキングチケットの処理に関するイベントを出力します。以下に示すすべてのイベントは Amazon SNS トピックに発行できます。これらのイベントは Amazon CloudWatchEvents にも出力されます。マッチメーキングイベントの詳しい使用方法については、「FlexMatch イベ

Version310

Page 317: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマッチメイキングイベント

ント通知の設定 (p. 172)」を参照してください。マッチメーキングチケットのステータスの詳細については、Amazon GameLift サービス API リファレンスの「MatchmakingTicket」を参照してください。

MatchmakingSearchingチケットはマッチメーキングに入力済みです。これには、新しいリクエストと、失敗したマッチング案の一部であるリクエストが含まれます。

リソース: ConfigurationArn

詳細: type、tickets、estimatedWaitMillis、gameSessionInfo

{ "version": "0", "id": "cc3d3ebe-1d90-48f8-b268-c96655b8f013", "detail-type": "GameLift Matchmaking Event", "source": "aws.gamelift", "account": "123456789012", "time": "2017-08-08T21:15:36.421Z", "region": "us-west-2", "resources": [ "arn:aws:gamelift:us-west-2:123456789012:matchmakingconfiguration/SampleConfiguration" ], "detail": { "tickets": [ { "ticketId": "ticket-1", "startTime": "2017-08-08T21:15:35.676Z", "players": [ { "playerId": "player-1" } ] } ], "estimatedWaitMillis": "NOT_AVAILABLE", "type": "MatchmakingSearching", "gameSessionInfo": { "players": [ { "playerId": "player-1" } ] } }}

PotentialMatchCreatedマッチング候補が作成済みです。これは、承諾が必要かどうかに関係なく、すべての新しい潜在的なマッチングに対して発行されます。

リソース: ConfigurationArn

詳細:type、tickets、acceptanceTimeout、acceptanceRequired、ruleEvaluationMetrics、gameSessionInfo、matchId

{

Version311

Page 318: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマッチメイキングイベント

"version": "0", "id": "fce8633f-aea3-45bc-aeba-99d639cad2d4", "detail-type": "GameLift Matchmaking Event", "source": "aws.gamelift", "account": "123456789012", "time": "2017-08-08T21:17:41.178Z", "region": "us-west-2", "resources": [ "arn:aws:gamelift:us-west-2:123456789012:matchmakingconfiguration/SampleConfiguration" ], "detail": { "tickets": [ { "ticketId": "ticket-1", "startTime": "2017-08-08T21:15:35.676Z", "players": [ { "playerId": "player-1", "team": "red" } ] }, { "ticketId": "ticket-2", "startTime": "2017-08-08T21:17:40.657Z", "players": [ { "playerId": "player-2", "team": "blue" } ] } ], "acceptanceTimeout": 600, "ruleEvaluationMetrics": [ { "ruleName": "EvenSkill", "passedCount": 3, "failedCount": 0 }, { "ruleName": "EvenTeams", "passedCount": 3, "failedCount": 0 }, { "ruleName": "FastConnection", "passedCount": 3, "failedCount": 0 }, { "ruleName": "NoobSegregation", "passedCount": 3, "failedCount": 0 } ], "acceptanceRequired": true, "type": "PotentialMatchCreated", "gameSessionInfo": { "players": [ { "playerId": "player-1", "team": "red" }, { "playerId": "player-2",

Version312

Page 319: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマッチメイキングイベント

"team": "blue" } ] }, "matchId": "3faf26ac-f06e-43e5-8d86-08feff26f692" }}

AcceptMatchプレイヤーがマッチング候補を承諾済みです。このイベントは、マッチングに含まれる各プレイヤーの現在の承諾ステータスを示します。データが欠落している場合、そのプレイヤーに対しては AcceptMatch が呼び出されていないことを示します。

リソース: ConfigurationArn

詳細: type、tickets、matchId、gameSessionInfo

{ "version": "0", "id": "b3f76d66-c8e5-416a-aa4c-aa1278153edc", "detail-type": "GameLift Matchmaking Event", "source": "aws.gamelift", "account": "123456789012", "time": "2017-08-09T20:04:42.660Z", "region": "us-west-2", "resources": [ "arn:aws:gamelift:us-west-2:123456789012:matchmakingconfiguration/SampleConfiguration" ], "detail": { "tickets": [ { "ticketId": "ticket-1", "startTime": "2017-08-09T20:01:35.305Z", "players": [ { "playerId": "player-1", "team": "red" } ] }, { "ticketId": "ticket-2", "startTime": "2017-08-09T20:04:16.637Z", "players": [ { "playerId": "player-2", "team": "blue", "accepted": false } ] } ], "type": "AcceptMatch", "gameSessionInfo": { "players": [ { "playerId": "player-1", "team": "red" }, {

Version313

Page 320: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマッチメイキングイベント

"playerId": "player-2", "team": "blue", "accepted": false } ] }, "matchId": "848b5f1f-0460-488e-8631-2960934d13e5" }}

AcceptMatchCompletedプレイヤーの承諾/却下または承諾のタイムアウトにより、マッチングの承諾プロセスが完了したことを示します。

リソース: ConfigurationArn

詳細: type、tickets、acceptance、matchId、gameSessionInfo

{ "version": "0", "id": "b1990d3d-f737-4d6c-b150-af5ace8c35d3", "detail-type": "GameLift Matchmaking Event", "source": "aws.gamelift", "account": "123456789012", "time": "2017-08-08T20:43:14.621Z", "region": "us-west-2", "resources": [ "arn:aws:gamelift:us-west-2:123456789012:matchmakingconfiguration/SampleConfiguration" ], "detail": { "tickets": [ { "ticketId": "ticket-1", "startTime": "2017-08-08T20:30:40.972Z", "players": [ { "playerId": "player-1", "team": "red" } ] }, { "ticketId": "ticket-2", "startTime": "2017-08-08T20:33:14.111Z", "players": [ { "playerId": "player-2", "team": "blue" } ] } ], "acceptance": "TimedOut", "type": "AcceptMatchCompleted", "gameSessionInfo": { "players": [ { "playerId": "player-1", "team": "red" },

Version314

Page 321: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマッチメイキングイベント

{ "playerId": "player-2", "team": "blue" } ] }, "matchId": "a0d9bd24-4695-4f12-876f-ea6386dd6dce" }}

MatchmakingSucceededマッチメーキングが正常に完了し、ゲームセッションが作成済みです。

リソース: ConfigurationArn

詳細: type、tickets、matchId、gameSessionInfo

{ "version": "0", "id": "5ccb6523-0566-412d-b63c-1569e00d023d", "detail-type": "GameLift Matchmaking Event", "source": "aws.gamelift", "account": "123456789012", "time": "2017-08-09T19:59:09.159Z", "region": "us-west-2", "resources": [ "arn:aws:gamelift:us-west-2:123456789012:matchmakingconfiguration/SampleConfiguration" ], "detail": { "tickets": [ { "ticketId": "ticket-1", "startTime": "2017-08-09T19:58:59.277Z", "players": [ { "playerId": "player-1", "playerSessionId": "psess-6e7c13cf-10d6-4756-a53f-db7de782ed67", "team": "red" } ] }, { "ticketId": "ticket-2", "startTime": "2017-08-09T19:59:08.663Z", "players": [ { "playerId": "player-2", "playerSessionId": "psess-786b342f-9c94-44eb-bb9e-c1de46c472ce", "team": "blue" } ] } ], "type": "MatchmakingSucceeded", "gameSessionInfo": { "gameSessionArn": "arn:aws:gamelift:us-west-2:123456789012:gamesession/836cf48d-bcb0-4a2c-bec1-9c456541352a", "ipAddress": "192.168.1.1", "port": 10777, "players": [

Version315

Page 322: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマッチメイキングイベント

{ "playerId": "player-1", "playerSessionId": "psess-6e7c13cf-10d6-4756-a53f-db7de782ed67", "team": "red" }, { "playerId": "player-2", "playerSessionId": "psess-786b342f-9c94-44eb-bb9e-c1de46c472ce", "team": "blue" } ] }, "matchId": "c0ec1a54-7fec-4b55-8583-76d67adb7754" }}

MatchmakingTimedOutタイムアウトによってマッチメーキングチケットが失敗しました。

リソース: ConfigurationArn

詳細: type、tickets、ruleEvaluationMetrics、message、matchId、gameSessionInfo

{ "version": "0", "id": "fe528a7d-46ad-4bdc-96cb-b094b5f6bf56", "detail-type": "GameLift Matchmaking Event", "source": "aws.gamelift", "account": "123456789012", "time": "2017-08-09T20:11:35.598Z", "region": "us-west-2", "resources": [ "arn:aws:gamelift:us-west-2:123456789012:matchmakingconfiguration/SampleConfiguration" ], "detail": { "reason": "TimedOut", "tickets": [ { "ticketId": "ticket-1", "startTime": "2017-08-09T20:01:35.305Z", "players": [ { "playerId": "player-1", "team": "red" } ] } ], "ruleEvaluationMetrics": [ { "ruleName": "EvenSkill", "passedCount": 3, "failedCount": 0 }, { "ruleName": "EvenTeams", "passedCount": 3, "failedCount": 0 }, {

Version316

Page 323: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマッチメイキングイベント

"ruleName": "FastConnection", "passedCount": 3, "failedCount": 0 }, { "ruleName": "NoobSegregation", "passedCount": 3, "failedCount": 0 } ], "type": "MatchmakingTimedOut", "message": "Removed from matchmaking due to timing out.", "gameSessionInfo": { "players": [ { "playerId": "player-1", "team": "red" } ] } }}

MatchmakingCancelledマッチメーキングチケットがキャンセル済みです。

リソース: ConfigurationArn

詳細: type、tickets、ruleEvaluationMetrics、message、matchId、gameSessionInfo

{ "version": "0", "id": "8d6f84da-5e15-4741-8d5c-5ac99091c27f", "detail-type": "GameLift Matchmaking Event", "source": "aws.gamelift", "account": "123456789012", "time": "2017-08-09T20:00:07.843Z", "region": "us-west-2", "resources": [ "arn:aws:gamelift:us-west-2:123456789012:matchmakingconfiguration/SampleConfiguration" ], "detail": { "reason": "Cancelled", "tickets": [ { "ticketId": "ticket-1", "startTime": "2017-08-09T19:59:26.118Z", "players": [ { "playerId": "player-1" } ] } ], "ruleEvaluationMetrics": [ { "ruleName": "EvenSkill", "passedCount": 0, "failedCount": 0 },

Version317

Page 324: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマッチメイキングイベント

{ "ruleName": "EvenTeams", "passedCount": 0, "failedCount": 0 }, { "ruleName": "FastConnection", "passedCount": 0, "failedCount": 0 }, { "ruleName": "NoobSegregation", "passedCount": 0, "failedCount": 0 } ], "type": "MatchmakingCancelled", "message": "Cancelled by request.", "gameSessionInfo": { "players": [ { "playerId": "player-1" } ] } }}

MatchmakingFailedマッチメーキングチケットでエラーが発生しました。ゲームセッションキューにアクセスできないか、内部エラーが発生した可能性があります。

リソース: ConfigurationArn

詳細: type、tickets、ruleEvaluationMetrics、message、matchId、gameSessionInfo

{ "version": "0", "id": "025b55a4-41ac-4cf4-89d1-f2b3c6fd8f9d", "detail-type": "GameLift Matchmaking Event", "source": "aws.gamelift", "account": "123456789012", "time": "2017-08-16T18:41:09.970Z", "region": "us-west-2", "resources": [ "arn:aws:gamelift:us-west-2:123456789012:matchmakingconfiguration/SampleConfiguration" ], "detail": { "tickets": [ { "ticketId": "ticket-1", "startTime": "2017-08-16T18:41:02.631Z", "players": [ { "playerId": "player-1", "team": "red" } ] } ],

Version318

Page 325: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドマッチメイキングイベント

"customEventData": "foo", "type": "MatchmakingFailed", "reason": "UNEXPECTED_ERROR", "message": "An unexpected error was encountered during match placing.", "gameSessionInfo": { "players": [ { "playerId": "player-1", "team": "red" } ] }, "matchId": "3ea83c13-218b-43a3-936e-135cc570cba7" }

Version319

Page 326: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイドリリースノートの概要

Amazon GameLift リリースノートGameLift リリースノートには、サービスに関する新機能、更新、修正の詳細が記載されています。これには、次の変更点が含まれます。

• AWS SDK 内の GameLift サービス API• GameLift CLI コマンド• GameLift コンソール• マネージド GameLift およびカスタムゲームサーバーで使用するための GameLift Server サーバー SDK• リアルタイムサーバー で使用するための GameLift Client SDK

リリースノートの概要次のリリースノートは時系列順です (更新が新しい順にリストされています)。GameLift は、2016 年に初めてリリースされました。ここに記載されているリリースノートよりも前のリリースノートについては、「AWS の新機能」を参照してください。

変更 説明 日付

リリース: GameLift はUnity と Unreal Engine用の Server SDK を更新 (p. 320)

Amazon GameLift は、Unity 2019 とUnreal Engine 4.24 でゲームサーバー開発をサポートするために、更新された ServerSDK をリリースしました

2020 年 4 月16 日

リリース: GameLift は Unity と Unreal Engine 用のServer SDK を更新Amazon GameLift は、Unity 2019 と Unreal Engine 4.24 でのゲームサーバー開発をサポートするために、更新された Server SDK をリリースしました。

リリース日: 2020 年 4 月 16 日

最新バージョン: GameLift Server SDK 4.0.0

GameLift Server SDK の最新バージョンには、次の更新されたコンポーネントが含まれています。

• Unity 2019 用に更新された C# SDK バージョン 4.0.0• Unreal Engine 4.22、4.23、4.24 用に更新された Unreal プラグインバージョン 3.3.1• C# Server SDK v 4.0.0 を使用する統合をテストするため、GameLift ローカルバージョン 1.0.5 を更新

GameLift Server SDK の最新バージョンを「Amazon GameLift Getting Started」からダウンロードしてください。

Version320

Page 327: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

Amazon GameLift のドキュメント履歴

以下の表は Amazon GameLift のドキュメントの重要な変更点をまとめたものです。新機能および更新機能のリリースの詳細については、「Amazon GameLift リリースノート」を参照してください。

日付 変更 ドキュメントの更新 API バージョン

2019 年 11月 15 日

更新

• GameLift の拡張CloudFormation テンプレートのサポート –ビルドとフリートの既存の CloudFormationテンプレートが更新され、Script、Queue、MatchmakingConfiguration、MatchmakingRuleSetの新しいテンプレートが追加されました。

開発者ガイド:

• 新しいトピック:• AWS CloudFormation

を使用してリソースを作成する (p. 90)

AWS SDK: 2019-11-15

Server SDK 3.4.0

Realtime Client SDK 1.1.0

GameLiftLocal 1.0.0

2019 年 10月 24 日

更新

• Amazon Linux 2 およびSeries 5 インスタンスタイプのサポート – 新しい C5/M5/R5 インスタンスタイプを使用してゲームをホストします。ゲームサーバーが AmazonLinux 2 で実行できるようになりました。すべての Realtime サーバーがAmazon Linux 2 で実行されるようになりました。

開発者ガイドと API リファレンスドキュメントが追加のオプションを反映するように更新されました。

更新プログラムが 2019 年10 月 24 日にグローバルリージョンでリリースされ、2019 年 11 月 15 日にSinnet 運営の中国 (北京)リージョンでリリースされました。

AWS SDK: 2019-10-24

Server SDK 3.4.0

Realtime Client SDK 1.1.0

GameLiftLocal 1.0.0

2019 年 9 月3 日

新機能:

• TLS 証明書の生成 –GameLift はフリートレベルの TLS 証明書を生成して、カスタムサーバーおよび Realtime サーバーのサーバー認証とデータパケット暗号化をサポートできるようになりました。

開発者ガイド:

• 以下のトピックは TLS 証明書に関する情報で更新されています。• ゲームサーバーのホス

ティング (p. 4)• Realtime Client と

Realtime Server のやり取り方法 (p. 10)

• TLS 証明書を取得する (p. 46)

• リアルタイムサーバーのゲームクライアントの統合 (p. 63)

AWS SDK: 2019-09-03

Server SDK 3.4.0

Realtime Client SDK 1.1.0

GameLiftLocal 1.0.0

Version321

Page 328: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョンSDK & API リファレンス

• GameLift ServiceAPI、新しいCreateFleet() パラメータCertificateConfiguration

• GameLift Server SDK、新しいアクションGetInstanceCertificate() C++ (p. 264)、C# (p. 280)

• Realtime Client SDK、新しいパラメータ thesection called “データ型” (p. 252)

2019 年 7 月9 日

新機能:

• FlexMatch が大規模マッチングをサポート – マッチメイキングはマッチングあたり 200 人のプレイヤーをサポートするよう拡大され、より高速な新しいアルゴリズムが備わりました。マッチバックフィルに自動モードが搭載されました。

開発者ガイド:

• FlexMatch トピックが更新または拡張され、大規模なマッチングに関する情報が記載されました。• Amazon GameLift

FlexMatch の仕組み (p. 14)

• FlexMatch ルールセットを設計する (p. 149)

• FlexMatch ルールセットスキーマ (p. 299)

• FlexMatch ルールセットの例 (p. 156)

• FlexMatch を使用した既存のゲームのバックフィル (p. 80)

• FlexMatch マッチメーカーの設計 (p. 146)

AWS SDK のサービス APIリファレンス:

• マッチメイキング設定の次の API 呼び出しが、自動バックフィルをサポートするよう更新されました。CreateMatchmakingConfiguration、UpdateMatchmakingConfiguration、StopMatchmaking

AWS SDK: 2019-07-09

Server SDK 3.3.0

Realtime Client SDK 1.0.0

GameLiftLocal 1.0.0

Version322

Page 329: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン

2019 年 4 月25 日

新機能:

• リアルタイムサーバー –ゲームをデプロイするための基本的なゲームサーバーアーキテクチャーを組み込んだ リアルタイムサーバー を使用します。必要に応じてカスタムゲームサーバーロジックを追加します。

開発者ガイド:

• リアルタイムサーバー の新しいトピック:• リアルタイムサーバー

の仕組み (p. 8)• ゲームと Amazon

GameLift リアルタイムサーバー の統合 (p. 62)

• リアルタイムサーバーClient API (C#) リファレンス (p. 245)

AWS SDK のサービス APIリファレンス:

• リアルタイムサーバースクリプトを管理する新しい API 呼び出し:CreateScript、DescribeScript、UpdateScript、DeleteScript、ListScripts

• フリート API 呼び出しが更新され、スクリプトによる リアルタイムサーバー のデプロイが可能になりました。

AWS SDK: 2019-04-25

Server SDK 3.3.0

Realtime Client SDK 1.0.0

GameLiftLocal 1.0.0

2019 年 3 月7 日

新機能:

• AWS リソースへの安全なアクセス – AmazonGameLift インスタンスで実行されているアプリケーションに対してユーザーが所有する AWS リソースとの通信を許可します。

開発者ガイド:

• 安全なアクセスオプションに関する新しいトピック「フリートからのAWS リソースへのアクセス (p. 48)」。

AWS SDK のサービス APIリファレンス:

• CreateFleet とFleetAttributes –InstanceRoleArn が追加されました。

AWS SDK: 2019 年 3 月 7日

Server SDK 3.3.0

GameLiftLocal 1.0.0

Version323

Page 330: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン

2019 年 2 月7 日

新機能:

• マッチメーキングルールセットの削除

開発者ガイド:

• マッチメーキングルールセットの作成 (p. 154)マッチメーキングルールセットの削除に関する更新。

AWS SDK のサービス APIリファレンス:

• DeleteMatchmakingRuleSet(新規)

AWS SDK: 2019 年 2 月 7日

Server SDK 3.3.0

GameLiftLocal 1.0.0

2018 年 12月 14 日

更新:

• 新しい Server SDK バージョン – 更新されたServer SDK は、最新の Unity & Unreal エンジンと互換するようになり、Visual Studio 152017 で使用可能です。

• FlexMatch Backfill がUnreal エンジンゲームでサポートされました。

開発者ガイド:

• Unity (p. 42) およびUnreal (p. 38) ゲームでのServer SDK の構築と使用に関するドキュメントの更新。

• SDK 互換性 (p. 27) の更新。

Server SDK:

• StartMatchBackfill(Unreal) (p. 295) (新規)

• StopMatchBackfill(Unreal) (p. 295) (新規)

AWS SDK: 2018-12-14

Server SDK 3.3.0

GameLiftLocal 1.0.0

2018 年 9 月27 日

新機能:

• 中国の Amazon GameLift– Amazon GameLift サービスが AWS 中国 (北京)リージョンで利用可能になりました (Sinnet が運営)。

開発者ガイド:

• 新しいトピック「AWSリージョンでの AmazonGameLift の使用 (p. 30)」は、中国での AWS の使用に関する情報へのリンクを提供します。

AWS SDK: 2018-09-27

Server SDK 3.2.1

GameLiftLocal 1.0.0

2018 年 14月 6 日

新機能:

• FleetIQのキューメトリクス – FleetIQ のメトリクスを使用してキューのパフォーマンスを追跡します。

開発者ガイド:

• 5 つの新しいキューメトリクスを「キューのAmazon GameLift メトリクス (p. 192)」に追加しました。

• キューのパフォーマンスを最適化するための新しいトピック「キューメトリクスの評価 (p. 140)」。

AWS SDK: 2018-06-14

Server SDK 3.2.1

GameLiftLocal 1.0.0

Version324

Page 331: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン

2018 年 5 月10 日

新機能:

• Auto Scaling でのターゲット追跡 – この新しいスケーリング方法を使用してフリートの容量をプレイヤーの需要に合わせます。

• Auto Scaling の有効化/無効化 – スケーリングポリシーを削除することなく、Auto Scaling と手動スケーリングを切り替えます。

開発者ガイド:

• 新しいセクション「Amazon GameLift フリートの容量のスケーリング (p. 126)」では、Auto Scaling を含むスケーリングに関連するすべてのトピックを取り上げます。

• 「Amazon GameLift の仕組み」トピックの「フリートの容量のスケーリング (p. 6)」セクションが更新されました。

AWS SDK のサービス APIリファレンス:

• PutScalingPolicy (新しい例を紹介するために更新)

• StopFleetActions とStartFleetActions (新規)

AWS SDK: 2018 年 5 月 10日

Server SDK 3.2.1

GameLiftLocal 1.0.0

Version325

Page 332: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン

2018 年 2 月15 日

新機能:

• スポットインスタンスおよび FleetIQ – 新しいFleetIQ 機能とスポットフリートを使用し、ホスティングコストを大幅に削減します。

開発者ガイド:

• スポットフリート統合ガイド (p. 109) – スポットフリートの使用に関する新しいステップバイステップガイド。

• ゲームセッションキューの設計 (p. 136) – スポットフリートを含む、キューの作成と使用に関する新しい設計のヒント。

• トピックの更新:

コンピューティングリソースの選択 (p. 105)

カスタムゲームビルド用に GameLift フリートをデプロイする (p. 110)

サーバープロセスをシャットダウンする (p. 47)

AWS SDK のサービス APIリファレンス:

• スポットフリートを有効にするために追加された新しい FleetType パラメータ:• CreateFleet• FleetAttributes• イベント

Server SDK:

• GetTerminationTime (C++) (p. 265) (新規)

GetTerminationTime(C#) (p. 281) (新規)

AWS SDK: 2018 年 2 月 15日

Server SDK 3.2.1

GameLiftLocal 1.0.0

Version326

Page 333: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン

2018 年 2 月8 日

新機能:

• FlexMatch バックフィル– FlexMatch を使用して、進行中のマッチ済みゲームセッションに新しいプレイヤーを追加します。

• ゲームセッション検索– カスタムゲームプロパティを使用します。

開発者ガイド:

• マッチメーキングプロセス (p. 15) – 更新されたFlexMatch 機能の概要。

• FlexMatch を使用した既存のゲームのバックフィル (p. 80) – 新しいハウツーガイド。

• ゲームセッションの取得 (p. 51) – カスタムゲームプロパティの更新。

AWS SDK のサービス APIリファレンス:

• StartMatchBackfill (新規)• SearchGameSessions (新

規)• GameSession (新規)

Server SDK:

• StartMatchBackfill (C++) (p. 270) (新規)

StartMatchBackfill(C#) (p. 284) (新規)

StopMatchBackfill (C++) (p. 271) (新規)

StopMatchBackfill(C#) (p. 285) (新規)

AWS SDK: 2018 年 2 月 8日

Server SDK 3.2.0

GameLiftLocal 1.0.0

Version327

Page 334: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン

2017 年 9 月1 日

新機能:

Amazon GameLift フリートの VPC ピア接続 – VPC ピア接続を使用して、AmazonGameLift ゲームサーバーとAWS の他のリソースとの直接的でプライベートな接続を設定できるようになりました。

開発者ガイド:

• AWS リソースでのネットワーキング (p. 8) –Amazon GameLift でのVPC ピア接続と使用方法について詳しく説明します。

• Amazon GameLift の VPCピア接続 (p. 173) – VPCピア接続を設定する方法について詳しく説明します。

サービス API リファレンス:

• 新しい VPC ピア接続の新しい API:• CreateVpcPeeringAuthorization• DescribeVpcPeeringAuthorizations• DeleteVpcPeeringAuthorization• CreateVpcPeeringConnection• 「DescribeVpcPeeringConnections」• DeleteVpcPeeringConnection

• MatchmakingTicket– EndTime とEstimatedWaitTime が追加されました。

• DescribeMatchmaking のドキュメントが修正されました。この操作を使用して最大 10 のマッチメイキングチケットを取得できます。

AWS SDK: 2017 年 9 月 1日

Server SDK 3.1.7

GameLiftLocal 1.0.0

Version328

Page 335: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン

2017 年 8 月16 日

新機能:

Amazon GameLiftFlexMatch – このカスタマイズ可能なマッチメーキングサービスを使用してゲームにマッチメーキングを追加します。FlexMatch では、ゲームに最適なチーム形式およびプレイヤー属性に基づいてルールセットを設計できます。

開発者ガイド:

• Amazon GameLiftFlexMatch の仕組み (p. 14) – FlexMatch の主な機能と使用方法について詳しく説明します。

• FlexMatch マッチメーキングの追加 (p. 73) –FlexMatch を設定し、ゲームに合わせてカスタマイズする方法について詳しく説明します。

Server SDK:

• Amazon GameLift サーバー API – FlexMatch リソースを管理し、マッチメーキングで新しいゲームを開始するための新しい API。

AWS SDK: 2017 年 8 月 16日

Server SDK 3.1.7

GameLiftLocal 1.0.0

Version329

Page 336: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン

2017 年 5 月16 日

新機能:

• Amazon GameLift メトリクスが AmazonCloudWatch でサポートされるようになりました。これには、フリートのグループの集約されたメトリクスを操作する機能が含まれます。

• フリートのインスタンスでのゲームセッションアクティベーションを制限します。

更新:

• 自動スケーリング用の追加のメトリクスを活用します。

• 新しいコンソール UI を使用してフリートのスケーリングを設定します。

開発者ガイド:

• Amazon GameLift のモニタリング (p. 187) –Amazon GameLift コンソールと Cloudwatch で利用可能なメトリクスのリストを含む新規モニタリングセクション。

• カスタムゲームビルド用に GameLift フリートをデプロイする (p. 110) および フリートのレコードの管理 (p. 117) – フリート設定を作成および更新する手順の更新。

• Auto Scaling フリート容量 (p. 130) – フリートの手動スケーリングおよびAuto Scaling を設定する手順の更新。

サービス API リファレンス:

• 集約されたメトリクスを有効にするために追加された新しい MetricGroupsパラメータ:• CreateFleet• UpdateFleetAttributes• FleetAttributes

• RuntimeConfiguration –ゲームセッションアクティベーションの制限が追加されました。

AWS SDK: 2017 年 5 月 16日

Server SDK 3.1.5

GameLiftLocal 1.0.0

Version330

Page 337: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン

2017 年 4 月11 日

新機能:

• Amazon GameLift ローカル – ゲームの統合をローカルでテストします。

• 個々のプレイヤーに許可されるレイテンシーを制限するキューポリシーを設定します。

更新:

• 使いやすさを高めるAmazon GameLift ServiceAPI (AWS SDK の一部)の変更。

開発者ガイド:

• 統合をテストする (p. 57)– Amazon GameLift ローカルのセットアップと使用に関する新しいトピック。

• キューの作成 (p. 141) –キューの作成に関するトピックの更新 (プレイヤーのレイテンシーポリシーに関する新しい情報を含む)。

サービス API リファレンス:

• PlayerLatencyPolicy (新しいデータ型)

• PlacedPlayerSession (新しいデータ型)

• GameSessionPlacement–GameSessionId、IpAddress、Port、PlacedPlayerSessionsが追加されました。

• CreateGameSession –IdempotencyToken でGameSessionId が置き換えられます。

• GameSessionQueue –GameSessionQueueArnが追加されました。

AWS SDK: 2017 年 4 月 11日

Server SDK 3.1.5

GameLiftLocal 1.0.0

2017 年 2 月21 日

新機能:

• Unreal Engine、Unity、カスタムの C++ および C#ゲームエンジンを含む、複数のゲームエンジンのサポート

• サーバー SDK の言語サポートが C# を含むように拡張

• ゲームセッション配置とクロスリージョンキューを使用した新しいゲームセッション作成

• カスタムプレイヤーデータサポートとゲームサーバーへの直接配信

開発者ガイド:

• マネージド AmazonGameLift を使用したゲームアーキテクチャ (p. 18)– アーキテクチャ図。

• ゲームエンジンとAmazon GameLift (p. 36)– さまざまなゲームエンジンでの AmazonGameLift の使用方法と、Unreal Engine やUnity のプラグインセットアップ手順のヘルプ。

• マルチリージョンキューの使用 (p. 135) – キューのメトリクスの作成、管理、追跡に関するヘルプ。

AWS SDK: 2017 年 2 月 21日

Server SDK 3.1.5

Version331

Page 338: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン

2016 年 11月 18 日

新機能:

• Amazon GameLift フリートインスタンスへのリモートアクセス

開発者ガイド:

• 新しいトピック:• フリートインスタンス

にリモートでアクセス (p. 124) – AmazonGameLift インスタンスへのアクセスを取得してリモートから接続する方法

• フリートの問題をデバッグする (p. 121) –新しいフリートをアクティブ化できない場合のトラブルシューティングのヒント。

サービス API リファレンス:

• リモートアクセスの場合:• GetInstanceAccess (新

規)• InstanceAccess (新規)• InstanceCredentials (新

規)

AWS SDK: 2016 年 11 月18 日

Server SDK for C++: 3.1.0

Version332

Page 339: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン

2016 年 10月 13 日

新機能:

• リソース作成保護• インスタンスデータへの

アクセス

更新と修正:

• Linux に関する追加のヘルプ。

開発者ガイド:

• 改訂されたトピック:• Amazon GameLift の仕

組み (p. 3) – リソース保護の説明を追加し、容量処理の説明を改善。

• Linux 固有のヘルプを追加:

ゲームビルドファイルをパッケージ化します。 (p. 97) – Linux 用のインストールスクリプト。

カスタムサーバービルドを GameLift にアップロードする (p. 96) –Linux 用の新しい例。

カスタムゲームビルド用に GameLift フリートをデプロイする (p. 110) – Linux 用の新しい起動パスの例。

サービス API リファレンス:

• CreateFleet とUpdateFleetAttributes– 新しいResourceCreationLimitPolicyパラメータ。

• ResourceCreationLimitPolicy(新規)

• CreateGameSession –CreatorId が追加されました。

• DescribeInstances (新規)

AWS SDK: 2016年 10 月 13日

Server SDK for C++: 3.1.0

Version333

Page 340: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン

2016 年 9月 1 日

新機能:

• ゲームサーバーは Linuxで実行できます。

開発者ガイド:

• 新しいトピック:• Amazon GameLift

SDK (p. 25) – サポートされている言語およびオペレーティングシステムを含むすべてのAmazon GameLift SDKについて説明するリファレンストピック。

サービス API リファレンス:

• 新しい OS パラメータが以下に追加されました。• upload-build (p. 96)

(CLI のみ)• CreateBuild()• Build• FleetAttributes

AWS SDK: 2016年 9 月 1 日

Server SDK for C++: 3.1.0

Version334

Page 341: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン

2016 年 8 月4 日

新機能:

• ゲームセッション検索• カスタマイズされたヘル

スチェック

更新:

• 容量の割り当ての拡張されたサポート (フリートインスタンスあたり複数のプロセス)

• Amazon GameLift ServerSDK for C++ がダウンロード可能になりました。

• ゲームクライアントの統合のすべての API がAWS SDK に含まれるようになりました。

開発者ガイド:

• 新しいトピック:• Amazon GameLiftサー

バー API (C++) リファレンス (p. 261) – 完全なリファレンスドキュメント。

• フリートで複数のプロセスを実行する (p. 107) – 複数のプロセスを実行するための容量の割り当てとフリートの設定方法に関する技術的な概要。

• ツールとリソース (p. 28) – SDK バージョンの互換性を含むツールとリソースの包括的なリスト。

• 改訂されたトピック:• プレイヤーがゲームに

接続する方法 (p. 12) –拡張されたトピックでは、新しい検索機能など、ゲームセッションに関連する機能について説明しています。

• ゲームサーバーへのAmazon GameLift の追加 (p. 44) – 統合のステップは、バージョン3.0.7 Server SDK for C++ 用に改訂されました。

• ゲームクライアントへの Amazon GameLift の追加 (p. 50) – 統合のステップは、AWS SDKfor C++ 用ように改訂されました。

サービス API リファレンス:

• SearchGameSessions()(新規)

AWS SDK: 2016年 8 月 4 日

Server SDK for C++: 3.0.7

Version335

Page 342: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン

2016 年 6 月28 日

更新:

• 新しいサーバープロセスのヘルスメトリクス

• フリートの容量の割り当ておよびゲームサーバーの起動設定の改定されたプロセス

• 改定されたビルドパッケージ化の手順

開発者ガイド:

• 改訂されたトピック:• ゲームビルドファイ

ルをパッケージ化します。 (p. 97) – 説明に、ゲームビルドでAmazon GameLift がinstall.bat ファイルを処理する方法が追加されました。

• カスタムゲームビルド用に GameLift フリートをデプロイする (p. 110) – ランタイム設定を使用して容量の割り当てをカバーするフリートを作成する手順。

• フリートの詳細の表示 (p. 180) と ゲームおよびプレイヤーセッションのデータの表示 (p. 184) – コンソールページの説明に、現在のメトリクスおよびスケーリングタブの情報が反映されました。

• Amazon GameLift とゲームクライアント/サーバーとのやり取り (p. 54) – 説明および図 (p. 56)は、サンプルからのコールバック関数名を使用するように修正され、さらにonProcessTerminate()コールバックはゲームセッションではなくゲームサーバーのシャットダウンを示すように明確化されました。

サービス API リファレンス:

• 新しい容量の割り当て:• CreateFleet() – ラ

ンタイム設定が追加されました。

• DescribeRuntimeConfiguration(新規)

AWS SDK: 2016年 6 月 28日

Version336

Page 343: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン• UpdateRuntimeConfiguration

(新規)• ゲームサーバーの起動プ

ロセス:• GameSession – ポー

ト番号が追加されました。PlayerSession –ポート番号が追加されました。

• ヘルスメトリクス:• FleetUtilization –

アクティブなサーバープロセス用に新しいカウントが追加されました。

Version337

Page 344: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン

2016 年 3 月10 日

新機能:

• Auto Scaling• ゲームセッション保護• フリートの容量制限

開発者ガイド:

• 新しいトピック:• Auto Scaling フリー

ト容量 (p. 130) – AutoScaling ポリシーの設定および管理の方法。

• フリートの容量を手動で設定する (p. 129) –フリートのインスタンスの数を変更し、制限を設定する方法。

• Amazon GameLift の仕組み (p. 3) – AmazonGameLift が仮想リソースをまたがってゲームのデプロイを管理する方法の技術的な概要。

• 改訂されたトピック:• カスタムゲームビル

ド用に GameLift フリートをデプロイする (p. 110) – ゲームセッション保護および安全なスケーリングの設定を含むように改訂されました。

• その他の変更:• Lumberyard-Amazon

GameLift チュートリアルは、GameDevチュートリアルリポジトリに移動されました。

サービス API リファレンス:

• Auto Scaling:• PutScalingPolicy• DescribeScalingPolicies• DeleteScalingPolicy

• ゲームセッション保護:• DescribeGameSessionDetails• CreateFleet (改訂)• UpdateFleetAttributes

(改訂)• DescribeFleetAttributes

(改訂)• UpdateGameSession

(改訂)

AWS SDK 2016年 3 月 10日

Version338

Page 345: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

日付 変更 ドキュメントの更新 API バージョン• フリートの容量制限:

• UpdateFleetCapacity(改訂)

• DescribeFleetCapacity(改訂)

2016 年 2 月9 日

サービスの起動 AWS でリリースされたAmazon GameLift サービスの開発者ガイドおよび APIリファレンス。

AWS SDK 2016年 2 月 9 日

Version339

Page 346: Amazon GameLift - 開発者ガイド · Amazon GameLift 開発者ガイド リアルタイムサーバー を使用したマネージド GameLift 主な特徴 •複数の AWS リージョンでコンピューティングリソースをデプロイすることによって、世界中のプレー

Amazon GameLift 開発者ガイド

AWS の用語集最新の AWS の用語については、『AWS General Reference』の「AWS の用語集」を参照してください。

Version340