翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
コンテナフリートのコンテナを検出する
Amazon GameLift Servers コンテナフリートでは、各インスタンスは複数のコンテナを実行できます。たとえば、ゲームサーバーコンテナグループの複数のレプリカを実行できます。共有されたインスタンス全体のサービスを提供するインスタンスごとのコンテナグループを実行することもできます。
コンテナ検出サーバーを使用すると、ゲームサーバープロセスは同じインスタンスで実行されている他のコンテナを検出できます。その後、コンテナはインスタンスのローカルネットワークを介してコンテナグループ定義間で相互に通信できます。
検出サーバーは軽量の HTTP サービスです。 は、すべてのコンテナフリートインスタンスでローカルにAmazon GameLift Servers実行します。このサービスは、そのインスタンスで実行されているコンテナごとに次のネットワーク情報を提供します。
コンテナグループ定義で定義したコンテナ名。
コンテナの一意の識別子。
インスタンス上のコンテナのローカル IP アドレス。
コンテナグループタイプ。
GAME_SERVER(ゲームサーバーコンテナグループのレプリカ) またはPER_INSTANCE(インスタンスごとのコンテナグループ) のいずれかです。
注記
コンテナ検出サーバーは、マネージドコンテナフリートでのみ使用できます。
コンテナネットワーク情報を取得する
コンテナネットワーク情報は、Amazon GameLift Serversサーバー SDK を使用したゲームサーバープロセスから、または HTTP 経由で検出サーバーを直接呼び出すことで任意のコンテナから、2 つの方法で取得できます。
サーバー SDK を使用してコンテナ情報を取得する
ゲームサーバープロセスでAmazon GameLift Serversサーバー SDK を使用している場合は、 ListContainersNetworkInfo()アクションを呼び出してコンテナネットワーク情報を取得します。サーバー SDK は検出サーバーを見つけてリクエストを行います。アクションは、同じインスタンスで実行されているすべてのコンテナのネットワーク情報を返します。他のコンピューティングタイプでは、アクションはサポートされていないコンピューティングタイプのエラーを返します。
ListContainersNetworkInfo() は、サーバー SDK バージョン 5.5 以降で次の言語で使用できます。
アクションは、Unreal Engine と Unity のAmazon GameLift Serversプラグインでも使用できます。
検出サーバーを直接呼び出してコンテナ情報を取得する
インスタンスごとのコンテナなど、一部のコンテナはサーバー SDK を使用しません。これらのコンテナは、検出サーバーを HTTP 経由で直接呼び出します。 は、これらのコンテナにGAMELIFT_CONTAINER_DISCOVERY_SERVER_ENDPOINT_V1環境変数をAmazon GameLift Servers事前設定します。この変数は、API バージョンパスを含む検出サーバーのアドレスを保持し、ゲームサーバーとインスタンスごとのコンテナグループ定義の両方で設定されます。
コンテナネットワーク情報を取得するには、このエンドポイントに HTTP GETリクエストを送信します。次の例では curl を使用しています。
curl "$GAMELIFT_CONTAINER_DISCOVERY_SERVER_ENDPOINT_V1"
検出サーバーは、インスタンスで実行されているコンテナごとに 1 つのエントリを持つ JSON 配列を返します。
[ { "containerName": "game-server", "ipAddress": "172.17.0.3", "containerId": "b896159563df43736e5e93ad0547a24fa572648d55b70c70747642afca398b18", "containerGroupType": "GAME_SERVER" }, { "containerName": "per-instance", "ipAddress": "172.17.0.4", "containerId": "3c239ae037aec28bb42212ffa2b9e02524c0c4c361db9bc31dd4c5aecc0b7943", "containerGroupType": "PER_INSTANCE" } ]
リクエストレート制限
検出サーバーは、インスタンス上の各コンテナを 1 秒あたり 10 リクエストに制限します。この制限を超えるリクエストをスロットリングし、エラーを返します。この制限内に収まるようにするには、起動時に検出サーバーに 1 回クエリを実行します。別の方法として、インスタンスのビューを更新する必要がある場合にのみクエリを実行します。結果をコンテナにキャッシュし、検出サーバーに定期的にクエリを実行するのではなく、キャッシュされた値を再利用します。
キャッシュを定期的に更新して最新の状態に保ちます。コンテナのローカル IP アドレスは、コンテナがクラッシュまたは終了した場合 (ゲームセッションが終了した場合など) に変更される可能性があります。
例: ゲームサーバーコンテナからメトリクスを収集する
検出サーバーの一般的な用途は、インスタンスのローカルネットワークを離れることなく、同じインスタンス上のコンテナ間でテレメトリを送信することです。複数のゲームサーバーコンテナ (GAME_SERVER) とインスタンスごとに 1 つのコンテナ () を実行するフリートを考えてみましょうPER_INSTANCE。インスタンスごとのコンテナは、インスタンス上のすべてのゲームサーバーが共有するメトリクスコレクターを実行します。
プッシュモデルまたはプルモデルを使用してメトリクスコレクションを実装できます。
-
Push (メトリクス放出) – 起動時に、各ゲームサーバーコンテナは を呼び出します
ListContainersNetworkInfo()。コンテナは、PER_INSTANCEコンテナグループタイプのエントリを見つけます。次に、そのエントリからローカル IP アドレスを読み取ります。ゲームサーバーは、インスタンスのローカルネットワーク経由でインスタンスごとのコレクターにメトリクスを直接送信します。 -
プル (メトリクススクレイピング) – 逆のアプローチも機能します。インスタンスごとのコンテナはサーバー SDK を使用しないため、検出サーバーエンドポイントを直接呼び出します。インスタンス上のすべての
GAME_SERVERコンテナの IP アドレスを検索します。次に、各ゲームサーバーコンテナがローカルネットワーク経由で公開するメトリクスエンドポイントをスクレイピングします。
どちらの場合も、通信はインスタンスのローカルネットワークにとどまります。各コンテナは、定期的にではなく、たまに検出サーバーにクエリを実行します。