Amazon GameLift マネージドホスティングの開発ロードマップ
このロードマップでは、マルチプレイヤーゲーム向けの Amazon GameLift マネージドホスティングソリューションを開発する方法について説明します。Amazon GameLift にはいくつかのゲームホスティングオプションがあります。こうしたオプションの詳細については、「Amazon GameLift ソリューション」を参照してください。
Amazon GameLift マネージドホスティングでは、ゲームサーバーのホスティングは、Amazon GameLift が所有し、ユーザーの設定に基づいて運用する AWS クラウドベースの仮想コンピューティングリソースで行われます。ユーザーは、マルチプレイヤーゲームホスティングでの使用向けにさらに最適化された Amazon Elastic Compute Cloud (Amazon EC2) インスタンスのセキュリティ、信頼性、グローバル可用性を活用できます。Amazon GameLift は、自動サーバーデプロイ、ライフサイクル処理、容量の自動スケーリングなどのツールを使用して、ホスティング管理を合理化します。
Amazon GameLift マネージドソリューションは、以下のコンポーネントで構成されています。
-
マルチプレイヤーゲームホスティング用に最適化された Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを使用する 1 つまたは複数の Amazon GameLift マネージドフリート。
-
Amazon GameLift サーバー SDK と統合されたゲームサーバービルド。すべてのフリートにデプロイされます。
-
Amazon GameLift サービスとやり取りし、ゲームセッションをリクエストするための、AWS SDK と統合されたゲームクライアントとバックエンドサービス。
-
すべてのフリートで利用可能なゲームサーバーに新しいゲームセッションを配置する Amazon GameLift キュー。
-
(オプション) マルチプレイヤーマッチを作成し、マッチのゲームセッションを立ち上げる FlexMatch マッチメーカー。
このロードマップは、Amazon GameLift マネージドホスティングを使用してマルチプレイヤーゲームを稼働させるための効率的な道筋を示しています。必要なコンポーネントが揃ったら、ゲーム開発を繰り返し、ホスティングソリューションをカスタマイズできます。ローンチが近づいたら、本番稼働レベルの使用に備えてホスティングソリューションを準備する方法について、「Amazon GameLift ホスティングでゲームをローンチするための準備」を参照してください。
Amazon GameLift プラグインですぐに始める
Unreal Engine または Unity でプロジェクトを開発している場合は、ゲームをホスティングするための設定を Amazon GameLift プラグインで行うことができます。プラグインを使用すると、Amazon GameLift SDK をゲームプロジェクトに追加し、ガイド付きワークフローを使用して Amazon GameLift マネージドホスティングソリューションの簡易版を構築できます。その後、これらの基本要素を基に構築し、必要に応じてカスタマイズできます。
ゲームサーバーに機能を追加して、ホスト用にデプロイされたときに Amazon GameLift サービスと通信できるようにします。
-
ゲームプロジェクト用の Amazon GameLift サーバー SDK (バージョン 5.x) を取得します。サーバー SDK は、C++、C#、Go で利用可能です。Amazon GameLift サーバー SDK をダウンロードします
。 -
ゲームサーバーコードを変更して、サーバーの SDK 機能を追加します。ガイダンスについては、「カスタムゲームサーバーとゲームを統合する」を参照してください。少なくとも、以下を実行します。
-
Amazon GameLift SDK を初期化し、Amazon GameLift サービスと WebSocket 接続を確立するコードを追加します。サーバー SDK アクション
InitSdk()
を使用します。 -
サーバープロセスがゲームセッションをホストする準備ができたことを Amazon GameLift サービスに報告するコードを追加します。サーバー SDK アクション
ProcessReady()
を使用します。 -
必要なコールバック関数
OnRefreshConnection()
、OnProcessTerminate()
、OnStartGameSession()
を実装します。これらの関数を使用することで、ゲームサーバープロセスは Amazon GameLift サービスとの接続を維持し、Amazon GameLift からの指示によりゲームセッションを開始し、ゲームサーバープロセスを終了するプロンプトに応答できます。 -
サーバープロセスがゲームセッションを終了することを Amazon GameLift サービスに報告するコードを追加します。サーバー SDK アクション
ProcessEnding()
を使用します。
-
-
ゲームサーバービルドをパッケージ化します。ビルドファイル、依存関係、サポートソフトウェアを含むインストールスクリプトを作成します。「ゲームビルドファイルをパッケージ化する」を参照してください。Amazon Simple Storage Service (Amazon S3) バケットを使用して、ゲームビルドのバージョンを保存することをお勧めします。
-
ゲームサーバーの統合をテストします。このタスクでは、「Amazon GameLift Anywhere を使用してローカルテストを設定する」で説明されているように、ローカルワークステーションの Amazon GameLift Anywhere フリートをセットアップすることをお勧めします。このステップでは、ゲームサーバービルドをテストデバイスに手動でインストールし、サーバープロセスを開始します。AWS CLI を使用して新しいゲームセッションをリクエストし、Amazon GameLift サービスがサーバープロセスにゲームセッションの開始を正常に指示することを確認します。
ゲームクライアントがゲームセッションへの参加をリクエストし、接続情報を取得して、ホストされているゲームセッションに直接接続する方法を作成します。最も一般的なアプローチは、ゲームクライアントと Amazon GameLift サービス間の仲介役として機能するバックエンドサービス機能をセットアップすることです。このアプローチにより、ホスティングリソースを保護し、プレイヤーがゲームセッションにどのように配置されるかをより詳細に制御することができます。
-
ホスティング用のバックエンドサービス機能を構築します。Amazon GameLift は接続情報をバックエンドサービスまたはゲームクライアントサービスに送信します。この機能には、ゲームセッションの開始、ゲームへのプレイヤーの配置、ゲームセッション情報の取得が含まれます。ガイダンスについては、「カスタムゲームサーバーとゲームを統合する」を参照してください。少なくとも、以下を実行します。
-
AWS SDK for Amazon GameLift を取得し、バックエンドサービスプロジェクトに追加します。「クライアントサービス用の Amazon GameLift SDK リソース」を参照してください。
-
Amazon GameLift クライアントを初期化し、キー設定を保存するコードを追加します。「バックエンドサービスで Amazon GameLift をセットアップする」を参照してください。
-
AWS SDK アクション
CreateGameSession()
を呼び出し、ゲームクライアントにゲームセッション接続情報を提供する機能を追加します。「特定のフリートにゲームセッションを作成する」を参照してください。CreateGameSession()
の呼び出しは、新しいゲームセッションをリクエストする際に便利な出発点となります。ゲームセッション配置システムが整ったら (ステップ 3 を参照)、このコードをStartGameSessionPlacement()
への呼び出しに置き換えます (FlexMatch を使用している場合はStartMatchmaking()
)。バックエンドサービスを設計する方法については、「ゲームクライアントサービスを設計する」を参照してください。
-
-
プレイヤーがホストされているゲームセッションに参加できるようにする機能をゲームクライアントに追加します。ゲームクライアントは、Amazon GameLift に直接リクエストするのではなく、バックエンドサービスにリクエストを行います。バックエンドサービスがゲームセッション接続情報を提供すると、ゲームクライアントはゲームセッションに直接接続してゲームをプレイします。
-
ゲームクライアントの統合をテストします。テストには、ローカルワークステーションで同じ Amazon GameLift Anywhere フリートを使用できます。
高速反復型開発や複数人チームでの作業には、クラウドベースのテスト環境を立ち上げることをお勧めします。この Amazon GameLift Toolkit ソリューションは、Amazon GameLift マネージドフリートの動作を模倣しますが、ゲームサーバーのビルドを最小限のターンアラウンドタイムで更新できます。
Amazon GameLift が新しいゲームセッションのリクエストを処理し、そのセッションをホストするために利用可能なゲームサーバーを検索する方法をカスタマイズします。Amazon GameLift は、すべてのフリートのすべてのゲームサーバーの可用性を自動的に追跡します。ゲームクライアントがゲームセッションへの参加リクエストを送信すると、Amazon GameLift は最小レイテンシー、コスト、可用性などの定義された一連の優先順位に基づいて「可能な限り最良の」配置を探します。
-
利用可能なゲームサーバーで新しいゲームセッションを配置するためのゲームセッションキューを作成します。キューは、ゲームセッション配置の主要なメカニズムです。ガイダンスについては、「ゲームセッションキューを作成する」を参照してください。
-
少なくとも、Anywhere フリートをキュー内の送信先として追加します。その他のすべての設定はオプションのカスタマイズです。
-
-
バックエンドサービスコードで、
CreateGameSession()
呼び出しをStartGameSessionPlacement()
に変換します。「マルチフリートキューにゲームセッションを作成する」を参照してください。 -
ゲームセッションに参加できる状態になったら、ゲームクライアントに通知するメカニズムを作成します。開発中は、DescribeGameSessionPlacement を呼び出してゲームセッションのステータスをポーリングできます。ただし、大量の処理にキューを使用する前に、イベント通知を有効にする必要があります。「ゲームセッション配置のイベン通知を設定」を参照してください。
-
(オプション) FlexMatch マッチメーキングコンポーネントを追加します。ガイダンスについては、「Amazon GameLift FlexMatch デベロッパーガイド」を参照してください。
これまで、セルフマネージド型の Anywhere フリートを使用してゲームコンポーネントをテストして反復処理し、ゲームセッションの配置を微調整してきました。ソリューションの最後の部分では、本番稼働システムに必要なタイプのホスティングリソースを設定します。本番稼働に向けた計画と設定を開始するには、Amazon GameLift マネージドフリートの使用に移行します。
-
ゲームサーバーを構築し、そのビルドを Amazon GameLift にアップロードします。ビルドファイル、依存関係、サポートソフトウェアを含むインストールスクリプトを作成します。「Amazon GameLift ホスティング用のカスタムサーバービルドをデプロイする」を参照してください。ビルドを Amazon GameLift AWS にアップロードするには、コンソールまたは CLI を使用します。
ビルドをアップロードする前に、どの AWS リージョンにフリートを作成するかを決めます。ビルドを同じリージョンにアップロードする必要があります。フリートのロケーションの選び方については、「フリートのロケーション」を参照してください。
-
マネージド EC2 フリートを作成します。フリートを作成すると、Amazon GameLift はすぐにホスト用にゲームサーバービルドのデプロイを開始します。マネージドフリートの多くの側面を設定できます。ガイダンスについては、「Amazon GameLift マネージド EC2 フリートを作成する」を参照してください。少なくとも、以下を実行します。
-
フリートに名前を付け、デプロイするアップロード済みのゲームビルドを指定します。
-
フリートのオンデマンドインスタンスを選択し、フリートのロケーションで利用可能なインスタンスタイプを選択します。スポットフリートは有用なオプションですが、追加の設計と設定が必要です。
-
フリートのランタイム設定を作成します。少なくとも、ゲームサーバー実行可能ファイルの起動パスを指定します。
-
インバウンドトラフィックがゲームサーバーにアクセスできるように、ポート設定を指定します。
-
-
マネージドフリートをキューに追加します。ゲームセッションキューで、Anywhere フリートをマネージドフリートで置き換えます。
-
マネージドフリートでゲームホスティングをテストします。この時点で、ゲームクライアントがゲームセッションをリクエストしてから、接続情報を取得して、ゲームセッションに正常に接続するまでのホスティングサイクル全体をテストできるはずです。
ゲームのローンチに備えて、マネージドホスティングリソースを微調整する必要があります。考慮すべき決定事項には、次のようなものがあります。
コスト削減のためにスポットフリートの追加を検討します。「チュートリアル: スポットインスタンスを使用して Amazon GameLift キューを作成する」を参照してください。
-
ゲームサーバーが他の AWS リソースと通信する必要がある場合は、IAM ロールを設定してアクセスを管理します。「フリートの他の AWS リソースと通信する」を参照してください。
ゲームサーバーを地理的にどこに配置するかを決定します。マネージドフリートにリモートロケーションを追加します。「マネージドフリートの設計ガイド」を参照してください。
インスタンスのタイプとサイズを選択し、複数のサーバープロセスを実行するようにランタイムを設定することで、フリートのパフォーマンスを最適化します。「Amazon GameLift がゲームサーバーを起動する方法を管理する」を参照してください。
優先順位付け設定のカスタマイズなど、マネージドフリートのゲームセッション配置オプションを試してみます。「ゲームセッションキューの設計」を参照してください。
-
予想されるプレイヤー需要に応えるための自動容量スケーリングを設定します。「Amazon GameLift によるゲームホスティング容量のスケーリング」を参照してください。
-
他の AWS リージョンにスタンバイフリートを用意し、必要に応じてフェイルオーバーを処理できるようにキューと自動スケーリングを変更します。
-
分析やログ記録など、ホスティングのオブザーバビリティツールをセットアップします。「Amazon GameLift のモニタリング」を参照してください。
-
Infrastructure as Code (IaC) を使用してデプロイを自動化します。「AWS CloudFormation を使用した Amazon GameLift ホスティングリソースの管理」を参照してください。
Amazon GameLift では、デプロイ固有の設定にテンプレートを使用できます。AWS Cloud Development Kit (AWS CDK) を使用して Amazon GameLift リソースを定義することもできます。AWS CDK の詳細については、AWS Cloud Development Kit (AWS CDK) デベロッパーガイドを参照してください。
AWS CloudFormation スタックのデプロイを管理するには、AWS CodePipeline などの継続的インテグレーションおよび継続的デリバリー (CI/CD) ツールとサービスを使用することをお勧めします。こうしたツールにより、ゲームサーバーバイナリが構築されるたびに、自動的に、または承認によりデプロイできます。CI/CD ツールまたはサービスを使用すると、新しいゲームサーバーバージョンのリソースのデプロイは次のようになります。
-
ゲームサーバーバイナリをビルドしてテストする。
-
バイナリを Amazon GameLift にアップロードする。
-
新しいビルドを使用して新しいフリートをデプロイする。
-
ゲームセッションキューに新しいフリートを追加し、以前のビルドバージョンのフリートを削除する。
-
以前のビルドのフリートがアクティブなゲームセッションをホストしなくなった場合は、そうしたフリートの AWS CloudFormation スタックを削除する。
-