GameLiftから独立して機能提供されたFleetIQについて触れてみた

2020.12.15

どうもコンサルティング部の後藤です。

以前まではGameLiftの機能だったFleetIQですが、8月のアップデートにより独立して機能提供されるようになりました。

AWS announces General Availability of Amazon GameLift feature update

今回はそのFleetIQについて簡単ですが調べて、触ってました。

GameLift FleetIQについて

FleetIQとは元々セッションベースのマルチプレイヤーゲームでセッションを張るのに可能な限り最適なフリートに振り分けるGameLiftの機能の1つでした。

セッションの振り分けには、レイテンシーや送信先の優先順位、コスト効率、スポットインスタンスの中断率等から最適なフリートを選択しています。

このFleetIQ機能が8月より独立して機能提供されるようになりました。つまり、ゲームサーバにGameLift以外にEC2やECS、EKS等を利用しつつFleetIQの機能が利用出来るようになったというわけです。

独立した事によるメリット

・ゲームサーバの選択肢の幅が広がる

上記でも書きましたが、ゲームサーバとしてGameLift以外の選択肢を取れるのは大きいメリットだと思います。ゲームサーバはカスタマイズ性を得るためにEC2やECS、EKSを選択するケースが多いのではないでしょうか。

・利用可能なAWSサービスが広がる

ゲームサーバとしてEC2やECS、EKSを利用することでShiled AdbancedやGlobal Accelerator等、使用出来るAWSサービスの選択肢が広がります。

・ゲームサーバのコストダウンが見込める

コストダウンのためにはスポットインスタンスを活用することが頭に過りますが、スポットインスタンスは需要により不規則に中断してしまう懸念点があります。もしゲームサーバにスポットインスタンスを利用する場合、ゲームセッション中に中断してしまう可能性がありますが、FleetIQを使用することでスポットインスタンスの実行可能性を評価してセッションを張ることが出来ます。スポットインスタンスの効率的な活用以外にもFleetIQにはゲームサーバインスタンスの分散機能もあり、よりコストを効率化する事が見込めます。

等々、様々なメリットがあると思います。

FleetIQの設定方法

FleetIQはゲームサーバグループと呼ばれる概念でゲームサーバの台数等を管理します。そのためFleetIQを利用するには、ゲームサーバグループを作成する必要があります。

ゲームサーバグループには以下のコンポーネントが含まれています。

  • IAMロール
  • EC2 AutoScalingグループ
  • 起動テンプレート
  • インスタンスタイプリスト

これだけ羅列するとAutoScaling機能と同じように見えますね。

FleetIQの使用方法

FleetIQは主にマッチング時にSDKで呼び出して使用します。セッションを張る際にClaimGameServerでFleetIQを呼び出し、最適なコストで実行可能性の高いインスタンスを選択、もしくは要求します。ゲームサーバの準備が整ったら、そのサーバにセッション張るようなイメージです。

ゲームサーバグループを作成してみた

・ゲームサーバグループで使用するIAMロールを作成

ゲームサーバグループがAutoScalingを呼び出すためのIAMロールを作成します。権限にはAWS管理ポリシーのGameLiftGameServerGroupPolicyを付与します。

その後、IAMロールのエンティティを以下のように設定します。

{
    "Version": "2012-10-17",
    "Statement": [
       {
          "Effect": "Allow",
          "Principal": {
          "Service": [
              "gamelift.amazonaws.com",
              "autoscaling.amazonaws.com"
          ]
       },
       "Action": "sts:AssumeRole"
      }
    ]
}

・ゲームサーバグループ用の起動テンプレートを作成

今回はゲームサーバグループの作成のみ行うため、AMIのみ指定した起動テンプレートを作成しました。

・AWS CLIでゲームサーバグループを作成

以下のようなコマンドを実行します。

aws gamelift create-game-server-group \
--game-server-group-name [ゲームサーバグループ名] \
--role-arn arn:aws:iam::xxxxxxxxxxxx:role/GameServerGroupRole \
--min-size 1 --max-size 2 \
--launch-template "LaunchTemplateName=[起動テンプレート名]" \
--instance-definitions "InstanceType=c4.large" "InstanceType=c5.large"

--game-server-group-name : 作成するゲームサーバグループ名を入力します。

--role-arn : ゲームサーバグループに与えるIAMロールを指定します。

--min-size , --max-size : AutoScalingグループに設定する最小値、最大値を指定します。

--launch-template : 起動テンプレート名を指定します。

--instance-definitions : ゲームサーバグループが使用するインスタンスタイプを指定します。(2つ以上含める必要があります

CLI発行後、GameLiftのコンソールからゲームサーバグループを確認してみます。するとゲームサーバグループが作成できていました。

ゲームサーバグループの削除もAWS CLIで行います。以下コマンドで削除できます。

aws gamelift delete-game-server-group --game-server-group-name [ゲームサーバグループ名]

更にFleetIQを知りたい人向け

この記事を見て更にFleetIQを知りたい方は、AWS Training and certificationで独立したFleetIQに関するEラーニングがございます。しかも日本語対応しており、非常に分かりやすく解説されています。まじで必見です!

Using Amazon GameLift FleetIQ for Game Servers (Japanese)

FleetIQ以外にもGameLift関連で日本語対応したEラーニングは全部で4つあります。どれも読み応えあるものになってますので是非読んでみてください。必見です。

まとめ

GameLiftからFleetIQやFlexMatchといった機能が次々と独立して提供されるようになってきていますね。ゲームサーバとしてGameLift以外も選択できるようになり、今後は様々サービス、機能をよりゲームに合った組み合わせが出来そうで楽しみです。

この記事がどなたかのお役に立てば幸いです。