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

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

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

注記

このトピックでは、Amazon GameLift サーバーSDKバージョン 4.x 以前と統合されたゲームのテストのみについて説明します。サーバーSDKパッケージには、互換性のあるバージョンの Amazon GameLift Local が含まれています。サーバーSDKバージョン 5.x を使用している場合は、Amazon を使用したローカルテストAmazon でローカルテストを設定する GameLift Anywhereについては、「」を参照してください。 GameLift Anywhere フリート。

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

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

  • ゲームサーバーはサーバーと正しく統合SDKされており、Amazon GameLift サービスと適切に通信して、新しいゲームセッションを開始し、新しいプレイヤーを受け入れ、ヘルスとステータスを報告しています。

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

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

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

Amazon GameLift local では、次の がサポートされていますAPIs。

  • 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 Server を初期化しますSDK。

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

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

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

  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 Server 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

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

    • エラー: ProcessReady 「pID を持つプロセスが見つかりませんでした:<process ID>! Init SDK() は呼び出されましたか?」

    • 警告:「プロセスの状態は、pID を持つプロセスに既に存在します。<process ID>! ProcessReady(...) は複数回呼び出されていますか?」

  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 リファレンス に記載されているように、コマンドはレスポンスを生成します。

  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 はゲームセッション ID を含むゲームセッションオブジェクトで GameLift 応答します。新しいゲームセッションのステータスが [Activating] になっていることに注目してください。ゲームサーバーが を呼び出すと、ステータスはアクティブに変わります ActivateGameSession。変更されたステータスを表示したい場合は、 を使用して 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 認証情報は必要ありません。アクセスキーとシークレットキーを任意の文字列に設定できます。

    ローカルコマンドプロンプトウィンドウでは、ゲームクライアントを起動すると、ログメッセージに が初期化GameLiftClientされ、Amazon GameLift サービスと正常に通信されたことを示す必要があります。

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

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

    Local のコマンドプロンプトウィンドウでは、CreateGameSession() を呼び出した場合のみログメッセージが生成されます。ログメッセージは、Amazon GameLift Local がゲームサーバーにゲームセッション (onStartGameSession コールバック) を開始するように促し、ゲームサーバーActivateGameSessionがゲームセッションを呼び出すときに が成功したときに表示されます。 AWS CLI ウィンドウでは、すべてのAPI呼び出しで、文書化されたレスポンスまたはエラーメッセージが発生します。

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

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

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

  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 Server v4.0.1 SDK では廃止されています。「ゲームセッションを終了する」を参照してください。

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

Local でのバリエーション

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

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

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

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

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