概要
今回はAmazon Gamelift Streamsを用いて「Unreal Engineサンプルゲーム」をアップロードし、Webブラウザからプレイできる環境を構築してみようと思います。
構築に使用したサービス
PC環境:Windows 11
クラウドサービス:AWS ※アカウントを持っている前提
Webアプリ実行環境:EC2(Amazon Linux)
ゲームエンジン:Unreal Engine 5.8
Amazon Gamelift Streamsとは
「Amazon Gamelift Streams」(以下、Gamelift Streams)とは、映像や音声からバックエンドまでほとんどの処理を担当できるクラウドサービスです。
【メリット】
ブラウザを通してゲームをプレイすることができるため、高性能なゲーミングPCを用意する必要なく、高品質なゲームをプレイすることができます。
【デメリット】
インターネットと常に繋がっている必要があるため、帯域幅を要求されることや多少のラグが発生してしまうことがデメリットとなってしまいます。
Amazon GameLift Serversについて
似たようなサービスで「Amazon Gamelift Servers」というものがありますが、こちらはゲームのバックエンドの処理を肩代わりできるクラウドサービスとなります。例えばFPSゲームの場合、プレイヤー側でゲームの映像や音声の処理を行い、各プレイヤーの体力や被弾ダメージ等の計算はGamelift Serversで処理できます。その分、プレイヤー側はゲームを処理できる高性能なPCを準備する必要があります。
手順①:サンプルゲームの取得
I. 下記Unreal Engine公式サイトにアクセスし、「Epic Games Launcher」をインストール後、「Unreal Engine」をインストールします。バージョンはいくつかありますが、今回は現状最新の5.8を選びました。
II. Unreal Engineを起動後、左側メニューから『New Project』をクリックし、サンプルゲームを作成します。
III. サンプルゲーム一覧が表示されます、今回は「Vehicle(車)」を選択しました。『Project Location(保存先)』と『Project Name(フォルダ名)』を設定し、『Create』をクリックします。
IV. 下記のようにゲームを編集する画面が表示されれば、作成完了です。続けてゲームデータの「パッケージ化(実行ファイルの作成)」を行います。
V. 上側メニューから『Platforms』>『Package Project』を選択し、「PACKAGE FOR」が「windows」に設定されていることを確認し、『Package Project』をクリックします。
VI. 保存先を指定するとパッケージングが開始され、画面左下に「Packaging project for Windows..」とメッセージが表示されるので、完了するまで待ちます。(筆者の場合は約1時間かかりました)
VII. 「Packaging complete!」のメッセージが表示されれば、パッケージング完了です。保存先で指定したフォルダの中を確認すると、「<プロジェクト名>.exe」を含めたゲームデータが保存されています。
手順②:S3にアップロードする
GameLift StreamsはS3(クラウドストレージサービス)のデータを参照することで専用のアプリケーションを作成できるので、事前にS3へ対象のサンプルゲームをアップロードします。
注意:この後も含めてAWSサービスをいくつか作成しますが、全て同じリージョン(例:ap-northeast-1など)で作成してください。特に「Amazon GameLift Streams」は使えるリージョンが限られているので、事前に確認することをおすすめします。
I. 「Amazon S3」>「汎用バケット」を開き、『バケットを作成』をクリックします。
II. 『バケット名』を入力します。
III. 画面最下部までスクロールし、『バケットを作成』をクリックします。
IV. バケットが作成されたら、『アップロード』をクリックします。
V. 「手順①」で取得したデータを全て『ドラッグアンドドロップ』、または『フォルダを追加』からアップロードし、画面右下の『アップロード』をクリックします。
VI. 「アップロードに成功しました」のメッセージが表示されれば、S3へのアップロードが完了です。
手順③:GameLift Streamsに「アプリケーション」を作成する
I. 「Amazon GameLift Streams」>「アプリケーション」を開き、『アプリケーションを作成』をクリックします。
II. 「ランタイム設定」は今回はデフォルトで設定されている「Microsoft Windows Server 2022 Base」のままで大丈夫です。
III. 画面をスクロールして「全般設定」より、『簡単な説明(アプリケーション名)』『ベースパス』『実行可能な起動パス(exeファイル)』を入力・設定します。『ベースパス』と『実行可能な起動パス(exeファイル)』は右側にある『S3を参照』をクリックすることで指定することもできます。
IV. 設定が完了したら、『アプリケーションを作成』をクリックします。
V. 「アプリケーション設定が完了しました」のメッセージが表示されれば、「アプリケーション」の作成は完了です。続けて『ストリームグループを作成』をクリックします。
VI. 「ストリームグループを定義」が表示されるので、『簡単な説明(グループ名)』を入力し、画面右下の『次へ』をクリックします。
VII. 「ストリームクラス」を選択する必要がありますが、今回はそこまでスペックが高くなくてもいいので『gen4n_win2022』を設定し、『次へ』をクリックします。
VIII. 先ほど作成した「アプリケーション」を選択し、『次へ』をクリックします。
IX. 「場所と容量を設定」よりロケーションを選択しますが、今回はデフォルトで設定されているもの(東京)で問題ないため、このまま『次へ』をクリックします。
X. 内容を確認し、問題なければ『ストリームグループを作成』をクリックします。
XI. 「ストリームグループのアクティブ化が完了しました」のメッセージが表示されれば、ストリームグループの作成が完了です。
テストストリームを実行してみる
手順④:EC2インスタンスを作成する
GameLift Streamsにアップロードしたゲームを、インターネットから一般の人でもプレイできるようにWebアプリを準備します。まずはWebアプリを配置するEC2インスタンス(クラウド仮想サーバーサービス)を作成します。
I. 「Amazon EC2」>「インスタンス」を開き、『インスタンスを起動』をクリックします。
II. 『名前とタグ』を入力します。「アプリケーションおよびOSイメージ」と「インスタンスタイプ」はデフォルト設定のままにします。
III. SSH接続を行うため、『キーペア』を設定します。新規で作成する場合は「新しいキーペアの作成」を選択して作成します。SSHキーファイル(.pem等)はインスタンスにWebアプリデータをアップロードする際に利用します
新しいキーペアの作成方法
IV. 「インスタンスを起動」をクリックし、インスタンスを作成します。
V. 「インスタンスの起動を正常に開始しました」のメッセージが表示されれば、インスタンスの作成が完了です。
VI. 作成したインスタンスを選択し、右上側メニューから『接続』をクリックします。
VII. デフォルトで「EC2 Instance Connect」が選択されているので、そのまま『接続』をクリックします。
VIII. ターミナルが表示されれば、インスタンスに接続完了です。コマンドを打ち込んで環境(Node.js)を準備します。
IX. 下記のコマンドを入力し、Node.jsをインストールします。最後のコマンドでバージョンが表示されれば、インストール完了です。
sudo yum update
sudo yum install nodejs npm
sudo node -v # 「v18.20.8」のようにバージョンが表示される
Node.jsとは
Node.jsとは:Javascriptファイルを実行するために必要なバックエンドサービスだと思ってます。今回の場合server.jsファイルを実行し、HTTPサーバーを構築するために使用します。
手順⑤:IAMロールの更新
EC2からGameLift Streamsなどの他のサービスにアクセスする場合、「IAMロール」を設定してアクセス権を付与する必要があります。
I. 作成したインスタンスを選択し、右上側メニューから「アクション」>「セキュリティ」>『IAMロールを変更』をクリックします。
II. 『新しいIAMロールを作成』をクリックします。
III. 「ロールを作成」の画面が表示されるので、右側の「ステートメントを編集」>「サービスを選択」に GameLiftと入力し、『GameLift Streams』をクリックします。

IV. 「アクセスレベル」が表示されるので、『All actions』を選択します。その後、「リソースを追加」>『追加』をクリックします。
V. 「リソースのタイプ」を『All Resources』に設定し、『リソースを追加』をクリックします。
VI. 『ロールを作成』をクリックします。
VII. 作成したロールが自動で選択されるので、そのまま『IAMロールの更新』をクリックします。
VIII. 「インスタンス(インスタンスID)に正常にアタッチしました」のメッセージが表示されれば、IAMロールの更新完了です。
IAMロールを更新しなかった場合
手順⑥:セキュリティグループの更新
ユーザーがWebアプリにアクセスできるように、セキュリティグループから特定のポート(8000)を許可します。
I. 作成したインスタンスを選択し、「セキュリティ」>『セキュリティグループ』をクリックします。
II. 『インバンドルールを編集』をクリックします。
III. 左下の『ルールを追加』を選択し、「カスタムTCP:8000」を追加します。その後、『ルールを保存』をクリックします。
IV. 「セキュリティグループで正常に変更されました」のメッセージが表示されれば、更新完了です。
手順⑦:EC2にWebアプリ(GameLift Streams SDK)をアップロードする
EC2に配置するWebアプリを準備します。今回は「GameLift Streams SDK」に付属で付いているサンプルWebアプリを利用してみます。
I. 下記GameLift Streams公式サイトにアクセス後、「Web SDK bundle」をクリックし、「AmazonGameLiftStreamsWebSDK-v<最新バージョン>.zip」をダウンロードします。
II. ダウンロードしたzipフォルダを展開すると、下記画像のデータが入っており、「GameLiftStreamsSampleGamePublisherService」フォルダがサンプルWebアプリのデータになります。
Webアプリの画面を確認
III. 「コマンドプロンプト」を起動し、下記のコマンドを入力してEC2インスタンスにWebアプリをアップロードします。
cd <ダウンロードしたSDKフォルダのパス>
scp -r -i <SSH鍵のパス> GameLiftStreamsSampleGamePublisherService ec2ユーザ名@接続先IPアドレス:<保存先のパス>
# 例)scp -r -i C:\Users\mrt\.ssh\SshTestKey.pem GameLiftStreamsSampleGamePublisherService ec2-user@210.10.10.10:/home/ec2-user/
IV. EC2インスタンスのターミナルに戻り、lsコマンドで指定した保存先のパスに「GameLiftStreamsSampleGamePublisherService」が表示されれば、アップロード完了です。
手順⑧:WebアプリからGameLift Streamsにアクセス
I. EC2インスタンスのターミナルで下記のコマンドを入力し、Webアプリを起動します。
cd GameLiftStreamsSampleGamePublisherService
npm install
node server.js
II. ブラウザに「http://<パブリック IPv4 アドレス>:8000」を入力すると、「Stream Demo」とタイトルのついたWeb画面が表示されます。
III. 「Stream Group ID」「Application ID」「Placement Locations」を入力し、「Click To Start」をクリックします。
「Stream Group ID」と「Application ID」について
IV. アップロードしたゲームがプレイできれば、接続完了です。
今後の展望
①EC2インスタンスとGameLift Streamsのリージョンが異なると、「CreateStreamSession -> StartStreamSession ERROR: Error: getaddrinfo ENOTFOUND gameliftstreams.us-east-1.api.aws」とエラーが発生してしまう
②Webアプリのhtmlとjavascriptがどのような仕組みで動いていたのかを調査
③AWS上での設定を全てGUIで行っていたので、AWS CLIを用いて設定をしてみる
参考Webサイト


























































