Amazon GameLift Streamsを使って、Go言語で作ったゲームをクラウドストリーミングしてみた
こんにちは、ゲームソリューション部のsoraです。
今回は、Amazon GameLift Streamsを使って、Go + Ebitengineで作った自作ゲームをクラウドストリーミングで遊べるようにしてみたことについて書いていきます。
はじめに
Amazon GameLift Streamsは、ゲームをクラウドで実行し、WebRTCで映像と入力をやり取りすることで、ブラウザからゲームを遊べるようにするサービスです。
UnityやUnreal Engineでの利用が一般的ですが、今回はあえてGo言語のゲームエンジンEbitengineを使って、Hit and Blow(数字当てゲーム)を作り、GameLift Streamsで配信してみました。
作成してストリーミングしたゲームは以下です。
インストールなどは不要で、ブラウザからゲームを遊ぶことができました。
ゲームはHit and Blowというゲームで、3桁の秘密の数字(各桁0-9、重複なし)を当てるゲームです。
推測を入力すると、Hit(数字と位置が両方一致)・Blow(数字は合っているが位置が違う)が表示されて、3Hitすることでゲームクリアになります。
- ゲームスタート

- ゲーム中

- ゲームクリア

構成
今回構築したのは以下の構成です。
S3に配置したFlutter Webのフロントエンドから、ゲーム接続のリクエストをしてAPI Gateway+LambdaでGameLift Streamsへセッションを作成します。
セッションを作成したあと、ユーザーからGameLift Streamsへ接続します。
GameLift StreamsはS3に配置したゲームを取得して、ゲームを配信します。

使用した技術は以下です。
- ゲームアプリ:Go 1.24 + Ebitengine v2.9.7
- フロントエンド:Flutter Web + GameLift Streams Web SDK
- バックエンド(セッション作成):Lambda(Go)
- インフラ:Terraform + AWS
- ビルド環境・GameLift Streams ランタイム:Ubuntu 22.04
構築
今回のメイン部分はGameLift Streamsであるため、フロントエンドやバックエンド、ゲームアプリの作成部分は割愛します。
基本的にAWSリソースはTerraformで構築しました。
ただし、以下のGameLift Streams関連のリソースはTerraformに対応していなかったため、手動で作成しました。
- GameLift Streams アプリケーション
- GameLift Streams ストリームグループ
GameLift Streams アプリケーションの作成
アプリケーションについて、ランタイムはUbuntuを選択しました。

アプリケーションの実行可能な起動パスは、ZIPファイルを指定することができないため、展開したファイルを配置して、launch.shを準備して起動するようにしました。

アプリケーションのログパスを指定することも可能です。

最終的に作成したGameLift Streams アプリケーションは以下です。

注意事項として、アプリケーションは作成後に、ランタイムの変更や起動パスの変更はできません。
GameLift Streams ストリームグループの作成
アプリケーションに紐づけるストリームグループを作成します。
ストリームクラスで、使用するハードウェア設定を選択します。
今回はUbuntuであるため、Ubuntuでフィルターをかけています。

ストリームグループを配置するリージョンを選択します。
今回は東京リージョンのみを選択しています。
常時稼働容量は0にして、セッション作成リクエストを受け取ってからスケールさせることも可能です。
稼働容量について、ランタイムによって、12の倍数でしか指定できなかったり、2の倍数でしか指定できなかったりすることには注意が必要です。

GameLift Streams テストストリーム
GameLift Streamsにはテストストリームという機能があり、ストリームグループを選択して実際にゲームをストリーミングしたときにどう見えるかを確認することができます。
統計を表示して、パフォーマンスを確認することも可能です。


動作確認
CloudFrontのドメインに接続して、Flutter Webの画面を表示します。
Start Gameボタンを押して接続を開始します。
常時稼働容量を0にしていたこともあり、接続開始からゲームが表示されるまで40秒〜1分程度かかりました。


接続が完了すると、ゲームが起動して遊ぶことができました。
- ゲームスタート

- ゲーム中

- ゲームクリア

動作確認後にGameLift Streamsのストリームグループを見てみると、ストリーム容量や使用中のストリームのメトリクスを確認することができます。

GameLift Streamsのセッションにて、アクティブセッションや最近のセッションを確認することができます。


参考
最後に
今回は、Amazon GameLift Streamsを使って、Go + Ebitengineで作った自作ゲームをクラウドストリーミングで遊べるようにしてみたことを記事にしました。
どなたかの参考になると幸いです。







