Amazon GameLift Serversを利用するハイブリッドホスティングの開発ロードマップ - Amazon GameLift Servers

Amazon GameLift Serversを利用するハイブリッドホスティングの開発ロードマップ

このロードマップでは、マルチプレイヤーゲームのホスティングソリューションを開発する方法について説明します。Amazon GameLift Servers には複数のゲームホスティングオプションがあります。これらの詳細については、Amazon GameLift Servers ゲームホスティングオプション を参照してください。

ハイブリッドソリューションでは、Amazon GameLift Servers が管理するクラウドベースのリソースと、ユーザーが管理するホスティングリソースを組み合わせて使用します。ハイブリッドホスティングの詳細については、「Hybrid game server hosting with Amazon GameLift Servers Anywhere」の記事を参照してください。Amazon GameLift Servers を使用すると、共通のコンポーネントとプロセスを利用したハイブリッドソリューションをセットアップでき、グローバルフリートを一元管理しながら、さまざまな種類のリソース間で負荷を容易に移動できます。

ハイブリッドアーキテクチャは、次のコンポーネントで構成されます。

  • サーバー SDK for Amazon GameLift Servers と統合された 1 つのゲームサーバービルド。すべてのフリートにデプロイします。

  • AWS SDK と統合された 1 つのゲームクライアントとバックエンドサービス。Amazon GameLift Servers サービスとやり取りし、ゲームセッションをリクエストします。

  • 利用可能なゲームサーバーで新しいゲームセッションを配置し、すべてのフリート間で負荷を分散するための共有 Amazon GameLift Servers キュー。

  • (オプション) Anywhere フリートにデプロイされるプロセスマネージャーエージェント。すべてのフリートのコンピューティング全体でサーバープロセス管理タスクを簡素化します。

  • (オプション) マルチプレイヤーマッチを作成し、マッチのゲームセッションを立ち上げる FlexMatch マッチメーカー。

  • マルチプレイヤーゲームホスティング用に最適化された Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを使用する 1 つまたは複数の Amazon GameLift Servers マネージドフリート。

  • 構成管理やデプロイツールを含む、既存のオンプレミスまたは他のホスティングリソースを使用する、1 つ以上の Amazon GameLift Servers Anywhere フリート。(AWS Systems Manager を使用することもできます)。

このロードマップは、Amazon GameLift Servers を使用したハイブリッドホスティングソリューションでマルチプレイヤーゲームを稼働させるための効率的な道筋を示しています。必要なコンポーネントが揃ったら、ゲーム開発を繰り返し、ホスティングソリューションをカスタマイズできます。ローンチが近づいたら、本番稼働レベルの使用に備えてホスティングソリューションを準備する方法について、「Amazon GameLift Servers ホスティングによる起動の準備」を参照してください。

Amazon GameLift Servers プラグインでジャンプスタートする

Unreal Engine または Unity でプロジェクトを開発している場合は、ゲームをホスティングするための設定を Amazon GameLift Servers プラグインで行うことができます。プラグインを使用すると、Amazon GameLift Servers SDK をゲームプロジェクトに追加し、ガイド付きワークフローを使用して Anywhere フリートと Amazon GameLift Servers マネージドフリートの両方を使用したハイブリッドホスティングソリューションの簡易版を構築できます。その後、これらの基本要素を基に構築し、必要に応じてカスタマイズできます。

ゲームサーバーに機能を追加して、ホスティング用にデプロイされたときに Amazon GameLift Servers サービスと通信できるようにします。ゲームサーバーが Amazon GameLift Servers マネージドフリートで実行されている場合でも、Anywhere フリートで実行されている場合でも、同じ機能が必要です。

  • ゲームプロジェクト用に SDK for Amazon GameLift Servers (バージョン 5.x) を取得します。サーバー SDK は、C++、C#、Go で利用可能です。サーバー SDK for Amazon GameLift Servers をダウンロードします

  • ゲームサーバーコードを変更して、サーバーの SDK 機能を追加します。ガイダンスについては、「Amazon GameLift Serversでホストするゲームを準備します」を参照してください。少なくとも、以下を実行します。

    • Amazon GameLift Servers SDK を初期化するコードを追加し、Amazon GameLift Servers サービスとの WebSocket 接続を確立します。サーバー SDK アクション InitSdk() を使用します。Anywhere フリートコンピューティングで実行する際にサーバーパラメータを指定するコードを含めます。

    • サーバープロセスがゲームセッションをホストする準備ができたことを 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 フリートをセットアップすることをお勧めします。このステップでは、ゲームサーバービルドをテストデバイスに手動でインストールし、サーバープロセスを開始します。AWS CLI を使用して新しいゲームセッションをリクエストし、Amazon GameLift Servers サービスがサーバープロセスにゲームセッションの開始を正常に指示することを確認します。

ゲームクライアントがゲームセッションへの参加をリクエストし、接続情報を取得して、ホストされているゲームセッションに直接接続する方法を作成します。最も一般的なアプローチは、ゲームクライアントと Amazon GameLift Servers サービス間の仲介役として機能するバックエンドサービス機能をセットアップすることです。このアプローチにより、ホスティングリソースを保護し、プレイヤーがゲームセッションにどのように配置されるかをより詳細に制御することができます。

  • ホスティング用のバックエンドサービス機能を構築します。バックエンドサービスは Amazon GameLift Servers サービスと通信し、ゲームクライアントに接続情報を送信します。この機能には、ゲームセッションの開始、ゲームへのプレイヤーの配置、ゲームセッション情報の取得が含まれます。ガイダンスについては、「Amazon GameLift Serversでホストするゲームを準備します」を参照してください。少なくとも、以下を実行します。

  • プレイヤーがホストされているゲームセッションに参加できるようにする機能をゲームクライアントに追加します。ゲームクライアントは、Amazon GameLift Servers に直接リクエストするのではなく、バックエンドサービスにリクエストを行います。バックエンドサービスがゲームセッション接続情報を提供すると、ゲームクライアントはゲームセッションに直接接続してゲームをプレイします。

  • ゲームクライアントの統合をテストします。テストでは、ローカルワークステーションで同じ Amazon GameLift Servers Anywhere フリートを使用できます。

    開発段階で Amazon GameLift Servers マネージドフリートでのゲームビルドの動作をテストする場合は、クラウドベースのテスト環境も用意することをお勧めします。この Amazon GameLift Servers Toolkit ソリューションは、マネージドフリートの動作を模倣しますが、ゲームサーバーのビルドを最小限のターンアラウンドタイムで更新できます。

Amazon GameLift Servers が新しいゲームセッションのリクエストをどのように処理し、ホスト可能なゲームサーバーをどのように特定するかをカスタマイズできます。Amazon GameLift Servers は、すべてのフリート内のゲームサーバーの可用性を自動的に追跡します。ゲームクライアントがゲームセッションへの参加リクエストを送信すると、Amazon GameLift Servers は最小レイテンシー、コスト、可用性などの定義された一連の優先順位に基づいて「可能な限り最良の」配置を探します。

  • 利用可能なゲームサーバーで新しいゲームセッションを配置するためのゲームセッションキューを作成します。キューは、ゲームセッション配置の主要なメカニズムです。ガイダンスについては、「ゲームセッションキューを作成する」を参照してください。

    • 少なくとも、Anywhere フリートをキュー内の送信先として追加します。その他のすべての設定はオプションのカスタマイズです。

  • バックエンドサービスコードで、CreateGameSession() 呼び出しを StartGameSessionPlacement() に変換します。マルチフリートキューにゲームセッションを作成する」を参照してください。

  • ゲームセッションに参加できる状態になったら、ゲームクライアントに通知するメカニズムを作成します。開発中は、DescribeGameSessionPlacement を呼び出してゲームセッションのステータスをポーリングできます。ただし、大量の処理にキューを使用する前に、イベント通知を有効にする必要があります。「ゲームセッション配置のイベント通知を設定」を参照してください。

  • (オプション) FlexMatch マッチメーキングコンポーネントを追加します。ガイダンスについては、「Amazon GameLift ServersFlexMatch デベロッパーガイド」を参照してください。

ここまでは、Anywhere フリートのコンピューティングとして登録されたローカルデバイスを使用して、ゲームコンポーネントのテストと反復作業を行ってきました。次のステップでは、本番稼働システムに必要なフリートのタイプを設定します。Anywhere フリートから開始し、コンピューティング上で直接行われるいくつかの主要なホスト管理タスクを管理するための Amazon GameLift Servers エージェントを追加します。詳細については、「Amazon GameLift Servers エージェントの操作」を参照してください。

  • Amazon GameLift Servers エージェントを取得し、ゲームサーバーのインストールパッケージに追加します。Amazon GameLift Servers エージェント GitHub リポジトリにあるエージェントソースコードを取得してビルドします。ビルドした実行可能 JAR ファイルをゲームビルド実行可能ファイルと同じディレクトリに配置します。

  • 必要に応じて、エージェントのスタートアップスクリプトを変更します。コンピューティングの実行が開始されるとすぐに、エージェント実行可能ファイルが起動することを確認します。ホスティングコンピューティングにエージェントをインストールして実行する方法については、エージェントのリポジトリにある readme ファイルを参照してください。起動コマンドには、少なくとも、Anywhere フリート ID と AWS リージョン、カスタムロケーション、コンピューティング名を指定するオプションを含める必要があります。

    エージェントは、以下のタスクを自動的に処理するため、これらのタスクをスクリプトで処理している場合は、削除できます。

    • RegisterCompute() を呼び出して、コンピューティングを Anywhere フリートに追加する。

    • GetComputeAuthToken() を呼び出して、ゲームサーバーが Amazon GameLift Servers サービスに接続する際に認証を行う。エージェントは認証トークンの取得と更新を管理します。このトークンは、コンピューティングで実行されているすべてのゲームサーバープロセスで使用できます。

    • 一連のランタイム手順に基づいて、コンピューティングで新しいサーバープロセスを開始する。

  • Anywhere フリートでコンピューティングのランタイム設定を作成します。少なくとも、ゲームサーバー実行可能ファイルの起動パスを指定します。Amazon GameLift Servers コンソールまたは AWS CLI を使用して、フリートのランタイム手順を作成または変更できます。エージェントはこの手順を実行し、定期的に Amazon GameLift Servers サービスから更新をリクエストします。

  • 必要に応じて、ゲームセッションキューを設定または変更します。新しいキューを作成するか、既存のキューを更新し、Amazon GameLift Servers エージェントでデプロイされた Anywhere フリートの送信先を指定します。

  • Anywhere フリートとのエージェント統合をテストします。エージェントがランタイム設定に基づいてサーバープロセスを適切に開始していることを確認します。

Anywhere フリートを補完する Amazon GameLift Servers マネージド EC2 フリートを作成します。開発を高速化するためにステップ 2 でクラウドベースのテスト環境を立ち上げた場合は、ゲーム開発とテストのほとんどを完了した後にマネージドフリートを作成する計画を立てます。自動容量スケーリングなどの追加設定を設定およびテストするには、フルマネージドフリートが必要です。

  • ゲームサーバーを構築し、そのビルドを Amazon GameLift Servers にアップロードします。ビルドファイル、依存関係、サポートソフトウェアを含むインストールスクリプトを作成します。Anywhere フリートとマネージドフリートの両方で同じビルドソフトウェアを使用できます。「Amazon GameLift Servers のゲームサーバービルドを作成する」を参照してください。ビルドを Amazon GameLift Servers にアップロードするには、コンソールまたは AWS CLI を使用します。

    ビルドをアップロードする前に、どの AWS リージョン にマネージドフリートを作成するかを決めます。ビルドを同じリージョンにアップロードする必要があります。フリートのロケーションの選び方については、「地理的場所」を参照してください。

  • マネージド EC2 フリートを作成します。マネージドフリートを作成するには、Amazon GameLift Servers コンソールまたは (AWS CLI) を使用します。フリートを作成すると、Amazon GameLift Servers はすぐにホスティング用にゲームサーバービルドのデプロイを開始します。マネージドフリートの多くの側面を設定できます。ガイダンスについては、「Amazon GameLift Servers マネージド EC2 フリートを作成する」を参照してください。少なくとも、以下を実行します。

    • フリートに名前を付け、デプロイするアップロード済みのゲームビルドを指定します。

    • フリートのオンデマンドインスタンスを選択し、フリートのロケーションで利用可能なインスタンスタイプを選択します。スポットフリートは有用なオプションですが、追加の設計と設定が必要です。

    • Anywhere フリートで使用したのと同様の設定でランタイム設定を作成します。少なくとも、ゲームサーバー実行可能ファイルの起動パスを指定します。

    • インバウンドトラフィックがゲームサーバーにアクセスできるように、ポート設定を指定します。

  • マネージドフリートを共有ゲームセッションキューに追加します。ステップ 4 のキューを更新して、Amazon GameLift Servers エージェントでデプロイされたマネージドフリートと Anywhere フリートの両方の送信先を含めます。

  • マネージドフリートでゲームホスティングをテストします。この時点で、ゲームクライアントがゲームセッションをリクエストしてから、接続情報を取得して、ゲームセッションに正常に接続するまでのホスティングサイクル全体をテストできるはずです。

ゲームのローンチに備えて、ホスティングソリューションをファインチューニングする必要があります。考慮すべき決定事項には、次のようなものがあります。

  • Anywhere フリートの場合、ゲームサーバーソフトウェアのインストールと実行など、必要に応じてコンピューティングを開始およびシャットダウンするプロセスを自動化します。コンピューティングのリサイクルは、コンピューティングを定期的に更新するために役立ちます。また、必要のないときはコンピューティングをシャットダウンすることで、コストを削減できます。

  • ゲームサーバーが他の AWS リソースと通信する必要がある場合は、IAM ロールを設定してアクセスを管理します。「Amazon GameLift Servers ホストされたゲームサーバーを他の AWS リソースに接続する」を参照してください。

  • ゲームサーバーを地理的にどこに配置するかを決定します。マネージドフリートにリモートロケーションを追加します。「ホスティングリソースのカスタマイズ」を参照してください。

  • マネージドフリートの場合は、コスト削減のためにスポットフリートの使用を検討します。「スポットフリートによるゲームホスティングコストの削減 」を参照してください。

  • コンピューティングリソース設定を選択してフリートのパフォーマンスを最適化し、コンピューティングごとに最適な数のサーバープロセスを実行するようにランタイム手順を設定します。Anywhere フリートとマネージドフリートの両方でこれを行います。「マネージド Amazon GameLift Servers でのゲームサーバーランタイム設定の最適化」を参照してください。

  • 優先順位付け設定のカスタマイズなど、マネージドフリートのゲームセッション配置オプションを試してみます。「ゲームセッションキューをカスタマイズする」を参照してください。

  • マネージドフリートの場合、予想されるプレイヤー需要に応えるための自動容量スケーリングを設定します。「Amazon GameLift Servers を使用したゲームホスティング容量のスケーリング」を参照してください。

  • Anywhere フリートの場合、予想されるプレイヤー需要に応えるために、手動または自動で容量をスケーリングするメカニズムを構築します。

  • 必要に応じて、他のリソースへのフェイルオーバーを設計して実装します。他の 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 スタックを削除します。