🎮

AWS EC2上にオリジナルのクラウドゲーミングPCを構築する

2023/04/06に公開

現在絶賛北海道ワーケーションをしているおとべです。
記事を下書きで寝かしていたら東京に戻ってきていました。

低スペックPC、またはMacbookなどでもPCゲームをしたく、その環境をAWSに作ろうという記事です。

あらすじ(読まなくても🙆‍♂️)

スノボがしたい!弊社はフルリモート!ということで北海道にワーケーションに来ました。
期間は1ヶ月半ほど。
しかし自分はつい2ヶ月ほど前、FF14というオンラインゲームを始め、1日5時間ほどプレイするほどにハマってしまいました。
流石に北海道にゲーミングデスクトップPCを持っていくわけにもいかず、家のPCつけっぱなしでリモートプレイするわけにもいかず。(もちろんやらないという選択肢は無く)どうしたものかと思っていました。
そんな時に見つけたのがGeForce NOWという神サービス。どうやらクラウド上にハイスペPCを設置し、そこに対して低スペPCやタブレットなどからリモート接続でゲームをするというもの。

これや、と思ったのも束の間、どうやらFF14はGeForce NOWに対応していないらしい。
ここから着想しAWS上に似たような環境を作れないかというのが事の発端です。

下調べ

使うもの

インスタンス

EC2のインスタンスタイプ「g4dn.xlarge」
これはNVIDIAのGPUリソースを利用できるインスタンスタイプで最小のものです。
最小とはいえメモリ16GB、4コアありFF程度のゲームであれば十分と判断しています。必要に応じて2xlargeなども選択肢に入れたいと思います。
また、NVIDIAのGPUリソースを利用できるインスタンスタイプは他に「g4ad」というものがあるらしいのですが、何が違うのかよくわからなかった+NVIDIA公式のドライバ入りAMIでは「g4dn」のみ対応だったため、g4dnを使っていきます。

リモートアクセスのアプリケーション

選択肢としては幅広く、SteamLink、Parsec、その他たくさんのリモート接続用のアプリがあるみたいでした。今回は低遅延でゲーム向きのParsecを使います。(SteamLinkも独自の規格で通信していて高速だが、どうやら同一ネットワーク内での利用が想定されているらしく、AWS上にVPNを作るのは少しコストが嵩みそうなので今回は外しました。)

クライアントのPCとアプリケーション

上述のParsecは多くのプラットフォームで利用できるみたいです。最低限のスペックとそこそこのネットワーク環境があればいい感じに動作します。今回はお仕事でも利用するMacbook pro2019で試します。
仕事で使うMacでFFをするのはバレたら怒られる気がしますがゲームをインストールしている訳ではないので大目に見てもらいましょう。

AWSにインスタンスを起動して環境を作成する

流れとしては

  1. AWSに上限緩和申請をする
  2. EC2上にインスタンスを起動
  3. NVIDIAのドライバをアップデート
  4. Parsecをインストール

となります。

1.AWSに上限緩和申請をする

AWSではデフォルトで、色々なリソースに対して制限が掛けられています。これはEC2の特定のインスタンスタイプのCPU個数にもかけられていて、0 CPUになっています。今回利用するg4dnは4コアなので、制限を緩和しないと利用することができません。
サポートに連絡して解除してもらう方法と、AWS Quotaというサービスでマネジメントコンソールから申請する方法があります。
詳しくは以下の記事などを参照してください。
https://qiita.com/dhirabayashi/items/03ba2a0ed1c08b1f521a

2.EC2上にインスタンスを起動

  1. EC2をメニューから開き、インスタンスの起動を選択します。名前も付けます。

  2. AMIの選択でWindows_Server-Japanese-Full-Baseみたいなのを選びます。日本人なので。

    3.インスタンスタイプを選択します。重ければ2xlargeでも

  3. キーペアを作成します。ダウンロードされるpemは大切に保管しましょう。

  4. ストレージは200GBぐらい取っておきましょう。こんなに要らない気もするので各自減らしてください。ただしWindowsのOS分などもあるので注意が必要です。やりたいゲームの合計+20GBぐらいが目安。

  5. 詳細設定で、スポットインスタンスの方が節約できるので必要に応じてスポットインスタンスを設定します。
    ちなみに自分は2週間で6回ほどスポットインスタンスをリクエストしようと試みましたが、どうやら「g4dn」は大人気らしく、スポットインスタンス用の場所が用意できねえ!みたいなエラーで弾かれてしまいます。今回は普通のインスタンスで行きます。

  6. 起動!

3.NVIDIAのドライバをアップデート

AMIの状態では恐らく最新のドライバが入っていないため、ゲームをするために最新のドライバをインストールしましょう。AWSの公式サイトで紹介されている方法をそのまま使っていきます。

  1. まずEC2がS3Accessの権限を持っていないといけないようなので、S3Accessを付与したロールを作成し、それをEC2にアタッチします。

    1. IAMを開きます
    2. ロールを作成からロールを作ります。
    3. EC2につけるロールなのでEC2を選びます
    4. 許可ポリシーで、AmazonS3ReadOnlyAccessを選択します。
    5. 名前を付けて保存します
    6. 起動しているインスタンスを選択してIAMロールを変更を選択します。
    7. 先ほど作成したロールを選択して更新します。
  2. 起動しているインスタンスに接続します。

    1. 起動しているインスタンスを選択して接続ボタンを押すと、接続メニューが出てくるのでRDPクライアントを選択します。
    2. パスワードを取得でパスワードを取得します。インスタンス生成時に生成したpemを利用します。
    3. パスワードが表示されたら、リモートデスクトップファイルをダウンロードからrdpファイルを入手します。
    4. 入手したファイルを起動すると、OSについているリモートデスクトップクライアントが起動するので、先ほど入手したパスワードでログインします。
    5. Windowsの画面が出たら成功です。
  3. 以下のコマンドをPowershellに丸々コピペすると暫く固まったのち、インストーラーがデスクトップにダウンロードされます。

$Bucket = "nvidia-gaming"
$KeyPrefix = "windows/latest"
$LocalPath = "$home\Desktop\NVIDIA"
$Objects = Get-S3Object -BucketName $Bucket -KeyPrefix $KeyPrefix -Region us-east-1
foreach ($Object in $Objects) {
    $LocalFileName = $Object.Key
    if ($LocalFileName -ne '' -and $Object.Size -ne 0) {
        $LocalFilePath = Join-Path $LocalPath $LocalFileName
        Copy-S3Object -BucketName $Bucket -Key $Object.Key -LocalFile $LocalFilePath -Region us-east-1
    }
}
  1. ダウンロードしたインストーラーを起動し、言われるがままにインストールします。

4.Parsecをインストール

parsec様がクラウド用のインストールキットを用意しているのでそれに準拠します。

https://github.com/parsec-cloud/Parsec-Cloud-Preparation-Tool

  1. START HEREのコマンドをコピーしてPowerShellに貼り付けます。(コピペはソースページから行ってください)

  2. 何か始まります。

  3. S3アクセス権のある認証情報をよこせと言われるので作成します。
    ※もしかしたら以下の内容は不要かもしれません

    1. IAMのメニューから、ユーザー、ユーザーを追加でユーザーを作成します。名前は適当で大丈夫です。
    2. ポリシーを直接アタッチするから、AmazonS3ReadOnlyAccessを選択してアタッチします。
    3. 作成後、作成したユーザーのセキュリティ認証情報タブでアクセスキーを作成します。
    4. これにチェックして続行します。
    5. 表示されるアクセスキーとシークレットアクセスキーはメモをしておき、PowerShellに聞かれていたところにアクセスキーを入力します。シークレットキーも入力します。
  4. なんかいろいろ言われますが大体Y押しとけば大丈夫です。

これでParsecが起動できるようになったはずです。

5.その他の設定

自動でParsecが起動するように設定

  1. スタートアップにParsecのショートカットを入れます。

自動ログイン設定

  1. コマンドプロンプトを起動してnetplwizからユーザーアカウント設定を開きます。
  2. ログインにユーザー名とパスワードを使用みたいな奴のチェックを外します。
  3. セキュリティ的に危ないので別途IP制限とかをかけるとベターかもです。

6.Parsecに接続

  1. インストールされたParsecをWindowsメニューで検索して起動します。
  2. Parsecのアカウントを作成してログインします。(新たなIPからのログインはメール認証が入ります)(ElasticIP当てておくと楽かもしれない)
  3. リモート接続したい元のPCにもParsecをインストールし、(普通にダウンロードしてくる)ログインします。
  4. connectを押して接続できれば成功です。

最後に

あとはFFXIVなりなんなりをインストールしてプレイするだけです。
直近で使う場合は普通に終了で良いですが、暫く使わない場合はAMIにしてS3などに格納しておくとコストがかからなくてよいかもです(ElasticIP割り当ててる場合は解除しましょう)

おまけ(コストについて)

かかるコストは主に3つで、

  • EC2のインスタンス料金(時間課金)
  • EBSの料金(月従量課金)
  • DataTransferの料金(従量課金)
    です。

EBSに関しては月1000~2000円ぐらい(EBSのサイズによりますが100GB程度だとこのぐらい)です。

インスタンス料金とDataTransferの料金が使えば使うほどメインでかかってくるのですが、割合としては2:1ぐらいで課金されるイメージです(目安)

これは北海道にいた際にg4dn-slargeを150時間程度起動をした請求になります。

大体1時間当たり200円ですね。ネカフェより安いです。

意外とDataTransferがバカにならないため、見積もりをする際はEC2の金額に1.5倍ぐらいしておくと良いかもしれません。

Discussion