Amazon GameLift Servers マネージドコンテナでホスティングするための開発ロードマップ - Amazon GameLift Servers

Amazon GameLift Servers マネージドコンテナでホスティングするための開発ロードマップ

このロードマップでは、コンテナ化されたゲームサーバー用の Amazon GameLift Servers マネージドホスティングソリューションを開発する方法を説明します。マネージドコンテナは、Amazon GameLift Servers が提供するホスティングソリューションの 1 つにすぎません。ホスティングオプションの詳細については、「Amazon GameLift Servers ゲームホスティングオプション」を参照してください。

Amazon GameLift Servers を使用したマネージドコンテナソリューションには、次のコンポーネントがあります。

  • ゲームサーバービルドを含むコンテナイメージを、Amazon Elastic Container Registry (Amazon ECR) のプライベートリポジトリにアップロードします。ゲームサーバービルドは、サーバー SDK for Amazon GameLift Servers と統合され、Linux で動作するように構築されています。

  • ゲームクライアントに代わって Amazon GameLift Servers サービスとやり取りするバックエンドサービス。バックエンドサービスは、AWS SDK の一部である Amazon GameLift Servers 用サービス API の機能を使用します。

  • 新しい Amazon GameLift Servers ゲームセッションのリクエストを処理し、すべてのフリートで利用可能なサーバーを検索し、ゲームセッションを開始するようにゲームサーバーを促すゲームセッションキュー、またはその他の配置メカニズム。

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

  • Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを使用し、マルチプレイヤーゲームホスティング向けに最適化された 1 つ以上のコンテナフリート。

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

マネージドコンテナ用のこれらのツールを使用して、オンボーディングを高速化します。
  • コンテナスターターキットは、統合とフリートのセットアップを合理化します。ゲームサーバーに重要なゲームセッション管理機能を追加し、事前設定されたテンプレートを使用して、ゲームサーバー用のコンテナフリートと自動デプロイパイプラインを構築します。デプロイ後、Amazon GameLift Servers コンソールと API ツールを使用して、フリートのパフォーマンスのモニタリング、ゲームセッションの管理、メトリクスの分析を行います。

  • Unreal Engine および Unity の開発者は、Amazon GameLift Servers プラグインを使用してゲームサーバーを統合し、ゲームエンジンの開発環境内からコンテナフリートを構築できます。プラグインのガイド付きワークフローは、マネージドコンテナを使用したクラウドベースのホスティングによる高速でシンプルなソリューションの作成に役立ちます。この基盤をもとに、ゲーム用のカスタムホスティングソリューションを作成できます。

ゲームサーバーに機能を追加して、ホスティング用にデプロイされたときに Amazon GameLift Servers サービスと通信できるようにします。

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

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

    • Amazon GameLift Servers SDK を初期化するコードを追加し、Amazon GameLift Servers サービスとの WebSocket 接続を確立します。サーバー SDK アクション InitSdk() を使用します。

    • サーバープロセスがゲームセッションをホストする準備ができたことを Amazon GameLift Servers サービスに報告するコードを追加します。サーバー SDK アクション ProcessReady() を使用します。

    • 必要なコールバック関数 OnStartGameSession()、および OnProcessTerminate() を実装します。これらの関数を使用することで、ゲームサーバープロセスは Amazon GameLift Servers サービスとの接続を維持し、Amazon GameLift Servers からの指示によりゲームセッションを開始し、ゲームサーバープロセスを終了するプロンプトに応答できます。

    • サーバープロセスがゲームセッションを終了することを Amazon GameLift Servers サービスに報告するコードを追加します。サーバー SDK アクション ProcessEnding() を使用します。

  • ゲームサーバービルドをパッケージ化します。Linux で実行するようにゲームサーバーを構築します。ゲームサーバーの実行に必要なビルドやその他のファイルを準備します。Windows で開発している場合、このステップでは、別の Linux ワークスペースを設定するか、Windows サブシステム for Linux (WSL) などのツールを使用する場合があります。ゲームサーバーの構築をテストしたり、コンテナイメージを構築およびテストしたりするには、Linux 環境が必要です。

  • ゲームサーバーの統合をテストします。統合されたゲームサーバーが Amazon GameLift Servers サービスに接続し、プロンプトに応答できることを確認します。「Amazon GameLift Servers Anywhereでローカルテストを設定する」で説明されているように、ローカルワークステーションをテストホストとしてシンプルな Amazon GameLift Servers Anywhere フリートを設定することをお勧めします。ゲームサーバービルドをテストホストにインストールし、サーバープロセスを開始します。AWS CLI を使用して新しいゲームセッションをリクエストし、Amazon GameLift Servers サービスがサーバープロセスにゲームセッションの開始を正常に指示することを確認します。

ゲームサーバーを正常に統合したら、ゲームサーバー実行可能ファイルでコンテナイメージを作成します。Amazon GameLift Servers で使用するため、Amazon Elastic Container Registry (Amazon ECR) リポジトリに保存します。詳細な手順については、「Amazon GameLift Servers 用のコンテナイメージを構築する」を参照してください。

  • ゲームサーバーコンテナ (Amazon GameLift Servers 提供) の Dockerfile テンプレートを取得します。ゲームサーバーのビルドファイルの ファイルを変更します。

  • ゲームサーバーコンテナイメージを構築します。Linux 環境で作業するには、Docker ツールを使用してイメージを作成します。

  • コンテナイメージを Amazon ECR にプッシュします。コンテナフリートをデプロイする予定の同じ AWS アカウント と AWS リージョン を使用して、Amazon ECR にパブリックリポジトリまたはプライベートリポジトリを作成します。コンテナイメージをそこにプッシュします。

  • Anywhere フリートを使用してコンテナイメージをテストします (オプション)。クラウドホスト型のコンテナフリートにデプロイする前に、コンテナイメージをローカルでテストすることもできます。テストには、既存の Amazon GameLift Servers Anywhere フリートをローカルワークステーションで使用できます。ゲームサーバーコンテナをインストールして実行し、次を確認します。(1) Amazon GameLift Servers サービスがサーバープロセスにゲームセッション開始を正常に促すこと、(2) ゲームクライアントがゲームセッションに接続できること。

ここまでは、セルフマネージド Anywhere フリートを使用して、ゲームコンポーネントをテストして反復処理してきました。Amazon GameLift Servers 用に統合されたゲームサーバービルドが動作している場合は、本番環境に必要となるクラウドベースの Amazon GameLift Servers マネージドコンテナフリートホスティングリソースのセットアップを開始できます。

  • コンテナグループ定義の作成。コンテナグループ定義は、フリートのコンテナアーキテクチャを記述します。 と は、デプロイするコンテナイメージを識別します。「コンテナフリートAmazon GameLift Servers用のコンテナグループ定義を作成する」を参照してください。コンテナイメージが保存されているのと同じ AWS リージョン に、コンテナグループ定義を作成します。フリートのロケーションの選び方については、「地理的場所」を参照してください。少なくとも、以下を実行します。

    • ゲームサーバーコンテナグループ定義を作成します。

    • ゲームサーバービルドでコンテナイメージを含むコンテナ定義を追加します。

    • コンテナのゲームサーバープロセスのポート範囲を設定します。

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

    • コンテナフリート用の AWS Identity and Access Management (IAM) サービスロールを設定します。「Amazon GameLift Servers 用に IAM サービスロールをセットアップする」を参照してください。

    • フリートインスタンスにデプロイするゲームサーバーコンテナグループ定義を指定します。

    • 他のすべてのパラメータで使用できるデフォルト値を使用します。Amazon GameLift Servers は、最適な設定のためにいくつかのパラメータを計算します。

  • コンテナフリートをキューに追加します。ゲームセッションキューで、Anywhere テストフリートをマネージドコンテナフリートで置き換えます。

  • コンテナフリートでゲームホスティングをテストします。この時点で、ソリューション全体をテストできるはずです。ゲームクライアントを起動し、バックエンドサービスを介してゲームセッションをリクエストします。接続情報を取得し、コンテナフリートのゲームセッションに接続します。

  • フリートデプロイで反復処理します。コンテナグループ定義とフリート設定を更新し、既存のフリートに更新をデプロイできます。

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

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

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

  • ゲームクライアントの統合をテストします。テストには、既存の Amazon GameLift Servers Anywhere フリートをローカルワークステーションで使用できます。新しいバックエンドサービスを使用して新しいゲームセッションをリクエストし、(1) Amazon GameLift Serversサービスがサーバープロセスにゲームセッションの開始を正常に促し、(2) ゲームクライアントがゲームセッションに接続できることを確認します。

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

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

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

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

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

  • FlexMatch マッチメーキングを追加します (オプション)。マッチメーキングルールセットを構築し、ゲームセッションキューを操作するマッチメーキング設定を作成します。マッチメーキングシステムの設定に関するガイダンスについては、「Amazon GameLift ServersFlexMatchデベロッパーガイド」を参照してください。

  • プレイスメントシステムをテストします。テストには、既存の Amazon GameLift Servers Anywhere フリートをローカルワークステーションで使用できます。バックエンドサービスを使用して新しいゲームセッションをリクエストし、Amazon GameLift Servers サービスがサーバープロセスにゲームセッションの開始を正常に指示することを確認します。

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

  • コンテナフリートの設定を最適化します。「Amazon GameLift Servers コンテナフリートをカスタマイズする」を参照してください。

  • コスト削減のためにスポットフリートの追加を検討します。「スポットフリートによるゲームホスティングコストの削減 」を参照してください。

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

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

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

  • 予想されるプレイヤー需要に応えるための自動容量スケーリングを設定します。「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 スタックを削除します。