Amazon GameLift フリートの問題をデバッグする - Amazon GameLift

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

Amazon GameLift フリートの問題をデバッグする

このトピックでは、Amazon GameLift マネージドソリューションのフリート設定の問題に関するガイダンスを提供します。追加のトラブルシューティングを行うには、フリートがアクティブになってから、フリートインスタンスにリモートでアクセスします。「Amazon GameLift フリートインスタンスにリモート接続する」を参照してください。

フリート作成の問題

フリートが作成されると、Amazon GameLift サービスがフリートの各ロケーションに新しいインスタンスをデプロイするワークフローを開始し、ゲームサーバーを実行する準備をします。詳細な説明については、Amazon GameLift のフリート作成の仕組み を参照してください。フリートは、[Active] (アクティブ) ステータスに到達するまでは、ゲームセッションとプレイヤーをホストすることができません。このセクションでは、フリートがアクティブにならないという、最も一般的な問題について説明します。

ダウンロードと検証

このフェーズでは、抽出したビルドファイルに問題がある場合、インストールスクリプトが実行しない場合、またはランタイム設定で指定した実行可能ファイルがビルドファイルに含まれていない場合に、フリート作成が失敗することがあります。Amazon GameLift は、これらの各問題に関するログを提供しています。

ログから問題を確認できない場合、問題の原因は内部のサービスエラーである可能性があります。この場合は、再度フリートを作成してみます。問題が解決しない場合は、ゲームビルドの再アップロードを検討します (ファイルが破損している場合があるため)。Amazon GameLift サポートにお問い合わせいただくか、フォーラムで質問を投稿することもできます。

構築

構築フェーズ中に失敗した場合は、ほぼ確実に、ゲームビルドファイルやインストールスクリプトに問題があります。Amazon GameLift にアップロードしたゲームビルドファイルが、適切なオペレーティングシステムで動作するマシンにインストールできているか確認します。既存の開発環境ではなく、新規の OS インストールを使用してください。

アクティブ化

フリート作成に伴う最も一般的な問題は、アクティブ化 フェーズの最中に発生します。このフェーズでは、例えば、ゲームサーバーの実行可能性、ランタイム構成の設定がテストされています。また、サーバーSDK を使用して、Amazon GameLift サービスとやり取りするための、ゲームサーバーの機能もテストされています。フリートのアクティブ化中に発生する一般的な問題は以下のとおりです。

サーバープロセスが開始されない。

最初に、起動パスとオプションの起動パラメータがフリートのランタイム設定内に正しく設定されているかチェックします。フリートの現在のランタイム設定を表示するには、[フリート] 詳細ページの [詳細] セクションを使用するか、AWS CLI コマンド describe-runtime-configuration を呼び出します。ランタイム設定が正しいと思われる場合は、ゲームビルドファイルやインストールスクリプトの問題をチェックします。

サーバープロセスは起動するが、フリートがアクティブにならない。

サーバープロセスは正常に開始して実行されるが、フリートが [アクティブ] ステータスに移行しない場合は、サーバープロセスがゲームセッションをホストする準備ができているということを Amazon GameLift に通知していない可能性があります。ゲームサーバーが適切にサーバー API アクション ProcessReady() (「サーバープロセスを初期化する」を参照) を呼び出しているかチェックします。

VPC ピアリングリクエストが失敗する。

作成されたフリートで VPC ピアリングが使用される場合 (「新しいフリートとの VPC ピア接続を設定するには」を参照)、VPC ピアリングはこの アクティブ化 フェーズ中に行われます。VPC ピアリングが何らかの理由で失敗した場合、新しいフリートは ACTIVE (アクティブ) ステータスに移行しません。describe-vpc-peering-connections を呼び出して、ピアリングリクエストの成否を追跡できます。認証は 24 時間のみ有効であるため、有効な VPC ピアリング承認 (describe-vpc-peering-authorizations) が存在することを確認してください。

サーバープロセスの問題

サーバープロセスは開始するが、すぐに失敗するか障害がレポートされる。

ゲームビルドの問題以外にも、インスタンスで同時に多くのサーバープロセスを実行しようとすると、このような問題が発生することがあります。同時処理の適正な数は、インスタンスタイプとゲームサーバーのリソース要件の両方に依存します。フリートのランタイム設定で定義している同時処理の数を減らして、パフォーマンスが向上するかどうか確認してください。フリートのランタイム設定を変更するには、Amazon GameLift のコンソールでフリートのキャパシティ割り当て設定を編集するか、または AWS CLI コマンド update-runtime-configuration を呼び出します。

フリート削除の問題

最大インスタンス数のため、フリートを終了できない。

このエラーメッセージは、削除されるフリートにまだアクティブインスタンスがあることを示しています。この状態は許可されていません。最初に、フリートをアクティブインスタンスゼロまでスケールダウンする必要があります。そのためには、フリートの必要インスタンス数を手動で「0」に設定してから、スケールダウンが有効になるのを待ちます。手動設定の妨げにならないように、Auto Scaling をオフにしてください。

VPC アクションが承認されていない。

この問題は、VPC ピアリング専用に作成したフリートにのみ適用されます (「Amazon GameLift の VPC ピアリング」参照)。このシナリオは、フリートの削除プロセスで、フリートの VPC と VPC ピアリングもすべて削除されるため起こるものです。まず Amazon GameLift サービス API CreateVpcPeeringAuthorization() を呼び出すか、AWS CLI コマンドcreate-vpc-peering-authorization を使用して、承認を取得する必要があります。承認を取得したら、フリートを削除できます。

リアルタイムサーバーフリートの問題

ゾンビゲームセッション: ゲームセッションを開始し、実行するが、終了することがない。

この問題は、以下のシナリオで見られる場合があります。

  • スクリプトの更新をフリートのリアルタイムサーバーが受け取らない。

  • フリートがすぐに最大容量に達し、プレイヤーのアクティビティ (新しいゲームセッションリクエストなど) が減少してもスケールダウンされない。

この問題の原因はほとんど確実に、リアルタイムスクリプトでprocessEnding を正常に呼び出すことができなかったことです。フリートがアクティブになり、ゲームセッションが開始されますが、それらを停止する方法はありません。その結果、ゲームセッションを実行しているリアルタイムサーバーは、解放されて、新しいセッションを開始することができなくなり、新しいゲームセッションは、新しいリアルタイムサーバーがスピンアップされて初めて開始できるようになります。さらに、リアルタイムスクリプトの更新は、すでに実行中のゲームセッションには影響しないのです。

この問題を回避するには、スクリプトにprocessEnding の呼び出しをトリガーするメカニズムを提供する必要があります。「リアルタイムサーバースクリプト例」に示しているように、ひとつの方法はアイドルセッションタイムアウトをプログラムすることで、一定時間プレイヤーからの接続がない場合に現在のゲームセッションが終了するようにすることです。

ただし、このシナリオが生じた場合には、リアルタイムサーバーがスタックから抜け出すための回避策がいくつかあります。コツは、リアルタイムサーバープロセス(または基盤となるフリートインスタンス)をトリガーして再起動することです。この場合、ゲームセッションはGameLift によって自動的に終了されます。リアルタイムサーバーが解放されると、最新バージョンのリアルタイムスクリプトを使用して新しいゲームセッションを開始できます。

そのための方法は、この問題の波及する範囲に応じていくつかあります。

  • フリート全体をスケールダウンする。この方法は最も簡単に実行できますが、広範な効果があります。フリートをインスタンスゼロまでスケールダウンし、フリートが完全にスケールダウンするのを待ってから、再びスケールアップします。これにより、既存のゲームセッションがすべて消去されてから、直近に更新されたリアルタイムスクリプトが開始されます。

  • インスタンスにリモートアクセスしてプロセスを再開する。この方法は、修正するプロセスがわずかしかない場合にお勧めします。ログ記録やデバッグなどのために、すでにインスタンスにログオンしている場合は、これが最も迅速な方法です。「Amazon GameLift フリートインスタンスにリモート接続する」を参照してください。

リアルタイムスクリプトにprocessEnding を呼び出す方法を含めないことを選択した場合、フリートがアクティブになってゲームセッションが開始されたとしても、いくつかの予想外の状況が生じることがあります。ひとつは、実行中のゲームセッションが終了しない状況です。この結果、そのゲームセッションを実行しているサーバープロセスが解放されず、新しいゲームセッションを開始できなくなります。もう ひとつは、リアルタイムサーバーがスクリプトの更新を受け取らない状況です。