Amazon Web Services ブログ

Amazon GameLift FleetIQ adapter for Agones のご紹介

本投稿は、Principal Specialist SA, Containers の Jeremy Cowan と Senior Solutions Architect の Trevor Roberts による記事を翻訳したものです。

新しいゲームタイトルのローンチにはある程度のリスクが伴い、かなりの投資が必要になり、大量のコンピューティングパワーが必要になる場合があります。それらはワクワクすることかもしれませんが、ゲームが大ヒットするかどうかを常に知ることはできません。クラウドは、かつて設備投資となっていたものを運用コストに変換できるため、そのリスクの一部を軽減できます。ゲームスタジオとしては可能な限り支出を削減したい、つまり可能な限り低いコストで優れたプレイヤー体験を提供したいと考えています。そのためには、最高の信頼性を提供するゲームサーバーが必要です。Amazon EC2 スポットインスタンスを使用すると、AWS クラウド内の使用されていない EC2 キャパシティーを大規模かつ簡単に活用できます。また、既存のオンプレミスでのデプロイと比較して、EC2 の支出を70%も削減できます。ゲームセッションが途中で終了する可能性を最小限に抑え、ゲームホスティングにおいて低コストのスポットインスタンスを利用できるとしたらいかがでしょうか?

Agones

Agones はコンテナ化されたゲームサーバーのライフサイクルを管理するためのオープンソースプロジェクトです。これは、オープンソースのコンテナオーケストレーションプラットフォームである Kubernetes の上に構築されています。Agones には、ゲームサーバーのスケジューリング、スケーリング、およびライフサイクルを管理するためのカスタムソリューションの構築を回避するのに役立つ機能が含まれているため、ゲームスタジオの間で人気が高まっています。Agones を利用することで、ゲームスタジオは制作コストを削減しながら、優れたプレイヤー体験を生み出すことに時間を費やすことができます。

GameLift FleetIQ

Amazon GameLift FleetIQ は、Amazon EC2 を使用したクラウドベースのゲームホスティングにおいて、低コストのスポットインスタンスの利用を最適化します。GameLift FleetIQ を使用すると、Amazon EC2 および Auto Scaling のホスティングリソースを直接操作しながら、GameLift の最適化を利用して、安価で弾力性のあるゲームホスティングをプレーヤーに提供し、ゲームホスティングにおいて低コストのスポットインスタンスを利用できます。開発者は他の GameLift 機能から独立して GameLift FleetIQ にアクセスできます。これにより、開発者は低コストの GameLift サーバーを AWS アカウントで起動し、既存のゲームサーバー管理システムにサーバーを登録し、ライブ環境のゲームを段階的に移行したり、ゲーム内イベントをバーストしたり、コンテナ化されたゲームを AWS 上にデプロイしたりできます。FleetIQ によって管理される EC2 オートスケーリンググループである Game Server Group (GSG) の概念を紹介します。設定の一部として、優先するインスタンスタイプのリストを指定します。FleetIQ は、このリストからスポットインスタンスをプロビジョニングし、予測アルゴリズムを使用してスポットプールの実行可能性を継続的に監視します。FleetIQ は、プールが実行不可能になると予測すると、それらのプールからプロビジョニングされたインスタンスを実行可能なインスタンスに自動的に置き換えます。これにより、実行不可能なインスタンスタイプでゲームサーバーが実行される確率が減少します。

FleetIQ には、スポットでゲームサーバーを実行するための優れたオプションとなるいくつかの重要な機能が含まれています。まず、ClaimGameServerUpdateGameServer の API を使用して、FleetIQ が実行不可能としてフラグを立てたインスタンスをスケールインから保護できます。次に、EC2 スポットインスタンスが利用できない場合にオンデマンドを自動的に利用するように GSG を設定できます。

自らゲームサーバーを管理している場合はどうなるか?

EC2 スポットチームは新たに EC2 インスタンスのリバランス推奨の機能をリリースしました。この機能は、現在のスポットインスタンスが中断される可能性があるという通知を2分前にユーザーに警告します。EC2 API の使用に既に慣れている開発者は、この機能の利用も選択できます。そうでない場合、FleetIQ の統合によって EC2 スポットの中断を処理し、交換用の EC2 インスタンスを自動的にプロビジョニングします。このようにして、開発者は Agones API との統合に集中でき、ソリューションコンポーネントは FleetIQ API を監視して EC2 スポットインスタンスの実行可能性を監視できます。

Amazon GameLift FleetIQ adapter for Agones

ゲームセッションの中断を減らして、低コストのスポットインスタンスで確実にゲームサーバーを実行する機能は Agones 用の FleetIQ アダプタを作成する動機となりました。同時に、Agones を使用して Kubernetes 上でゲームサーバーを実行することを望んでいるゲームスタジオにも対応したいと考えました。アダプタは、FleetIQ API を抽象化するレイヤーを提供することによって、この両方を組み合わせます。これにより、Agones と Kubernetes を選択したゲームスタジオは、ゲームサーバーの構築と実行方法を変更することなく、スポットインスタンスでゲームサーバーを実行できます。

どのように動作するか

アダプタは、DaemonSet と pubsub アプリケーションの2つのコンポーネントで構成されています。DaemonSet は、FleetIQ API とのインターフェースを担当します。起動するとインスタンスを FleetIQ に登録し、ClaimGameServer API を呼び出し、1分に1回インスタンスのヘルスステータスを更新します。これにより、FleetIQ が実行不可能と予測したときにインスタンスが置き換えられるのを防ぎます。pubsub アプリケーションは、DescribeGameServerInstances を呼び出し、ゲームサーバーグループ内の各インスタンスのステータスを Redis チャネルに公開します。DaemonSet は、実行中のインスタンスのチャネルにサブスクライブします。インスタンスが実行不能になると、FleetIQ はそのインスタンスを draining 状態にします。pubsub アプリケーションは DaemonSet にこれを伝達し、以下のアクションを実行します。

  1. 実行中のインスタンスは、Kubernetes がそのインスタンスに新しいゲームサーバーをスケジュールしないように隔離されています。
  2. アクティブなプレーヤーを持つゲームサーバーポッドに許容値が追加されます。Agones は、これを allocated ゲームサーバーと呼んでいます。
  3. インスタンスに Taint が適用され、全ての非アクティブまたは未割り当てのゲームサーバーポッドを強制的に削除し、クラスタ内の他のインスタンスに再スケジュールします。
  4. DaemonSet は、インスタンスで実行されている割り当て済みのゲームサーバーのリストについて Agones のポーリングを続行します。最後に割り当てられたゲームサーバーがシャットダウンされると、DaemonSet は FleetIQ からインスタンスを登録解除します。登録を解除すると、保護が削除され、FleetIQ が実行可能なスポットプールからプロビジョニングされた別のインスタンスに置き換えることができます。スポットインスタンスが利用できない場合、ゲームサーバーグループはオンデマンドインスタンスにフォールバックしてホスティングキャパシティーを提供し続けます。

Visual representation of the architecture described in this blog post.メリット

アダプタには、次のような機能を含む多数のメリットがあります。

  • ゲームスタジオは、低コストのスポットインスタンスを利用することで、新しいゲームタイトルのローンチにかかるコストを削減できます。
  • 実行不可能なインスタンスを中断されにくいインスタンスに自動的に置き換えることで、スポットを使用するリスクを軽減します。
  • アクティブなゲームセッションを持つインスタンスが早期にスケールインされないように保護します。
  • FleetIQ API を抽象化し、ゲーム開発者はゲームサーバーの状態を管理するための単一の API に集中できるようにします。

アダプタは Agones と GameLift FleetIQ の使用をサポートするように設計されていますが、同様のアプローチを使用して他のゲームサーバーとコンピューティングプロビジョニングレイヤーをサポートすることもできます。これは、AWS Fargate でのゲームサーバーホスティングなど、AWS でコンテナ化されたゲームセッションをホストするために利用できる多くのオプションの一つです。

オープンソース

チームはアダプタをオープンソース化することを決定しました。これは、アダプタが Agones と Kubernetes の精神とオープン性に一致するためです。さらに、AWS クラウドでゲームサーバーを実行するコミュニティを育て、サポートしたいと考えています。このソリューションをオープンソース化することで、コミュニティに対して貢献する能力、フィードバックの提供、及び各自の目的に最適な適応能力を提供します。私たちは皆さまのアイディアや貢献を歓迎し、ソリューションを進化させるために皆さまと協力できることを楽しみにしています。

アダプタのソースコードとドキュメントはこちらからご覧いただけます。GameLift の詳細については、製品ページをご覧ください。

翻訳はソリューションアーキテクト渡邉が担当しました。原文はこちらです。