リモートでのゲーム開発にオススメ?EC2にNICE DCVを導入してみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

どうも、コンサルティング部の後藤です。

コロナ禍の影響により様々な業界でリモートワーク化が進んでいる中、ハイエンドなグラフィックが処理できる環境が調達できず、リモートワーク化が進められない。。なんてことありませんでしょうか。今回はそんな需要にピッタリなNICE DCVをEC2上に導入してみました。

NICE DCVとは?

イタリアのNICE社によって開発されたリモート可視化ソフトウェア NICE Desktop Cloud Visualizationです。NICE DCVはHPC向け製品となっており、ハイエンドグラフィック向けに最適化された2D/3DのGUIアプリケーションに対して高速かつ快適なリモートアクセスを実現するソフトウェアです。

2016年、AWSはこのNICE社を買収したことによりAWS上では無償で利用できるようになっています。

NICE DCVの機能

NICE DCVには以下のような機能があります。
・Windows 及び Linux で3Dアプリケーションへの高パフォーマンスなリモートアクセス
・最大4台のクライアントモニタマルチスクリーン
・USB、スマートカード、およびスタイラスのリモート化をサポート
・H.264 ベースのエンコーディングをサポート
・OpenGLおよびDirectXアプリケーションに対する完全なGPUアクセラレーション

AWSにはリモート接続可能なサービスとして、WorkSpacesやAppStream2.0がありますが、NICE DCVを活用することでゲーム開発に必要なUSBデバイス等もAWS上のインスタンスで利用する事が可能です。

NICE DCVサーバ構築

EC2作成

まず、NICE DCVを導入するEC2を作成します。

使用するAMIを選択する際にNICE DCVと検索するとAWS MarketPlaceに既にNICE DCV導入済みのAMIが見つかります。

ですが、今回はこちらを使用せず、Windows Server 2019でEC2を作成していきます。NICE DCV導入にはOS等に最小要件がありますので、導入の際には以下のドキュメントを一度確認してみてください。

NICE DCVサーバー Requirements

NICE DCVを導入するEC2のインスタンスタイプはG3またはG4が推奨されているため、今回はg4dn.xlargeで構築していきます。

その他のインスタンスタイプでも導入することは可能ですが、画像解像度に制限が生ずる可能性があったり、事前に導入しておくドライバーが異なります。詳しくは以下のドキュメントを確認してみてください。

Amazon EC2 インスタンス上の Windows NICE DCV サーバーの前提条件

また、今回作成するEC2はパブリックサブネットで構築します。EC2でNICE DCVを利用する時、ライセンスサーバは必要ありませんが、定期的にS3バケットに接続してライセンスの確認を行っています。そのためプライベートサブネットに作成する場合はVPCエンドポイントで接続できるよう、追加の設定が必要になります。

次にセキュリティグループを設定します。Windowsサーバを利用するためRDP用の3389ポート、NICE DCVはリモートクライアントと通信に8443ポートを使用するため、接続元のIPアドレスを許可するよう設定します。

IAM権限の設定

前途でも記述している通り、ライセンスの確認のため定期的にS3に接続を行います。また、今回はNVIDIAドライバーもS3から取得するため、その権限をIAMロールで付与します。権限の内容は以下の通りです。

### NICE DCVライセンス確認用IAMポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::dcv-license.ap-northeast-1/*"
            ※ap-northeast-1部分はリージョンに合わせ適宜変更
        }
    ]
}

### NVIDIAドライバー取得用IAMポリシー
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::nvidia-gaming/*",
                "arn:aws:s3:::nvidia-gaming",
                "arn:aws:s3:::ec2-windows-nvidia-drivers/*",
                "arn:aws:s3:::ec2-windows-nvidia-drivers"
            ]
        }
    ]
}

NVIDIAのDriver導入

以下のコマンドをPowershellで実行してNVIDIA GRIDドライバーもしくはGamingドライバー(g4インスタンスのみ利用可能)を取得します。上記権限の設定が上手く行っていれば、取得することが出来ます。

### NVIDIA GRID Driver用
$Bucket = "ec2-windows-nvidia-drivers"
$KeyPrefix = "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
    }
}

### NVIDIA Gaming Driver用
$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
    }
}

上記コマンド以外にも、NVIDIAの公式サイトより任意のドライバーバージョンを取得して導入する事も可能です。

ドライバーが取得出来たら導入していきます。今回はGRIDドライバーを使用していきます。2012R2用2016/2019用があるため、OSにあったものを選択します。

NICE DCVの導入

NICE DCVの公式サイトより、NICE DCVサーバのインストーラーをダウンロードします。各OSによってインストーラーが異なるため、今回はWindowsのものを使用します。

nice-dcv-server-x64-Release-xxxx.x-xxxx.msiがダウンロード出来たら実行してインストールを行います。

Drivers Selectionでは必要なデバイスドライバーを指定します。USBデバイスを使用する場合はUSB Device remotizationを選択し、Will be installed on local hard driveを選択します。

DCV Service ConfigurationではFirewallの設定やNICE DCVサーバの起動等を自動/手動で行うかを指定します。今回は自動で行うため、チェックを付けずにせ設定しました。

DCV Session Management Configurationではセッションを自動/手動での作成を選択できます。セッションが無いと接続が出来ないため、今回は自動で作成しました。

主な選択肢は上記になります。最後にInstallを選択して完了です。

Windowsサーバの場合、NICE DCV ServerのサービスはMicrosoft管理コンソールのサービススナップインで管理されています。インストール時に自動起動を行うよう設定したため、既に起動されていることが確認できます。

NICE DCVに接続してみる

NICE DCV Serverに接続する方法として、今回はNICE DCV Clientとブラウザからの接続を試してみました。

NICE DCV Clientで接続

NICE DCV Server同様、ClientもNICE DCVの公式サイトよりインストーラーをダウンロード出来ます。NICE DCV Serverに接続するローカル端末に導入しましょう。

NICE DCV Clientを起動すると、NICE DCV Serverの接続先を問われるので入力します。

次にログインに必要なユーザ名、パスワードを求められます。デフォルトではユーザ名がAdministrator、パスワードはキーペアで確認出来るものを使用してください。

ログインに成功すると、NICE DCV ClientでWindowsに接続することが出来ました。

ブラウザで接続

ブラウザのURLに以下のように入力します。

https://[NICE DCV Server IPaddress]:8443

すると、NICE DCV Client同様ログインを求められるため、先程と同様のユーザ名、パスワードを入力します。

ログインに成功すると、ブラウザからWindowsに接続することが出来ました。

まとめ

如何だったでしょうか。NICE DCV Serverの導入から接続確認までを行ってみました。今後、このサーバを利用してNICE DCVならではの機能(USB接続やマルチモニター等)を試していきたいと思います。 この記事が何方かのお役に立てば幸いです。