AWS EC2インスタンスからSteam Home Streamingでゲームをあそぶ
ハローーーーーー!!! プレジデンテ!!!!!!!(挨拶)
そろそろSteamでTropico 6が出るぞという昨今ですが、Cities: Skylines Industries DLCが出たばかりの市長の皆さんはいかがお過ごしでしょうか。私はDLCやらMODやらでモリモリになったCities: Skylinesを6年前のPCで遊ぶことにそろそろ限界を感じています。しかしいまPCを組むのは時期が悪い[要出典]。
ということで、AWSのEC2インスタンスにSteamをインストールして、ゲームをストリーミングプレイしてみたときのメモです。思っていたほどの遅延もなく、ある程度の妥協があれば快適にプレイができるようになりました。
やりたいこと
Cities: Skylinesというゲームがあります。要するにめちゃくちゃ広い土地でめちゃくちゃいろいろなことができるSimCityです。
いろいろな機能がMODにより追加できるのですが、いかんせんMODをいれるとCPUリソースやらメモリリソースやらをバカ喰いしてしまいますので、高性能なPCがないと快適に遊べません。いまはCPUは6年前のSandy Bridge、RAM16GB、GPUだけは新しめのGeForce GTX 1060という環境で遊んでいるのですが、さすがにそろそろ厳しくなってきました。
しかしこれのために今PCを組もうとすると20万円は吹っ飛んでしまいます。さすがにキツいです。初期投資をおさえつつ利用料金さえ払えばいい感じの環境を貸してくれるところはないでしょうか。ありますね。クラウドです。AWSです。
初期投資をおさえつついい感じの環境で遊ぶため、クラウド環境にゲームを遊ぶためのマシンを立てて、そこからストリーミングプレイを試してみることにしました。
必要なもの
AWSアカウント
今回はAmazon Web Serviceで環境を構築することにしました。Google Cloud PlatformやAzureでも似たようなことはできるとおもいます。
端末
ゲームを遊ぶ物理端末です。Steamホームストリーミングが動く環境、WindowsかMacOSかLinuxの端末が必要です。今回はWindows10のPCで遊びます。
Steam
ゲームを遊ぶためのプラットフォームです。SteamにはSteamホームストリーミングという機能があり、ストリーミングプレイが可能です。
VPN環境
Steamホームストリーミングは、同一LAN内でしか動作しません。そこでVPNで実際にゲームが稼働する環境と手元の端末をVPNでつなぎ、同一LAN内に見せかけるわけです。
ちょうどウチの無線ルータ( NETGEAR Nighthawk R7000 )にはVPNサーバ機能があり、今回はこの機能を使うことにしました。そういうのがなければSoftEtherを使うのが楽だと思います。
VNC
WindowsのRemote DesktopだけではSteamホームストリーミングを立ち上げることができません。VNCあるいは他のWindowsにリモートアクセスする方法が必要です。
今回はUltraVNCを使いました。
やりかた
EC2インスタンス作成
EC2インスタンスをつくります。詳細な手順はなんかググってさがしてください。
まずIAMロールをつくっておきます。あとからインスタンス内でドライバをインストールするときにS3からドライバをダウンロードしますので、EC2インスタンスにS3を読み込める権限が必要です。
そしたらEC2インスタンスを作ります。Windows Server 2016のBaseでつくります。
うわ〜〜〜CPU16コアRAM122GBだ〜〜〜〜〜〜〜〜〜
さっき作ったIAMロールをつけてあげましょう。
ストレージ、プロビジョンドIOPSのSSDを使うと結構値段が張ってしまいます。汎用SSDでもいいとはおもうのですが、今回はお試しと言うことでプロビジョンドIOPSのSSDを使いました。
FW、とりあえず端末からのアクセスにおいて全てのポートを許可しました。本来ならRDPとVPNとVNCで使うポートだけ開けるべきだと思います。考えるのがめんどくさいのでこうしてしまいましたが、端末が頻繁にアドレスが変わる環境にある場合やこのアドレスをもつ端末の信頼が十分でない場合にはきちんと制限をすべきです。
ではやっていきましょう。
NVIDIA Driver
RDPでインスタンスにログインできたら、ソフトウェアをインストールしてきます。まずはNVIDIA Driverを下記に従ってインストールします。
Windows での NVIDIA ドライバーのインストール - Amazon Elastic Compute Cloud
Steam
インストールしましょう。
Steam, The Ultimate Online Game Platform
Windows Server 2016でIEをつかうとドチャクソ強力な制限がかかっているので、すこしめんどくさいです。インターネットオプションから制限をゆるめたほうがやりやすいかとおもいます。
VPN
ウチの場合、無線ルータ Nighthawk R7000にVPNサーバの機能がありますのでそれをつかいます。ここで説明してもしょうがないかと思いますので詳細は書きません。
なお、公式の説明の通りにWindowsクライアントとしてOpenVPNの最新版を使ってしまうとセキュリティ上の制限により使えませんでした。今回はOpenVPN 2.4.0を使いました。必要だから制限を掛けているわけで、あまり褒められたものではありません。このクライアントを使って大事な通信はしないようにしましょう。
既存のVPN環境がない場合、Softetherとか使うのが楽だと思います。
VNC
ここまででSteamホームストリーミングうごくかなと思っていたのですが、動きませんでした。調べてみると、RDPのセッションではNVIDIA Driverが動いてくれないようです。VNCのセッションをつくっておけばNVIDIA Driverも動いてくれるようなので、それをつかいます。
Windows Server側にUltraVNC Serverを、クライアント側にUltraVNC Clientをインストールします。
UltraVNC VNC OFFICIAL SITE, Remote Access, Support Software, Remote Desktop Control Free Opensource
このままだと、RDPのセッション上でVNCが動いてしまうので、セッションが切れてもVNCが動くよう、サービス登録をします。
ここでいったんPCを再起動し、VNCで接続してください。Ctr+Alt+Del送出ボタンでログインをして、接続すると、デスクトップに入れるかと思います。
VPNクライアントを起動してSteamを起動、すると手元の端末のSteamでストリーミングするという選択肢が出てくるはずです。
接続
Steam Home Streamingではいってみました。
いま試すと結構画像粗くなっていますけど、深夜とかに試してみるともっときれいにできました。通信速度の違いでしょうか。