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