View a markdown version of this page

コンテナフリートのデプロイの検証とトラブルシューティング - Amazon GameLift Servers

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

コンテナフリートのデプロイの検証とトラブルシューティング

このトピックのデプロイと呼ばれるフリートデプロイは、コンテナフリートのインスタンス上のコンテナを、新しいコンテナグループ定義バージョンなどのフリートの新しい設定を使用するコンテナに置き換えるために Amazon GameLift Serversが使用するプロセスです。実行中のすべてのコンテナを一度に置き換える代わりに、デプロイはまず新しいコンテナがゲームセッションをホストできることを確認し、残りのコンテナを徐々に置き換えて、フリート全体にデプロイする前に不正な変更をキャッチします。コンテナフリートは、次の 3 つの状況でデプロイを開始します。

  • コンテナグループ定義を使用してフリートを作成する場合。CreateContainerFleet リクエストにゲームサーバーコンテナグループ定義が含まれている場合、フリートの作成は、フリートの新しいインスタンスにコンテナをインストールするデプロイを開始します。コンテナグループ定義なしでフリートを作成する場合、ゲームサーバーコンテナグループ定義を追加するまで、インスタンスはデプロイされず、フリートはデプロイされません。

  • フリートのコンテナグループ定義または他のコンテナ設定を更新すると、 は、新しいゲームサーバーコンテナグループ定義バージョンを指定するなど、フリートが実行するコンテナの更新によってデプロイUpdateContainerFleetを開始します。これらの設定を変更しない更新では、デプロイは開始されません。デプロイを開始する設定については、「」を参照してくださいAmazon GameLift Servers マネージドコンテナフリートを更新する。

  • アクティブなフリートにロケーションを追加すると、 はフリートの設定済みコンテナグループ定義を使用して新しいロケーションでデプロイAmazon GameLift Serversを開始します。既存のロケーションは再デプロイされません。別のデプロイの進行中にロケーションを追加することはできません。

デプロイの詳細を表示するには、 FleetDeployment オブジェクトを返DescribeFleetDeploymentす を呼び出します。これには、デプロイ ID、ステータス、設定、デプロイされるコンテナグループ定義バージョン、ロールバックバージョンが含まれます。フリートの DeploymentDetails.LatestDeploymentIdプロパティは、最新のデプロイを識別します。

注記

デプロイはマネージドコンテナフリートにのみ適用されます。

デプロイを設定する

デプロイの DeploymentConfigurationは、デプロイがフリート全体でどのように進行し、失敗した場合にどうなるかを制御する一連のルールです。各設定の値とデフォルトの詳細については、 Amazon GameLift Servers API リファレンスのDeploymentConfiguration「」を参照してください。

コンソールでフリートを呼び出しUpdateContainerFleetたり編集したりするときに、デプロイ設定を設定します。 CreateContainerFleetはデプロイ設定を受け入れないため、フリートの最初のデプロイでは常にデフォルト値が使用されます。

がデプロイAmazon GameLift Serversを検証する方法

デプロイが開始されると、 はAmazon GameLift Serversまずフリートの各ロケーションでゲームサーバーコンテナグループを検証します。フリートの既存の容量のごく一部で新しいコンテナを実行し、それらが正常であることを確認します。新しいゲームサーバーコンテナグループは、ゲームサーバーコンテナが ProcessReady()を呼び出してゲームセッションをホストする準備ができていることを報告すると、正常です。

この初期検証では、ゲームサーバーコンテナグループをチェックします。フリートがインスタンスごとのコンテナグループ定義も使用している場合、 はゲームサーバーグループを更新した後にそれらのグループAmazon GameLift Serversを更新します。 は、デプロイが完了する前にインスタンスごとのグループを個別にAmazon GameLift Serversチェックします。ゲームサーバーのProcessReady()チェックは使用しません。

が待機Amazon GameLift Serversを停止する前に新しいゲームサーバーコンテナグループが正常にならない場合、検証は失敗します。一般的な理由とその調査方法については、「」を参照してください障害のあるデプロイのデバッグ。

検証が失敗した場合、 はデプロイの Amazon GameLift Serversを適用ImpairmentStrategyし、デプロイステータスを IMPAIRED ( の場合MAINTAIN) または ROLLBACK_IN_PROGRESS ( の場合) に設定しますROLLBACK。ある場所で検証が成功した後でのみ、 はそこでゲームサーバーを実行している残りのコンテナをAmazon GameLift Servers置き換えます。

検証にかかる時間

が検証Amazon GameLift Serversに使用する容量が保護されたゲームセッションをホストしている場合、検証には時間がかかります。フリートの は、新しいゲームセッションのデフォルトの保護NewGameSessionProtectionPolicyを決定します。有効な値は、NoProtection および FullProtection です。デプロイの は、デプロイがその保護に従うかどうかProtectionStrategyを決定します。有効な値は、WITH_PROTECTION および IGNORE_PROTECTION です。

フリートが NewGameSessionProtectionPolicyに設定FullProtectionされ、デプロイが にProtectionStrategy設定されている場合WITH_PROTECTION、 は保護されたゲームセッションの終了に長い検証タイムアウトAmazon GameLift Serversを許可します。他の組み合わせでは、短いタイムアウトが使用されます。

重要

新しいコンテナが正常になることがなく、フリートがWITH_PROTECTIONデプロイFullProtectionで を使用する場合、障害を報告する前に保護されたゲームセッションが終了するまでデプロイIN_PROGRESSのステータスを維持できます。より高速なシグナルを得るには、テストIGNORE_PROTECTION中に を使用して新しいコンテナイメージをデプロイするか、自分でデプロイをキャンセルします。デプロイをキャンセルする手順については、「」を参照してください新しいデプロイを開始してデプロイをキャンセルする。

NewGameSessionProtectionPolicy が であるフリートUpdateGameSessionで個々のゲームセッションを で保護する場合NoProtection、 Amazon GameLift Serversはそれらの待機時間を延長しません。これらのゲームセッションが時間内に終了しない場合、新しい設定が機能していても検証が失敗する可能性があります。

デプロイステータスを追跡する

Amazon GameLift Servers コンソールでデプロイを追跡するには、フリートを開き、デプロイタブを選択します。 AWS Command Line Interface (AWS CLI) で追跡するには、 list-fleet-deploymentsを使用してデプロイ ID を検索し、次に describe-fleet-deployment を使用して単一のデプロイの詳細を確認します。

デプロイステータス値とそれぞれの意味については、 Amazon GameLift Servers API リファレンスDeploymentStatusの「」を参照してください。

障害のあるデプロイのデバッグ

デプロイの障害は、検証中に新しいコンテナが正常ではなかったことを意味します。多くの場合、コンテナが終了または起動に失敗したために、待機Amazon GameLift Serversを停止ProcessReady()する前に というゲームサーバーコンテナがありません。原因は通常、コンテナイメージまたはゲームサーバーにあります。コンテナが終了した理由、またはゲームサーバーが準備状況を報告しなかった理由について説明します。

フリートイベントログを確認する

フリートイベントログには、デプロイ中にAmazon GameLift Servers観察された内容が記録されます。コンソールのフリートのイベントタブで表示するか、 を呼び出しますdescribe-fleet-events。次のイベントコードは、失敗したデプロイに関連しています。

  • GAME_SERVER_CONTAINER_GROUP_CRASHED および PER_INSTANCE_CONTAINER_GROUP_CRASHED - コンテナグループが終了したか、起動に失敗しました。Amazon GameLift Servers にコンテナの終了コードがある場合、イベントメッセージにコードが含まれます。

  • GAME_SERVER_CONTAINER_GROUP_REPLACED_UNHEALTHY および INSTANCE_REPLACED_UNHEALTHY – は、コンテナグループまたは正常でないインスタンスをAmazon GameLift Servers置き換えました。これらは、デプロイが失敗している間にフリートのロケーション間で繰り返される可能性があります。

  • SERVER_PROCESS_MISCONFIGURED_CONTAINER_PORT – ゲームサーバーコンテナは、コンテナグループ定義で宣言されたポートと一致しないポートを使用しました。

  • LOCATION_STATE_UPDATING および LOCATION_STATE_ACTIVE - これらは、各場所のデプロイを括弧で囲むため、他のイベントを、それらを生成したデプロイと並べるのに役立ちます。

  • COMPUTE_LOG_UPLOAD_FAILED – コンテナのログ収集が機能しなくなったため、そのコンテナからのログが不完全または欠落している可能性があります。

コンテナログの読み取り

が各コンテナの標準出力Amazon GameLift Serversを送信するコンテナフリートのLogConfigurationセット: CLOUDWATCH (デフォルト)、S3、または NONE。デプロイが失敗したときにコンテナ出力を使用S3できるように、 CLOUDWATCHまたは に設定します。たとえば、コンテナのエントリポイントがイメージにないファイルを参照しているため、ゲームサーバーの実行を開始する前にコンテナが失敗した場合、この出力は失敗の唯一のレコードです。コンテナのログ記録の詳細については、「」を参照してくださいログ記録の違い: マネージド EC2 フリートとコンテナフリート。

障害のあるコンテナに接続する

MAINTAIN 障害戦略を使用してデプロイした場合は、 Amazon GameLift Servers を保持して直接検査するコンテナに接続できます。これを使用して、ファイルのアクセス許可を確認し、イメージに実際に含まれているファイルを確認し、手動でゲームサーバー実行可能ファイルを実行して、レポートの内容を確認します。コンテナに接続する手順については、「」を参照してくださいコンテナに接続する。

デプロイに関する一般的な問題

以下の症状は、デプロイの失敗や遅延、および通常の原因でよく見られます。

コンテナはすぐに開始および終了します。

コンテナのエントリポイントを実行できない場合は、以下を確認してください。

  • 起動スクリプトとゲームサーバーの実行可能ファイルがイメージで実行可能とマークされていることを確認します。

  • 実行可能ファイルの CPU アーキテクチャがフリートのインスタンスタイプと一致することを確認します。

  • イメージに、実行ファイルに必要なインタープリタと共有ライブラリが含まれていることを確認します。

Amazon GameLift Servers が実行できるイメージの構築については、「」を参照してくださいAmazon GameLift Servers 用のコンテナイメージを構築する。

デプロイは遅くなりますが、何も失敗しません。

WITH_PROTECTION デプロイは、検証中とフリートのコンテナを置き換えるときに、保護されたゲームセッションが終了するのを待ちます。長いデプロイを失敗として扱う前に、フリートのアクティブなゲームセッションを確認してください。検証の待機時間の詳細については、「」を参照してください検証にかかる時間。

新しいデプロイを開始してデプロイをキャンセルする

デプロイをキャンセルしてフリートを以前の設定に戻すには、コンソールでフリートを呼び出すUpdateContainerFleetか編集して、変更を元に戻す新しいデプロイを開始します。最も一般的なケースは、新しいコンテナグループ定義バージョンです。この手順は元に戻します。 は、進行中のデプロイで最後にアクティブになったときにフリートが使用したバージョンを RollbackGameServerBinaryArnおよび としてAmazon GameLift Servers記録するためRollbackPerInstanceBinaryArn、どのバージョンに戻るか調べる必要はありません。デプロイによってログ設定や接続ポート範囲などの他の設定も変更された場合は、それらを同じUpdateContainerFleetリクエストに戻します。

開始する前に、 AWS CLI アカウントの を設定し、フリートのホーム を特定します AWS リージョン。この手順では、復元するために、進行中のデプロイと以前のコンテナグループ定義バージョンが必要です。list-fleet-deployments を使用してデプロイ ID を検索します。手順については、「デプロイステータスを追跡する」を参照してください。

コマンドで、fleet-id をフリート ID に、deployment-id を進行中のデプロイ ID に、fleet-home-region をフリートのホームに置き換えます AWS リージョン。

進行中のデプロイを以前のコンテナバージョンに置き換えるには (AWS CLI)
  1. 返すバージョンを取得するには、次の AWS CLI コマンドを使用します。

    aws gamelift describe-fleet-deployment \ --fleet-id fleet-id \ --deployment-id deployment-id \ --region fleet-home-region

    レスポンスで、 は、フリートが最後にアクティブになったときに使用したゲームサーバーコンテナグループ定義バージョンRollbackGameServerBinaryArnを保持します。フリートにインスタンスごとのコンテナグループがある場合、 はそのバージョンRollbackPerInstanceBinaryArnを保持します。

  2. 次の AWS CLI コマンドを使用して、そのバージョンで新しいデプロイを開始します。rollback-game-server-cgd-arn をステップ 1 RollbackGameServerBinaryArnの値に置き換えます。フリートにインスタンスごとのコンテナグループがある場合は、 RollbackPerInstanceBinaryArn 値--per-instance-container-group-definition-nameも渡します。

    aws gamelift update-container-fleet \ --fleet-id fleet-id \ --game-server-container-group-definition-name rollback-game-server-cgd-arn \ --region fleet-home-region
  3. 以前のデプロイがCANCELLEDステータスを報告し、新しいデプロイが終了したCOMPLETEときにレポートすることを確認します。

注記

この方法でデプロイをキャンセルしても、すぐに停止することはありません。新しいデプロイは、検証を含む他のデプロイと同じステップを実行するため、フリートの解決に時間がかかります。フリートが正常に実行されたバージョン。通常、 はすばやく検証します。

詳細については、以下のトピックを参照してください。