Amazon GameLift でのハイブリッドホスティングの開発ロードマップ - Amazon GameLift

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon GameLift でのハイブリッドホスティングの開発ロードマップ

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

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

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

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

  • 1 つまたは複数の Amazon GameLift Anywhere フリート。設定管理やデプロイツールなど、既存のオンプレミスまたは他のホスティングリソースを使用します ( AWS Systems Managerを使用することもできます)。

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

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

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

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

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

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

Amazon GameLift プラグインですぐに始める

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

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

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

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

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

    • サーバープロセスがゲームセッションをホストする準備ができたことを 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 は接続情報をバックエンドサービスまたはゲームクライアントサービスに送信します。この機能には、ゲームセッションの開始、ゲームへのプレイヤーの配置、ゲームセッション情報の取得が含まれます。ガイダンスについては、「カスタムゲームサーバーとゲームを統合する」を参照してください。少なくとも、以下を実行します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • マネージドフリートの場合は、コスト削減のためにスポットフリートの使用を検討します。「チュートリアル: スポットインスタンスを使用して Amazon GameLift キューを作成する」を参照してください。

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

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

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

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

  • 必要に応じて、他のリソースへのフェイルオーバーを設計して実装します。他の AWS リージョン にスタンバイフリートを用意し、必要に応じてフェイルオーバーを処理できるようにキューと自動スケーリングを変更します。

  • 分析やログ記録など、ホスティングのオブザーバビリティツールをセットアップします。「Amazon GameLift のモニタリング」を参照してください。すべてのホスティングリソースの分析を集約するメトリクスグループを作成します。

  • Infrastructure as Code (IaC) を使用してデプロイを自動化します。「AWS CloudFormation を使用した Amazon GameLift ホスティングリソースの管理」を参照してください。

    Amazon GameLift では、デプロイ固有の設定に AWS CloudFormation テンプレートを使用できます。を使用して Amazon GameLift リソース AWS Cloud Development Kit (AWS CDK) を定義することもできます。の詳細については AWS CDK、「 AWS Cloud Development Kit (AWS CDK) デベロッパーガイド」を参照してください。

    AWS CloudFormation スタックのデプロイを管理するには、継続的インテグレーションおよび継続的デリバリー (CI/CD) ツールや などのサービスを使用することをお勧めします AWS CodePipeline。こうしたツールにより、ゲームサーバーバイナリが構築されるたびに、自動的に、または承認によりデプロイできます。CI/CD ツールまたはサービスを使用すると、新しいゲームサーバーバージョンのリソースのデプロイは次のようになります。

    • ゲームサーバーバイナリをビルドしてテストする。

    • バイナリを Amazon GameLift にアップロードする。

    • 新しいビルドを使用して新しいフリートをデプロイする。

    • ゲームセッションキューに新しいフリートを追加し、以前のビルドバージョンのフリートを削除する。

    • 以前のビルドのフリートがアクティブなゲームセッションをホスティングしなくなった場合は、そうしたフリートの AWS CloudFormation スタックを削除する。