サンプルゲームで理解するAmazon GameLift #2 Fleetの構成編

サンプルゲームで理解するAmazon GameLiftシリーズ第二弾。今回はFleetの構成に関する部分を深掘りしていこうと思います。

Fleetとは

まずFleetとは何なのか確認しておきましょう。公式のFAQには以下のような記載があります。

フリートとは、1 つのリージョン内でゲームサーバーの 1 つのビルドを実行している Amazon GameLift インスタンスセットのことです。フリート内のインスタンス数を増減することで、プレイヤーの需要の変化に対応できます。1 つのフリートを設定して、特定のインスタンスタイプの使用、ビルドのデプロイ、各インスタンスでの 1 つまたは複数のサーバープロセスの実行を行えます。

簡単にいうとFleetは「ビルドがデプロイされたEC2インスタンス群」です。Auto Scalingを使えば負荷状況に応じてEC2のインスタンス数を増減させることも可能です。

サンプルゲームのFleet

では早速、GameLiftでサンプルゲームを動かしてみるで「サンプルゲームサーバーのデプロイ」を実施した際に、どのようなことが起ったのかを確認していきましょう。

「サンプルゲームサーバーのデプロイする」という操作を実行した後、しばらく待つとアクティブなFleetが作成されます。

コンソールよりFleetに関するより詳細なステータス(メトリクスやイベントなど)も確認することができます。

メトリクス

Fleetのメトリクスを確認することができます。参照可能なメトリクスは大きく分けて以下の4つです。

  • インスタンスの数
  • ゲーム(セッション情報)
  • サーバープロセス
  • インスタンスのパフォーマンス

各メトリクスの詳細については以下をご確認ください。



自身で可視化するためのダッシュボードを作ることなく、プレイヤーの利用状況、サーバーのリソース状況などを確認できるのは非常に便利ですね。

上記のメトリクスより、サンプルゲームのFleetは1つのインスタンスにより構成されていることが確認できます。

イベント

Fleetに発生したイベントを一覧で確認することができます。イベント発生時にログが出力された場合は、コンソールよりログをダウンロードすることもできます。



上記のイベントより、サンプルゲームのFleetのステータスがACTIVEになったことを確認することができます。

スケーリング

Fleetのスケール設定を確認することができます。



こちらの画面よりプレイヤーのセッション数や、インスタンスの状況に応じたスケール設定をすることが可能です。こちらについては別の回で詳しく説明しようと思います。

ゲームセッション

プレイヤーの利用状況を確認することができます。



作成した直後はプレイヤーがいないので、プレイヤーセッションは8人中0人となっています。

ビルド

Fleetにデプロイしているビルドを確認することができます。



このFleetはビルドがサンプルビルド: game_server、バージョンがv1.2.0.0であることが確認できます。

容量の割り当て

インスタンス起動時のパスや起動パラメータを確認することができます。

ポート

インスタンスへの接続ポートを確認することができます。



このFleetは全てのIPアドレスからの33435に対するUDPにリクエストを受け付けている(ネットワーク的にオープンになっている)ことが確認できます。

Fleetへの接続

Fleetインスタンスにはリモートでアクセスすることができます。サンプルゲームインスタンスの状況を確認するため実際にアクセスしてみましょう。

接続情報の取得

Windowsインスタンスに接続するためのユーザ名、パスワードを取得します。

まずは、FleetIdを使ってFleetを構成するインスタンスのInstanceIdを取得します。

 
$ aws gamelift describe-instances --fleet-id "fleet-id"
{
    "Instances": [
        {
            "Status": "Active",
            "InstanceId": "i-XXXXXXXXXXXX",
            "Type": "c4.large",
            "CreationTime": 1523594235.042,
            "FleetId": "fleet-id",
            "IpAddress": "XX.XX.XX.XX",
            "OperatingSystem": "WIN_2012"
        }
    ]
}

次に、FleetIdとInstanceIdとを使ってインスタンスに接続するためのユーザー名、パスワードを取得します。

 
$ aws gamelift get-instance-access --fleet-id "fleet-id" --instance-id "i-XXXXXXXXXXXX"
{
    "InstanceAccess": {
        "InstanceId": "i-XXXXXXXXXXXX",
        "IpAddress": "XX.XX.XX.XX",
        "FleetId": "fleet-id",
        "OperatingSystem": "WIN_2012",
        "Credentials": {
            "UserName": "gl-user-remote",
            "Secret": "XXXXXXXXXX"
        }
    }
}

これで接続!!といきたいところなのですが、現状、RDPへの接続(TCP:3389)がネットワーク的にオープンになっていません。なので次にセキュリティグループのインバウンドの設定を変更してきます。

セキュリティグループの変更

アクションより「フリートの編集」を選択します。

次にインバウンドとして、ポート3389、プロトコルTCP、IPアドレス範囲任意のIPアドレスを追加します。

その後、画面下部にある「送信」ボタンを押下します。

インスタンスへ接続

取得した情報を使ってインスタンスへ接続すると。。C:\Game配下にビルドが展開されていることが確認できます。



ゲームのサーバープロセスもちゃんと動いています!!

まとめ

Fleetの構成についてイメージは掴めたでしょうか。次回はFleetのスケールアップの部分を詳しくみていきたいと思います。