💻

ゲーミングPCの代わりにEC2上で仮想ゲーミングPCを作成する

2021/11/01に公開

なぜEC2でゲーミングPCを作ろうとしたか

結婚すると家庭内稟議を通す必要があるご家族が多いと思います。そんな我が家も例外ではありません。
ぼく「FF14やってみたいしPCも古いから買い替えたいなー。」
カミ「新しいPCに割く費用なんてないよ。何より高い。」
ぼく「ですよねー...」

確かにゲーミングPCは高い。PS4もPS5もそれなりに高い(我が家にはPS4もPS5もありません)。しかしFF14をやってみたい...!
そんなときにひらめきました💡
ぼく「EC2でゲーミングPCを立ててそこでRDPかなんかで接続すればいけるんじゃね?初期費用抑えられるし。従量課金の小さい金額ならバレないはず。ぼく天才だわwww」
といったモチベではじめました!

手順

クライアントPC

Parsecをインストールし、アカウントを作成します。
https://parsec.app/downloads/

EC2の起動設定

  • AMI
    • Windows_Server-2019-Japanese-Full-Base-2021.08.11(ami-04b4defd45075280f)
    • Microsoft Windows Server 2019 Baseでも良いのですが、起動後にwindowsの日本語化って地味に時間がかかるので、それを避けるために初めから日本語化されているAMIを選択しました。
  • インスタンスタイプ
    • g4dn.xlarge
    • 記事作成時点で、NVIDIAのGPUを積んでいるものでオンデマンドコストが一番低いです。
  • オンデマンドインスタンス
    • スポットインスタンスは起動中にシャットダウンする可能性があるのでオンデマンドを使用しました。
  • EBSのサイズ
    • 75GB
    • EBSのサイズを増やすことは簡単ですが減らすことはできないので、少ないサイズから始めることをおすすめします。
    • 大きいサイズを指定しても、EBSのサイズを減らす方法があるにはありますが、ここでは説明を割愛します。
  • 他の設定は適当な値を設定します。

RDP接続

インスタンスが起動したら、RDP接続してWindows上で設定をしていきます。

  1. PowerShellを開き以下のコマンドを実行し、Parsecのインストールを行います。時間がかかるので気長に待ちましょう。
[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls" 
$ScriptWebArchive = "https://github.com/parsec-cloud/Parsec-Cloud-Preparation-Tool/archive/master.zip"  
$LocalArchivePath = "$ENV:UserProfile\Downloads\Parsec-Cloud-Preparation-Tool"  
(New-Object System.Net.WebClient).DownloadFile($ScriptWebArchive, "$LocalArchivePath.zip")  
Expand-Archive "$LocalArchivePath.zip" -DestinationPath $LocalArchivePath -Force  
CD $LocalArchivePath\Parsec-Cloud-Preparation-Tool-master\ | powershell.exe .\Loader.ps1
  1. Parsecのアプリが開くので、にログイン後にshareを押す。

クライアント端末

Parsecを起動すると作成したEC2インスタンスが選択できるので、Connectを選択しましょう。
Windowsの画面が表示されれば出来上がりです!

接続エラーが出た場合

もし接続エラーが出たときは、GPUのドライバーが存在しない可能性があります。以下の手順で、ドライバーの設定をしてみてください。

手順
IAM
  • IAMユーザーの作成
    • AmazonS3ReadOnlyAccessを設定
  • IAMロールをアタッチ
    • AmazonS3ReadOnlyAccessを作成したロールをEC2にアタッチ
RDP接続
  1. ドライバーのインストーラーをダウンロード
$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. ドライバーをインストール
  • デスクトップに作成されたフォルダを確認し、インストールファイルをダブルクリックして起動します。
  1. レジストリ編集
New-ItemProperty -Path "HKLM:\SOFTWARE\NVIDIA Corporation\Global" -Name "vGamingMarketplace" -PropertyType "DWord" -Value "2"
  1. 認証ファイルをダウンロード
Invoke-WebRequest -Uri "https://nvidia-gaming.s3.amazonaws.com/GridSwCert-Archive/GridSwCertWindows_2021_10_2.cert" -OutFile "$Env:PUBLIC\Documents\GridSwCert.txt"
  1. ドライバのアップデート
  • デスクトップにあるGPU Updaterを起動して、IAMユーザーのアクセスキーとシークレットキーを入力します。
  • 正常に完了したら再起動

5.まで完了したら、もう一度クライアントからParsecで接続できるか確認してください。

所感

手軽に高機能マシンがが手に入り、ゲームをすることができるのはいいですね!少しラグがあるので、格闘ゲームといったラグが許されないゲーム以外であれば問題なさそうです!

一方で気になる点もあります。たまにInsufficientInstanceCapacityとなり、EC2が立ち上がらない時があります。これはAWS側のリソースが枯渇しているというものなので、基本的にユーザー側で対処できるものではないので、待つだけになります。なので「ゲームしてぇ」状態にゲームするのを我慢せざるを得ないときが時々発生します。

PCは簡単に手に入れられないけど、PCゲームをやることができました!とはいえ、いつかは新しいPCが欲しいところ...
家庭内稟議を通す技術を持っている人は是非コメントお願いします!

追記

私物PCもそろそろ限界だったので、頑張って家庭内稟議通してゲーミングPC買いました。

参考にさせていただいたリンク

https://dev.classmethod.jp/articles/parsec-gaming-on-aws/
https://troches.jp/contents/tech/730
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/WindowsGuide/install-nvidia-driver.html#nvidia-gaming-driver

Discussion