UE5 Dedicated ServerをAWS EC2インスタンスに立てる

 見せてもらおうかGraviton2プロセッサの性能とやら、の巻

こちらは Unreal Engine (UE) Advent Calendar 2022 のカレンダー 2 、12 月 18 日分の参加記事の追加分となります。

Linux DedicatedServer ができたので AWS に EC2 インスタンスを立てて動かしてみました …と書きたい所ですが、Graviton2 インスタンスを試したくなったので LinuxArm64 で再パッケージングしました。

EC2 インスタンスの作成

AWS マネジメントコンソールにログインし、EC2 のインスタンス画面の右端にあるインスタンスを起動をクリックします。

インスタンスを起動をクリック

名前を入力し、マシンイメージは AmazonLinux、アーキテクチャは(せっかくなので)64bitArm を選択します。

名前・AMI・アーキテクチャの設定

インスタンスタイプはデフォルトの c6g.medium で問題ありません。キーペアは(既存のものがなければ)新規作成します。

インスタンスタイプとキーペア

キーペア名を入力し、キーペアを作成をクリックすると、pem ファイルがダウンロードされるので手元で保管して下さい。 この pem ファイルは ssh ログイン時に使用します。

キーペアを作成

作成したキーペア名を EC2 側にも忘れずに設定しておいて下さい。(なお筆者は一度忘れて ssh ログインできないインスタンスを作成してしまい…作り直す羽目になりました orz)

作成したキーペアを設定

ネットワーク設定の編集をクリックして下さい。

ネットワーク設定

パブリック IP の自動割り当てを有効化に設定して下さい。

パブリックIP自動割り当てを有効化

インバウンドセキュリティグループはデフォルトでは ssh(22/tcp)のみのため、追加が必要です。

セキュリティグループを追加

ここで UE のネットワークを追加します。 タイプをカスタム UDP、ポート範囲を 7777、ソースに手元の PC のグローバル IP アドレスを記入します。 ***.***.***.***/32と CIDR 表記で書くことでその IP アドレスからのみ接続を許可します。 手元の PC のグローバル IP アドレスが不明の時は、ENV Checker - 環境変数チェッカーなどのサイトで調べることができます。サイトを開きREMOTE_ADDRの値を記入して下さい。

追加グループの内容

以上の設定が終わったら、インスタンスを起動をクリックします。

インスタンスを起動

10 数秒ほどして起動が完了します。

インスタンス起動完了

起動が完了しても初期化が終わるまではログインできません。

インスタンス初期化中

このような表記になったらログイン可能です。

インスタンス初期化完了

DedicatedServer パッケージのコピー・展開・起動

ログイン可能になったら、パブリック IPv4 アドレスに ssh 接続してログイン可能かどうか確認します。 (パブリック IPv4 アドレスは ↑ のインスタンス一覧画面を右にスクロールしていくと表示されています)

$ ssh -i ../../../../ssh/aws/UE-DedicatedServer-keypair.pem  ec2-user@***.***.***.***
The authenticity of host '***.***.***.*** (***.***.***.***)' can't be established.
ECDSA key fingerprint is SHA256:7cpp+CGYwC61o5GZmk3j2+z3AlBHny4CbgzSDUYBsrw.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '***.***.***.***' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
[ec2-user@ip-***-***-***-*** ~]$

ログインできたらいったんログアウトし、Linux DedicatedServer のパッケージ Zip を scp で EC2 インスタンスにコピーします。

$ scp -i ../../../../ssh/aws/UE-DedicatedServer-keypair.pem LinuxArm64Server.zip ec2-user@***.***.***.***:~/

その後、EC2 インスタンスに再度ログインし、パッケージを展開、実行権を付与し、実行します。

[ec2-user@ip-***-***-***-*** ~]$ ls
LinuxArm64Server.zip
[ec2-user@ip-***-***-***-*** ~]$ unzip -x LinuxArm64Server.zip
Archive:  LinuxArm64Server.zip
   creating: LinuxArm64Server/
  inflating: LinuxArm64Server/Manifest_NonUFSFiles_LinuxArm64.txt
  inflating: LinuxArm64Server/Manifest_UFSFiles_LinuxArm64.txt
   creating: LinuxArm64Server/Multiplay51/
  inflating: LinuxArm64Server/Multiplay51Server-Arm64.sh
   creating: LinuxArm64Server/Multiplay51/Binaries/
   creating: LinuxArm64Server/Multiplay51/Binaries/LinuxArm64/
  inflating: LinuxArm64Server/Multiplay51/Binaries/LinuxArm64/Multiplay51Server-LinuxArm64-Shipping
   creating: LinuxArm64Server/Multiplay51/Content/
   creating: LinuxArm64Server/Multiplay51/Content/Paks/
  inflating: LinuxArm64Server/Multiplay51/Content/Paks/global.ucas
  inflating: LinuxArm64Server/Multiplay51/Content/Paks/global.utoc
  inflating: LinuxArm64Server/Multiplay51/Content/Paks/Multiplay51-LinuxArm64Server.pak
  inflating: LinuxArm64Server/Multiplay51/Content/Paks/Multiplay51-LinuxArm64Server.ucas
  inflating: LinuxArm64Server/Multiplay51/Content/Paks/Multiplay51-LinuxArm64Server.utoc
[ec2-user@ip-***-***-***-*** ~]$ ls -l LinuxArm64Server/Multiplay51/Binaries/LinuxArm64/
total 114176
-rw-rw-r-- 1 ec2-user ec2-user 116914968 Dec 18  2022 Multiplay51Server-LinuxArm64-Shipping
[ec2-user@ip-***-***-***-*** ~]$ chmod +x LinuxArm64Server/Multiplay51/Binaries/LinuxArm64/Multiplay51Server-LinuxArm64-Shi
pping
[ec2-user@ip-***-***-***-*** ~]$ ls -l LinuxArm64Server/Multiplay51/Binaries/LinuxArm64/
total 114176
-rwxrwxr-x 1 ec2-user ec2-user 116914968 Dec 18  2022 Multiplay51Server-LinuxArm64-Shipping
[ec2-user@ip-***-***-***-*** ~]$ ./LinuxArm64Server/Multiplay51/Binaries/LinuxArm64/Multiplay51Server-LinuxArm64-Shipping

起動したら Windows クライアントから接続します。調子に乗って 4 人分接続してみましたが、フォーカスが外れたウィンドウはフレームレートが落ちるようです。 同一の Windows 上でクライアント実行しているのでご容赦下さい。あと、操作する人間が 1 人しかいないのはどうしようもなく…(爆)

注意

放っておくとどんどん時間課金されます。 オンデマンドインスタンス料金表によると c6g.large は 0.0856USD/時間となっていますが、 1 ヶ月(24 時間 30 日)で約 8400 円(1USD=136 円換算)になります。 不要になったインスタンスは忘れずに停止または終了しておきましょう。 (終了するとインスタンスの全データが破棄されるため、また使うことがあるなら停止に留めておくのが良さげです)

まとめ

Graviton2 のインスタンスいいですね! UE DedicatedServer のパッケージングを動かす上では x64 と特に違いは感じられませんでした。 x64 の c5.large が 0.107USD なので多少お安くなっているようです。

文責:ともたこ/Tomotaka Ogino Twitter/github/Qiita