Amazon GameLift Local を使用して統合をテストする - Amazon GameLift

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

Amazon GameLift Local を使用して統合をテストする

注記

バージョン 4.x 以前のバージョンの Amazon GameLift サーバー SDK を使用している場合は、このテスト手順を使用してください。サーバー SDK パッケージには、Amazon GameLift Local の互換バージョンが含まれています。サーバー SDK バージョン 5.x を使用している場合は、Amazon GameLift Anywhere フリートでのローカルテストについて Amazon GameLift Anywhere フリートを使用して統合をテストする を参照してください。

Amazon GameLift Local を使用して、ローカルデバイスでマネージド Amazon GameLift サービスの限定バージョンを実行し、それに対してゲーム統合をテストします。このツールは、ゲーム統合で反復開発を行う場合に便利です。代わりの方法 - 新しい各構築を Amazon GameLift にアップロードし、ゲームをホストするようフリートを設定する場合は、毎回 30 分以上の時間がかかる場合があります。

Amazon GameLift Local では、以下の点を確認できます。

  • ゲームサーバーが Server SDK と正常に統合されており、新しいゲームセッションのスタート、新しいプレイヤーの承諾、ヘルスおよびステータスの報告を行うために、Amazon GameLift サービスと正しく通信している。

  • ゲームクライアントが正常に AWS SDK for Amazon GameLift と統合されており、既存のゲームセッションでの情報の取得、新しいゲームセッションのスタート、プレイヤーのゲームへの参加、ゲームセッションへの接続を行うことができる。

Amazon GameLift Local は、マネージド Amazon GameLift サービスの自己完結型バージョンを開始するコマンドラインツールです。Amazon GameLift Local には、サーバープロセスの初期化、ヘルスチェック、API コールおよびレスポンスの実行イベントログも用意されています。Amazon GameLift Local は、Amazon GameLift 向けの AWS SDK アクションのサブセットを認識します。呼び出しは、AWS CLI またはゲームクライアントから行うことができます。すべての API アクションは、Amazon GameLift ウェブサービスでの実行と同じようにローカルで実行されます。

各サーバープロセスは 1 つのゲームセッションのみをホストする必要があります。ゲームセッションは、Amazon GameLift Local へのConnectに使用する実行可能ファイルです。ゲームセッションが完了したら、GameLiftServerSDK::ProcessEndning を呼び出して、プロセスを終了します。Amazon GameLift Local でローカルでテストする場合、複数のサーバープロセスをスタートできます。各プロセスは Amazon GameLift Local に接続します。その後、サーバープロセスごとに 1 つのゲームセッションを作成できます。ゲームセッションが終了すると、ゲームサーバープロセスは終了します。その後、別のサーバープロセスをマニュアルでスタートする必要があります。

Amazon GameLift ローカルは、以下の API をサポートしています。

  • CreateGameSession

  • CreatePlayerSession

  • CreatePlayerSessions

  • DescribeGameSessions

  • DescribePlayerSessions

Amazon GameLift Local のセットアップ

Amazon GameLift Local は、[サーバー SDK] でバンドルされた実行可能 .jar ファイルとして提供されます。Windows または Linux で実行でき、Amazon GameLift でサポートされる任意の言語で使用できます。

Local を実行する前に、以下のものもインストールされている必要があります。

  • Amazon GameLift Server SDK バージョン 3.1.5 から 4.x のビルド。

  • Java 8

ゲームサーバーのテスト

ゲームサーバーのみをテストする場合、AWS CLI を使用して Amazon GameLift Local サービスへのゲームクライアント呼び出しをシミュレートできます。これにより、ゲームサーバーが正常に実行されていることと、以下の点が確認されます。

  • ゲームサーバーが正しく起動し、Amazon GameLift サーバー SDK を初期化します。

  • 起動プロセスのパートとして、サーバーでゲームセッションをホストする準備ができていることをゲームサーバーが Amazon GameLift に通知します。

  • ゲームサーバーが、実行中 1 分ごとにヘルスステータスを Amazon GameLift に送信します。

  • ゲームサーバーがリクエストに応答して新しいゲームセッションを開始する。

  1. Amazon GameLift Local を開始します。

    コマンドプロンプトウィンドウを開き、GameLiftLocal.jar ファイルがあるディレクトリに移動して実行します。デフォルトでは、Local はポート 8080 でゲームクライアントからのリクエストをリッスンします。別のポート番号を指定するには、以下の例に示すように -p パラメータを使用します。

    java -jar GameLiftLocal.jar -p 9080

    Local が起動すると、2 つのローカルサーバー (ゲームサーバーをリッスンしているサーバーとゲームクライアントまたは AWS CLI をリッスンしているサーバー) が起動したことがログに示されます。ログは、ゲームコンポーネントとの通信など、2 つのローカルサーバーでのアクティビティを報告し続けます。

  2. ゲームサーバーを起動します。

    Amazon GameLift が統合されたゲームサーバーをローカルでスタートします。ゲームサーバーのエンドポイントを変更する必要はありません。

    Local のコマンドプロンプトウィンドウでは、ゲームサーバーが Amazon GameLift Local サービスに接続されていることがログメッセージに示されます。これは、ゲームサーバーが Amazon GameLift サーバー SDK を正常に初期化したこと (InitSDK() を使用) を意味します。示されたログパスを使用して ProcessReady() を呼び出し、成功した場合はゲームセッションをホストする準備が完了します。ゲームサーバーの実行中、Amazon GameLift はゲームサーバーから各ヘルス ステータスレポートを記録します。次のログメッセージの例は、正常に統合されたゲームサーバーを示しています。

    16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - SDK connected: /127.0.0.1:64247 16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - SDK pid is 17040, sdkVersion is 3.1.5 and sdkLanguage is CSharp 16:50:53,217 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - NOTE: Only SDK versions 3.1.5 and above are supported in GameLiftLocal! 16:50:53,451 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onProcessReady received from: /127.0.0.1:64247 and ackRequest requested? true 16:50:53,543 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onProcessReady data: logPathsToUpload: "C:\\game\\logs" logPathsToUpload: "C:\\game\\error" port: 1935 16:50:53,544 INFO || - [HostProcessManager] nioEventLoopGroup-3-1 - Registered new process true, true, 16:50:53,558 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onReportHealth received from /127.0.0.1:64247 with health status: healthy

    考えられるエラーおよび警告メッセージには次のものがあります。

    • Error: "ProcessReady did not find a process with pID: <process ID>! Was InitSDK() invoked?"

    • Warning: "Process state already exists for process with pID: <process ID>! Is ProcessReady(...) invoked more than once?"

  3. AWS CLI の開始

    ゲームサーバーが ProcessReady() を正常に呼び出したら、クライアント呼び出しを開始できます。別のコマンドプロンプトウィンドウを開き、AWS CLI ツールを開始します。デフォルトで、AWS CLI では Amazon GameLift ウェブ サービスエンドポイントが使用されます。これは、次のリクエスト例に示すように、--endpoint-url パラメータを使用して各リクエストで Local エンドポイントによって上書きする必要があります。

    AWS gamelift describe-game-sessions --endpoint-url http://localhost:9080 --fleet-id fleet-123

    AWS CLIコマンドプロンプトウィンドウでは、AWS gameliftコマンドを使用すると、AWS CLI[Command Reference](コマンドリファレンス)に記載されているように応答が返されます。

  4. ゲームセッションの作成。

    AWS CLI を使用して、CreateGameSession() リクエストを送信します。リクエストは予期される構文に従う必要があります。Local では、FleetId パラメーターを任意の文字列 (^fleet-\S+) に設定できます。

    AWS gamelift create-game-session --endpoint-url http://localhost:9080 --maximum-player-session-count 2 --fleet-id fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d

    Local のコマンドプロンプトウィンドウでは、Amazon GameLift Local がゲームサーバーに onStartGameSession コールバックを送信したことがログメッセージに示されます。ゲームセッションが正常に作成された場合、ゲームサーバーは ActivateGameSession を呼び出すことで応答します。

    13:57:36,129 INFO || - [SDKInvokerImpl] Thread-2 - Finished sending event to game server to start a game session: arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-ab423a4b-b827-4765-aea2-54b3fa0818b6. Waiting for ack response.13:57:36,143 INFO || - [SDKInvokerImpl] Thread-2 - Received ack response: true13:57:36,144 INFO || - [CreateGameSessionDispatcher] Thread-2 - GameSession with id: arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-ab423a4b-b827-4765-aea2-54b3fa0818b6 created13:57:36,227 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onGameSessionActivate received from: /127.0.0.1:60020 and ackRequest requested? true13:57:36,230 INFO || - [SDKListenerImpl] nioEventLoopGroup-3-1 - onGameSessionActivate data: gameSessionId: "arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-abcdef12-3456-7890-abcd-ef1234567890"

    AWS CLI ウィンドウで、Amazon GameLift はゲームセッション ID を含むゲームセッションオブジェクトで応答します。新しいゲームセッションのステータスが [Activating] になっていることに注目してください。ゲームサーバーが ActivateGameSession を呼び出すとステータスは [Active] に変わります。変更されたステータスを確認するには、AWS CLI で DescribeGameSessions() を呼び出します。

    { "GameSession": { "Status": "ACTIVATING", "MaximumPlayerSessionCount": 2, "FleetId": "fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d", "GameSessionId": "arn:aws:gamelift:local::gamesession/fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d/gsess-abcdef12-3456-7890-abcd-ef1234567890", "IpAddress": "127.0.0.1", "Port": 1935 } }

ゲームサーバーおよびクライアントのテスト

プレイヤーのゲームへの接続など、ゲームの完全統合を確認するには、ゲームサーバーとクライアントの両方をローカルで実行することができます。これにより、ゲーム クライアントから Amazon GameLift Local へのプログラムによる呼び出しをテストできます。次のアクションを確認できます。

  • ゲームクライアントが、ゲームセッションの作成、既存のゲームセッションでの情報の取得、プレイヤーセッションの作成など、Amazon GameLift Local サービスへの AWS SDK リクエストを正常に行っています。

  • プレイヤーがゲームセッションに参加しようとしたときにゲームサーバーがプレイヤーを正しく検証する。プレイヤーが検証されると、ゲームサーバーはプレイヤーデータ (実装されている場合) を取得できます。

  • プレイヤーがゲームを終了すると、ゲームサーバーが接続中断を報告する。

  • ゲームサーバーがゲームセッションの終了を報告する。

  1. Amazon GameLift Local を開始します。

    コマンドプロンプトウィンドウを開き、GameLiftLocal.jar ファイルがあるディレクトリに移動して実行します。デフォルトでは、Local はポート 8080 でゲームクライアントからのリクエストをリッスンします。別のポート番号を指定するには、以下の例に示すように -p パラメーターを使用します。

    ./gamelift-local -p 9080

    Local が起動すると、2 つのローカルサーバー (ゲームサーバーをリッスンしているサーバーとゲームクライアントまたは AWS CLI をリッスンしているサーバー) が起動したことがログに示されます。

  2. ゲームサーバーを起動します。

    Amazon GameLift が統合されたゲームサーバーをローカルでスタートします。メッセージログの詳細については、「ゲームサーバーのテスト」を参照してください。

  3. Local のゲームクライアントを設定して起動します。

    Amazon GameLift Local サービスでゲーム クライアントを使用するには、「バックエンドサービス GameLift で Amazon をセットアップする」で説明されているように、ゲームクライアントのセットアップに以下の変更を加える必要があります。

    • http://localhost:9080 などの Local エンドポイントをポイントするように、ClientConfiguration オブジェクトを変更します。

    • ターゲットフリートの ID 値を設定します。Local では、実際のフリート ID は必要ありません。ターゲットフリートを、fleet-1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d などの任意の有効な文字列 (^fleet-\S+) に設定します。

    • AWS 認証情報を設定します。Local では、実際の AWS 認証情報は必要ありません。アクセスキーとシークレットキーを任意の文字列に設定できます。

    Local のコマンドプロンプトウィンドウで、ゲーム クライアントをスタートすると、GameLiftClient を初期化し、Amazon GameLift サービスと正常に通信していることがログメッセージに示されるはずです。

  4. Amazon GameLift サービスへのゲーム クライアント呼び出しをテストします。

    ゲームクライアントが以下の API 呼び出しのすべてまたはいずれかを正常に行っていることを確認します。

    Local のコマンドプロンプトウィンドウでは、CreateGameSession() を呼び出した場合のみログメッセージが生成されます。ログメッセージは、Amazon GameLift Local がゲームサーバーにゲームセッションのスタートを求め (onStartGameSession コールバック)、ゲームサーバーが呼び出したときに ActivateGameSession の取得が成功した場合に表示されます。AWS CLI ウィンドウでは、説明されているとおり、すべての API 呼び出しによりレスポンスまたはエラーメッセージが生成されます。

  5. ゲームサーバーが新しいプレイヤー接続を検証していることを確認します。

    ゲームセッションとプレイヤーセッションを作成したら、ゲームセッションへの直接接続を確立します。

    Local のコマンドプロンプトウィンドウでは、ゲームサーバーが AcceptPlayerSession() リクエストを送信して新しいプレイヤー接続を検証したことが表示されます。AWS CLI を使用して DescribePlayerSessions() を呼び出した場合、プレイヤーセッションステータスが Reserved から Active に変わります。

  6. ゲームサーバーがゲームおよびプレイヤーのステータスを Amazon GameLift サービスに報告していることを確認します。

    Amazon GameLift がプレイヤーの要求を管理してメトリクスを正常にレポートするには、ゲームサーバーは各種ステータスを Amazon GameLift にレポートする必要があります。Local が以下のアクションに関連するイベントを記録していることを確認します。AWS CLI を使用してステータス変更を追跡することもできます。

    • [プレイヤーがゲームセッションから切断します] – Amazon GameLift Local ログメッセージには、ゲームサーバーが RemovePlayerSession() を呼び出すことが示されています。DescribePlayerSessions() への AWS CLI 呼び出しには、Active から Completed へのステータス変更が反映されます。さらに、DescribeGameSessions() を呼び出して、ゲームセッションの現在のプレイヤー数が 1 人減少したことを確認することもできます。

    • [ゲームセッションが終了します] – Amazon GameLift Local ログメッセージには、ゲームサーバーが TerminateGameSession() を呼び出すことが示されます。

      注記

      以前のガイダンスでは、ゲームセッションを終了するときに TerminateGameSession() を呼び出していました。このメソッドは Amazon GameLift サーバー SDK v4.0.1 では非推奨です。「ゲームセッションを終了する」を参照してください。

    • [サーバープロセスが終了しています]– Amazon GameLift Local ログメッセージには、ゲームサーバーが ProcessEnding() を呼び出すことが示されます。DescribeGameSessions() への AWS CLI 呼び出しには、Active から Terminated (または Terminating) へのステータス変更が反映されます。

Local でのバリエーション

Amazon GameLift Local を使用する場合は、次の点に留意してください。

  • Amazon GameLift ウェブサービスとは異なり、Local はサーバーのヘルスステータスを追跡せず、onProcessTerminate コールバックを開始しません。Local はゲームサーバーのヘルスレポートの記録を停止するだけです。

  • AWS SDK への呼び出しの場合、フリート ID は検証されないため、パラメータ要件を満たす任意の文字列値 (^fleet-\S+) にすることができます。

  • Local で作成されたゲームセッション ID の構造は異なります。ここに示すように、文字列 local が含まれています。

    arn:aws:gamelift:local::gamesession/fleet-123/gsess-56961f8e-db9c-4173-97e7-270b82f0daa6