Azure に Unreal Engine Pixel Streaming をデプロイする

Microsoft Azure 上で Unreal Engine 向けの Pixel Streaming をセットアップする方法を説明する簡潔なチュートリアル

Epicでは、GoogleがWebRTCのバージョンにおける脆弱性を公開 (詳細はこちら)したことを認識しており、EOS SDKに対する影響および次のステップを調査しています

Unreal Pixel Streaming は、Microsoft が Epic と共同開発した Azure Marketplace の製品です。Unreal Pixel Streaming を使用すると、Azure の利用者は、リモートの GPU 対応の仮想マシン (VM) から自身の UE アプリをデプロイして、ストリーミングすることができます。このソリューションでは、パッケージ化されたアプリケーションの単一の .zip ファイルを受け取り、複数のリージョンにわたる 1 ~数千の VM インスタンスのいずれかをスピンアップすることで、単一の URL からアクセスできる自動スケール デプロイメントをセットアップする手段を提供します。このチュートリアルは、Azure 上に最初の Pixel Streaming プロジェクトをデプロイするためのステップバイステップのガイドです。

前提条件

Azure アカウントおよびサブスクリプション

Azure アカウントと、リソース作成のための権限が付与された 1 つ以上のサブスクリプションが必要です。新規サブスクリプションの作成方法の詳細については、このガイド を参照してください。また、サブスクリプションを利用するには、請求先アカウントが設定されている必要もあります。

Unreal Pixel Streaming ソリューションは無料で提供されていますが、その結果として得られる Azure リソースの利用には、関連コストがかかります。お使いのアカウントが雇用主などの関係者に関連付けられている場合は、デプロイ用インスタンスをセットアップする前に、関連コストを支払う準備ができているかどうかをアカウントの所有者に確認してください。

より正確なコストの見積りについては、仮想マシンの料金 のページで価格情報を確認し、目的のリージョンでフィルタし、「NV12s v3」を検索して「従量課金」の料金を確認してください。

Azure の VM クォータ

Azure サブスクリプションでは、一度に使用できる VM リソース数に制限があります。この制限は、クォータと呼ばれています。Microsoft のドキュメント に沿って、希望する VM ファミリーに十分なクォータを「デプロイしたいリージョンごとに」確保する必要があります。

デフォルトの設定に必要なクォータは、標準の NVSv3 ファミリーの vCPU では、使用する NV12s_v3 インスタンスごとに 12 個の vCPU が必要です。たとえば、米国東部リージョンで 2 つのインスタンスを実行し、北ヨーロッパリージョンで 2 つのインスタンスを実行したい場合は、両方のリージョンでこのファミリーに対して vCPU 24 個分のクォータが確保できるように増量を要請する必要があります。

Pixel Streaming アプリケーションをパッケージ化する

この Azure ソリューションは、利用者が作成した既存の Pixel Streaming アプリケーションと併用する場合でのみご利用いただけます。クラウド デプロイに進む前に、「Getting Started (はじめに)」ドキュメントに沿って、必ずローカルでアプリをテストしてください。

デフォルトでは、このソリューションによって、「Samples」フォルダ内のすべての Web サーバー ファイルが完全にオーバーライドされます。Web ページまたはこれらのサーバーを カスタマイズ した場合は、先に進む前に、Azure の変更をダウンロード し、この zip ファイルに含まれている「README.txt」ファイルに沿って、自分が行った変更を必ずマージしてください。

Pixel Streaming アプリケーションのパッケージ化が完了したら、「Windows」フォルダ全体を「.zip」ファイルに圧縮します。

Compressing the Windows folder as a zip file

Azure Portal と Azure Marketplace を使用する

  1. Azure アカウント にログインします。

  2. Unreal Pixel Streaming 製品は、Azure Marketplace 上でホストされています。こちらの製品ページ に移動します。

    The Unreal Pixel Streaming offer page hosted in the Azure marketplace

  3. 右上のボタンを使用し、Azure Marketplace にサインインします。他のすべての Azure サービスに使用しているものと同じアカウントを使用します。

    The Azure Marketplace sign-in page

  4. Unreal Engine アイコンの下にある [Get It Now (今すぐ入手する)] をクリックします。また、ハートのアイコンを使用してお気に入りに保存し、後で入手することもできます。

    The Get It Now button close up

  5. ダイアログが開き、自分の情報と、アカウントにこのアプリを追加することを確認するメッセージが表示されます。情報を入力し、[Continue (続行)] をクリックします。

    Confirm information and create the app

  6. Azure Portal で、お使いのアカウントの Unreal Pixel Streaming 製品が開きます。ここから [Create (作成)] をクリックし、デプロイの設定プロセスを開始します。

    Click Create to begin configuring the deployment

Basics (基本)

作成ページのこの最初のタブには、サブスクリプションの詳細、インスタンス タイプ、アプリケーションのアップロード方法など、Pixel Streaming のデプロイに必要な基本事項が記載されています。

  1. [Basics (基本)] タブで、まず [Subscription (サブスクリプション)] と空の [Resource Group (リソース グループ)] を選択します。リソース グループは Traffic Manager、Key Vault、管理者ダッシュボードなどのグローバル リソースのデプロイ先です。[Create New (新規作成)] ボタンを使用する必要がある場合があります。

    Click the Create new link to create a new resource group

  2. グローバル リソースのプライマリ Region (リージョン) を選択します。次に、マッチメーカー VM と UE アプリ VM の両方のインスタンス サイズを選択します。このテンプレートはデフォルトで推奨サイズに設定されています。

    Default instance sizes

    先に進む前に、上記の に沿って、選択した GPU VM のサイズに適したクォータがお使いのサブスクリプションで確保されていることを確認してください。クォータが不足している場合、このデプロイは失敗し、最初からやり直す必要がある場合があります。

  3. 次に、zip 圧縮した Pixel Streaming アプリをアップロードする必要があります。[Browse (参照)] ボタンを使用して、選択したサブスクリプションの [Storage Accounts (ストレージ アカウント)] を開きます。

    Browse to your pixel streaming app package

    Create a new storage account

    ストレージ アカウントがない場合は、上にある [+ Storage Account (+ ストレージ アカウント)] ボタンで追加できます。[Name (名前)][Location (場所)]、新しい [Resource Group (リソース グループ)] を指定し、[OK] をクリックします。しばらくすると、新しいストレージ アカウントがリストで使用可能になります。リストされたストレージ アカウントを選択して開きます。

    Adding details about your new storage account

  4. Azure ストレージ アカウントにアップロードするファイルはすべて、コンテナ に格納する必要があります。コンテナがない場合は、上にある [+ Container (+ コンテナ)] ボタンで追加できます。[Name (名前)] を付けて [Create (作成)] をクリックします。リストからコンテナを選択して、開きます。

    Click the + Container button and name your new container

  5. 選択したコンテナ内で、上にある [Upload (アップロード)] ボタンをクリックし、フォルダ アイコンを使用してアプリケーションの .zip ファイルを参照して、[Upload] をクリックします。プロジェクトのサイズやネットワーク回線容量によっては、アップロードに数分かかることがあります。

    Uploading the app to the container

    アプリのアップロードが終了したら、コンテナ内のファイルを選択し、[Select (選択)] をクリックします。

    Select the file in the container

  6. 記載されている説明に従って Matchmaker サーバーまたは Signalling サーバーをカスタマイズした場合は、必ず、プロンプトの下にあるチェックボックスをオンにしてください。

    Custom mods checkbox

  7. 最後に、VM のユーザー名とパスワードを設定します。これらの資格情報は、インスタンスでリモート デスクトップを有効にすると使用され、問題をデバッグするうえで役立ちます。

    Access credentials for the Virtual Machines

    [Basics] タブでの操作が終了したら、[Next : Scale] をクリックします。

Scale (スケール)

このタブでは、デプロイのサイズと範囲を指定します。Azure 上で Unreal Pixel Streaming を使用すると、世界中の複数のリージョンにおいて、多数のインスタンスでアプリが自動的に実行されるように設定できます。

高額な課金コストを回避できるように、シンプルで小規模なデプロイでアプリケーションをテストするところから始めることをお勧めします。多くのリージョンに多数の仮想マシンを作成すると、サブスクリプションの課金額が指数関数的に増大します。

  1. [Select regions to deploy (デプロイ先のリージョンを選択)] の横にあるドロップダウンで、UE アプリのデプロイ先のリージョンを最大 4 つ選択します。お使いの Web の URL に接続しているユーザーは、(最小の ping で) 最も近いリージョンに転送されます。そのため、ユーザーがいる可能性の高いリージョンを考慮してください。

    なお、各リージョンには独自の VM クォータが課されているため、前述の内容 に沿って、事前にクォータを確保しておく必要があります。これを怠ると、デプロイが失敗します。

    Select regions to deploy your Virtual Machines

  2. [GPU VM Instances Per Region (リージョンあたりの GPU VM インスタンス数)] は、選択したリージョンで起動できる仮想マシンの数を制御します。以下で説明するように [Auto-scaling (自動スケール)] が有効な場合、この数はオンデマンドで増減します。

    [Streams Per GPU VM (GPU VM あたりのストリーム数)] は、各 VM 上で実行される UE アプリのインスタンス数で、4 つまでに制限されます。アプリケーションが軽量である場合や、高いフレームレートが必要ない場合は、コストを最小限に抑えるために、このように GPU を共有することが有効です。通常、複数の実行されているアプリ間で VM リソースを共有すると、フレームレートにマイナスの影響を及ぼします。

    Sliders controlling number of streams and virtual machine instances

  3. [Run with Azure Spot discount (Azure スポット ディスカウントで実行)] というオプションがあります。スポット インスタンスを使用すると、未使用の仮想マシンを活用することで、大幅なコスト削減が実現します。ただしトレードオフとして、中断されないサービスの保証がなくなります。テストやコスト削減の適切なオプションになりますが、VM は ここにある 多数の設定に基づいていつでも「退出」させられます。

    Using the Run with Azure Spot discount options

  4. [Auto-scaling (自動スケール)] を有効にすると、このデプロイは、アプリケーションへの接続を試みるユーザーが増加するにつれて、より多くの GPU インスタンスをスピンアップし、アイドル状態のインスタンスが過剰になったときはスピンダウンします。使用可能なインスタンスの数を一定に保ちたい場合は、この機能を無効にします。以下のオプションを確認してから、[Next : Stream Configs] をクリックします。

    Enable auto-scaling

    使用可能なスケール パラメータについては、次の表を参照してください。

パラメータ

説明

Percent Buffer Required Before Scale (スケール前に必要なバッファ(割合))

使用可能である必要のあるストリーム (UE アプリのインスタンス) の割合。この割合が確保されない場合は、このバッファを維持するためにスケールアウト処理が行われます。これは、負荷が増大しているときに、新しいユーザーが新しい VM のスピンアップを待機しなければならない状況を解消するうえで役立ちます。このポリシーを無視するには、「0」を選択します。デフォルト値は 25% です。

Instance Count Buffer Required Before Scale (スケール前に必要なバッファ (インスタンス数))

使用可能である必要のあるストリーム (UE アプリのインスタンス) の数。この数が確保されない場合は、このバッファを維持するためにスケールアウト処理が行われます。これは、負荷が増大しているときに、新しいユーザーが新しい VM のスピンアップを待機しなければならない状況を解消するうえで役立ちます。このポリシーを無視するには「0」に設定します。デフォルト値は 1 です。

Idle Minutes Before Scale-Down (スケールダウン前のアイドル時間)

最小バッファ数へのスケールダウンを評価するまでに、新しいスケールアップ処理が行われなかった時間 (分単位)。デフォルト値は 60 です。

Scale Down Amount (スケールダウンの数)

スケールダウンが発生した場合に、スケールダウンするノードの最大数。デフォルト値は 1 です。

Min Instance Count While Idle (アイドル時の最小インスタンス数)

アイドル期間 (夜間などアクティビティの少ない期間) にソリューションがスケールダウンするストリーム (UE アプリ インスタンス) の最小数。デフォルト値は 1 です。

Max Node Scale Count (スケールの最大ノード数)

スケールアウトされるストリーム (UE アプリ インスタンス) を含む GPU VM の最大数。デフォルトは 20 です。この数のインスタンスをサポートするために、必要なクォータを必ず確認してください。

まとめ

  1. [Stream Configs (ストリーム設定)] タブでは、アプリの解像度とフレームレートを調整することができます。これは、GPU あたり 2 つのストリームに最適化するうえで役立ちます。

    Adjust the app resolution and frame rate

  2. [Security (セキュリティ)] タブには、既存の Azure DNS リソースから独自のカスタム ドメイン名を使用するオプションがあり、必要に応じて、HTTPS 接続も使用できます。これはデフォルトでは無効になっています。概要については、このドキュメント を参照してください。HTTPS を使用するには、Azure DNS リソースを有効にして、Base64 エンコード形式でパブリックキーとプライベートキーのペアを用意する必要があります。

    Enable using a custom domain

    また、HTTPS が設定されている場合は、[Enable Auth on Signalling Server (Signalling サーバーで認証を有効にする)] を使用することもできます。このパラメータを設定すると、ユーザーがブラウザでアプリケーションに最初にアクセスしようとしたときに、ログイン ページにリダイレクトされます。認証されると、ユーザーはアプリケーションにリダイレクトされます。この設定を有効にした場合は、ユーザー アカウントを追加するために、次のステップで、[Admin Dashboard (管理者ダッシュボード)] も有効にする必要があります。

    Enable auth on the signalling server

  3. [Networking (ネットワーキング)] タブで、設定できる複数の詳細設定があります。注意を必要とする 1 つの重要な設定は、STUN サーバーおよび TURN サーバーのコンフィギュレーションです。デフォルトで使用するパブリックの Google STUN サーバーにより、多くのエンド ユーザーが対象 UE アプリケーションの WebRTC ストリームに接続できます。ただし、多くの企業ネットワーク、VPN、セルラー ネットワークでは、TURN サーバーを通じてストリームをリレーすることなく、対象アプリケーションを適切にストリーミングできません。これらのオプションについては、「ホスティングおよびネットワーキングの操作ガイド」を参照してください。

    Configuring the STUN and TURN server options

  4. [Admin Dashboard] タブでは、基本的なトラフィック分析の確認、ユーザー アクセスの付与 (有効な場合)、アプリの新バージョンのアップロード、および自動スケール パラメータの変更のためのシンプルなインターフェースが提供されます。

    この機能には、Azure Active Directory へのアプリ登録が必要であるため、利用者は自分の組織で適切な権限を持っている必要があります。この Microsoft のドキュメント に沿って、別のタブでアプリの登録を作成し、アプリケーション (クライアント) ID をコピーして貼り付けます。

    App registation for the admin dashboard

    Enable the admin dashboard

  5. すべての設定が完了したら、[Review + create (レビュー + 作成)] をクリックします。検証に合格し、すべてが適切であることを確認したら、[Create (作成)] をクリックしてデプロイを開始します。必要なリソース、特にアプリを起動してダウンロードする必要のある GPU VM を作成するのに数分かかることがあります。デプロイが完了したら、[Go to resource group (リソース グループに移動)] をクリックします。

    Click go to resource group after the deployment is complete

ストリーミング インスタンスに接続する

  1. デプロイのプライマリ リソース グループで、[Traffic Manager profile (Traffic Manager プロファイル)] を選択します。

    Select the traffic manager profile

  2. [Essentials (重要項目)] セクションの右上に、[DNS name (DNS 名)] が表示されています。この URL はここからコピーして、新しいブラウザのタブに貼り付けることができます。これは、ユニバーサル URL です。これを使用するとすべてのユーザーがアプリケーションにアクセスできます。ユーザーは、最も近いリージョンの Matchmaker VM に再ルーティングされ、GPU インスタンスで最初に使用可能なストリームに再度リダイレクトされます。

    Copy traffic manager DNS name

    A pixel streaming app in a browser

管理者ダッシュボードを有効化する

設定時に [Admin Dashboard] を有効にした場合、すべてのリソースがデプロイされた後、このダッシュボードを有効にするためにいくつかの追加設定が必要です。

  1. プライマリ リソース グループで、「-dashboard」が名前に含まれている App Service を開きます。

    Open the dashboard app service

  2. [Essentials] セクションの右上に、このリソースの [URL] が表示されています。このアドレスをコピーします。

    The resource URL

  3. このダッシュボード用に作成した [AAD App Registration (AAD アプリの登録)] に戻ります。[Essentials] の右側の列で、[Add a Redirect URI (リダイレクト URL を追加)] をクリックします。

    Add a redirect URI

  4. [Add a platform (プラットフォームを追加)] をクリックします。ポップアウト ブレードで [Web] をクリックします。

    Add a Web platform

  5. [Redirect URI (リダイレクト URI)] にダッシュボードの App Service の URL を貼り付けて、その末尾に /.auth/login/aad/callback を付加します。[Configure (設定)] をクリックします。

    Configure the Web platform redirect URI

  6. ページの中央にある [Implicit grant and hybrid flows (暗黙的な許可とハイブリッド フロー)] セクションがあります。アクセス トークンと ID トークンの発行に対する 2 つのチェックボックスをオンにします。ページの下にある [Save] をクリックします。

    Implicit grant and hybrid flows checkboxes

  7. 数分後に、貼り付けた元の URL にアクセスすると、[Admin Dashboard] が表示されます。この URL は、App Service に戻るといつでも確認できます。

    The pixel streaming admin dashboard

アプリケーションを更新する

[Admin Dashboard] が有効な場合は、以下の手順に沿って、UE アプリの新しいビルドで Pixel Streaming デプロイを更新することができます。[Admin Dashboard] を使用できない場合は、全体のセットアップと構成をもう一度行う必要があります。ダッシュボードを使用する方法では、既存のリソースとリソース グループを活用しますが、新しいデプロイではすべて新しいリソースが作成されます。既存のデプロイを上書きしたり削除したりすることはありません。

  1. 前述の前提条件の手順に沿って、アプリの「WindowsNoEditor」フォルダを zip 圧縮します。

  2. グローバル リソース グループで [Storage Account] を選択します。

    Select the storage account

  3. 左側のパネルで、[Containers (コンテナ)] を選択し、コンテナの [Uploads] を開きます。次に、こちらの zip ファイルをアップロードします。

    Upload your zip file to the container

  4. ブラウザで [Admin Dashboard] を参照します。左側のナビゲーションから [Settings (設定)] を選択します。

  5. [Add New Version (新しいバージョンの追加)] をクリックし、必要に応じて設定を調整します。[Select blob (ブロブを選択)] を使用して、ストレージ アカウントにアップロードした .zip ファイルを選択します。完了したら、[Add Version (バージョンを追加)] をクリックします。

    Click Add New Version in the Settings

    Add New Version details

  6. Matchmakers サーバーと Signalling サーバーは 30 秒ごとにアップデートの有無を確認し、新しいバージョンがあればオンザフライで再デプロイします。

  7. スケールアップまたはスケールダウンを行うことなく、実行されているインスタンス数を正確に制御したい場合は、[Min Idle Instance Count (アイドル時の最小インスタンス数)]、および [Max Instance Scale Count (スケールの最大インスタンス数)] を同数の希望のインスタンス数に変更します。また、自動スケールを無効にして、代わりに各リージョンの仮想マシン スケール セット (VMSS) の [Scaling (スケール)] ページからインスタンス数を手動で設定することもできます。

認証済みアカウントを追加する

デプロイ時に [Security] タブで [Enable Auth on Signalling Server] が適切に設定されている場合は、ストリームにアクセスできるユーザー アカウントを追加する必要があります。[Admin Dashboard] で、左側のナビゲーションから [Accounts (アカウント)] をクリックし、[Add Account (アカウントの追加)] をクリックします。ユーザーは、アプリにアクセスするために、提供された資格情報を使用する必要があります。

Add an authenticated account

ログをプレビューする

開発での問題のデバッグを支援するために、Matchmakers と Signalling サーバーのアクティビティすべての詳細ログをレビューできます。

  1. グローバル リソース グループで、Log Analytic workspace リソースの名前をクリックします。

    The Log Analytics workspace resource

  2. 左側パネルの [General (一般)] セクションで、[Logs (ログ)] をクリックします。

    Logs option in the General section

  3. 必ずしも関係がない、利用可能なクエリを表示するポップアップ ダイアログが現れます。[Always show Queries (常にクエリを表示)] オプションを切り替え、[X] をクリックして、プロンプトを閉じます。

    Disable the Always Show Queries toggle

  4. 二重矢印アイコンをクリックして、[New Query (新規クエリ)] タブにある [Schema and Filter (スキーマとフィルタ)] パネルを展開します。

    Click the double arrow icon to expand the Schema and Filter panel

  5. [Custom Logs (カスタム ログ)] アイテムの隣にある矢印アイコンをクリックして、展開します。[Custom Logs] にアイテムが表示されない場合は、デプロイメントが何かを記録するほど十分長くアクティブになっていない可能性があるため、数分後に確認してください。

    armlog_newline_CL アイテムをダブルクリックします。これによりアイテムがアクティブ クエリに追加されます。

    The armlog_newline_CL item under Custom Logs

  6. 青の [Run (実行)] ボタンをクリックして、VM ログのクエリを開始します。任意で、時間範囲を調整し、デフォルトの 24 時間以外の値に設定できます。

    Run your query

  7. これにより、デプロイメントで利用可能な VM すべてから利用可能な全ログのテーブルが作成されます。これには大量の詳細情報が含まれます。列をクリックしてデータをソートでき、テーブルの右上にある虫眼鏡アイコンをクリックして、データを検索またはフィルタで選別できます。ここで注目する検索用語は「connected」や「download」です。

    The output of your query of the logs

デプロイ全体を削除する

Pixel Streaming のデプロイを削除して、関連するすべてのコストの課金を停止するには、作成されたリソース グループを削除する必要があります。最初のデプロイ後、サブスクリプションには、少なくとも次の 3 つのリソース グループがあります。各リージョンのリソース グループ (GPU インスタンス用)、ストレージ リソース グループ (初期 .zip ファイル アップロード用)、グローバル リソース グループ (Traffic Manager および管理者ダッシュボード用) です。ストレージ リソース グループは、今後のデプロイに再利用できます。

An example of typical resource groups for a pixel streaming application

デプロイメントで使用するリソース グループには、[Essentials] エリアに RandomString: xyz という タグ があります。このタグをクリックすると、関連リソース グループのみが表示され、複数のグループの移動と削除が簡単にできます。

The Tag in the Essentials area

リソース グループを削除するには、まずリソース グループを開き、上にある [Delete resource group (リソース グループを削除)] ボタンをクリックします。削除操作を確認する必要があります。削除が完全に処理され、サブスクリプションからグループが削除されるまで、数分かかる場合があります。必要に応じて、他のリソース グループでも、この手順を繰り返します。

Delete a resource group

カスタム ドメインを設定した場合は、DNS ゾーンに追加されているレコードも削除する必要があります。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル