仮想マシン サービス カタログ テンプレートを使用してアプリケーションをインストールします。
アプリケーション インストール スクリプトでは、次のシナリオがサポートされています。
- RemoteApp アプリのインストールの最も一般的なユース ケースは、Azure Virtual Destop からアクセスできるリモート アプリケーションをデプロイすることです。
- サイバーセキュリティや監視エージェントなどの前提条件をインストールします。
- コンプライアンスまたはアプリケーションのセットアップに関するスクリプト構成の変更。
Note
このサンプルデプロイはデモ目的のものであり、ネットワーク、システム、またはアプリケーションの管理に関するすべてのベスト プラクティスを表すわけではありません。
前提条件
RemoteApp テンプレートでは、アプリケーションのインストールと仮想マシンの構成プロセスを自動化するためのスクリプトがサポートされています。 RemoteApp アプリのインストールの使用を開始する前に、次の機能があることを確認する必要があります。
- コミュニティ、エンクレーブ、ワークロード、および少なくとも 1 つのワークロード リソース グループと、ワークロード リソース グループ内にリソースを作成するためのアクセス許可。
- エンクレーブの
Advancedメンテナンス モードを有効にして、Private Link リソースをエンクレーブマネージド リソース グループに追加できるようにします。 - ストレージ アカウント内のコンテナー (成果物)。
- ストレージ アカウントへの コミュニティ エンドポイント と、必要に応じて既存の AzCopy.exe のコピーへのエンドポイント。
- AzCopy.exe のコピー
- AzCopy をダウンロードします。
- AzCopy インストーラーを、アプリ フォルダーと同じレベルのストレージ アカウントにアップロードします。
- ファイル構造:
- storage account - artifacts container - app folder - azcopy.exe
- 以前に作成したコミュニティ エンドポイントとエンクレーブ サブネット間のエンクレーブ接続。
Note
ストレージ アカウントが別のエンクレーブにある場合は、ストレージ アカウントを使用して エンクレーブ 内にエンクレーブ エンドポイント を作成します。 次に、そのストレージ アカウント エンクレーブ と、アプリケーションをインストールするエンクレーブの間にエンクレーブ接続を作成します。
デプロイされた Azure リソース
- RemoteApp の仮想マシンの例
- Disk
- Windows仮想マシン
- Windows 仮想マシン拡張機能
展開されたソフトウェア
- Windows
- 選択したアプリケーション
Installation
Visual Studio Codeをインストールするようにストレージ アカウントを設定する
- ストレージ アカウント内のコンテナーにアプリ フォルダーを追加します。
- ファイル構造:
- artifacts container - app folder - app installer - main script to install app - (optional) additional scripts - (optional) azcopy.exe
- ファイル構造:
- 必要なアプリケーション インストーラーをダウンロードします。 この例では 、Vscode.exeを ダウンロードし、インストーラーをストレージ アカウント アプリ フォルダーにアップロードします。
- ストレージ アカウント アプリ フォルダーに追加したVisual Studio Codeのバージョンと互換性のある
main.ps1アプリケーション インストーラー スクリプトをアップロードします。# Main powershell script that installs the application Start-Process 'C:/vscode/VSCodeSetup-x64-{version}.exe' -Argument "/VERYSILENT /MERGETASKS=!runcode"
セットアップ テンプレート
- ワークロードの概要ページで、
+Add an Azure Serviceを選択します。
-
Serviceの場合は、[Virtual Machine] を選択します。
リソース グループの選択を確認し、
Nextを選択します[基本] タブ:
-
Virtual Machine nameの場合は、仮想マシンの名前を入力します。 -
Admin usernameとAdmin passwordには、仮想マシンへのログインに使用するユーザー名とパスワードを入力します。
-
[アプリ] タブ:
App folder URIの場合は、コンテナーに URI を入力します。 コンテナー内の成果物を選択し、その URI をコピーし、URI 内のフォルダー名の後 のすべてを削除 します。
元の URI 固定URI https:// <storage-account>.blob.core.windows.net/<container-name>/<folder-name>/<script>.ps1https:// <storage-account>.blob.core.windows.net/<container-name>/<folder-name>例:
- storageaccountexample.blob.core.windows.net/artifacts/vscode
Main Scriptの場合は、アプリケーションをインストールするスクリプトの名前 (例:main.ps1) を入力します。
プライベート コンテナー:
App folder in private containerでは、readerロールによるストレージ アカウントへの仮想マシン経由のアクセスを許可するには、trueを選択します。Storage container resource idでは、<storage-account-resource-id>+ '/blobServices/default/containers/' +<container-name>の 3 つの部分を取得します。-
Storage container resource idを取得するには、ストレージ アカウントから [概要] を選択し、右端にある [JSON ビュー] を選択し、ストレージ アカウントのリソース ID をコピーします。
- コンテナー名には、成果物を保持するプライベート コンテナーの名前をコピーします。
- ストレージ コンテナーのリソース ID の例:
subscriptions/000000a0-a0a0-000a-00a0-0000aaa0a000/resourceGroups/providers/Microsoft.Storage/storageAccounts/storage-account-example/blobServices/default/containers/container-name
-
パラメーター
AzCopy File URIが表示されている場合は、コンテナーから azcopy.exe に URI を追加します。- ファイルを選択し、その URL をコピーします。
プライベート コンテナー パラメーターの例:
-
Review and Createを選択し、検証に合格した場合はCreateを選択します。 - リソースがデプロイされたら、アプリケーション仮想マシンに接続して、アプリケーション仮想マシンにアプリがインストールされているかどうかを確認します。 アプリケーション仮想マシンに接続する
WinGet のインストール
フォルダー構造:
- artifacts container
- WinGet app folder ('winget')
- WinGet installer ('Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle')
- Windows UI Library ('Microsoft.UI.Xaml.2.8.x64.appx')
- main script to schedule install ('main.ps1')
- script to install and schedule reboot('install_winget.ps1')
- ('restart.ps1')
- インストーラーをダウンロードし、ストレージ コンテナー内の winget フォルダーにアップロードする
- WinGet
MSIXバンドル (Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle) - Windows UI ライブラリ (Microsoft.UI.Xaml.2.8.x64.appx)
- WinGet
- スクリプトの作成とアップロード
- main.ps1
# This script creates and runs a scheduled task to install the appx package and msix bundle with elevated privileges $installScriptPath = "C:\winget\install_winget.ps1" # Create a scheduled task action to run the installation script with elevated permissions $taskAction = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "-ExecutionPolicy Bypass -File $installScriptPath" # Set the task to start 30 seconds from now $taskTrigger = New-ScheduledTaskTrigger -Once -At (Get-Date).AddSeconds(30) $taskPrincipal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest # Register the scheduled task Register-ScheduledTask -TaskName "InstallWinget" -Action $taskAction -Trigger $taskTrigger -Principal $taskPrincipal - install_winget.ps1
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass -Force Start-Process -FilePath "DISM.exe" -ArgumentList "/Online /Add-ProvisionedAppxPackage /PackagePath:C:\winget\Microsoft.UI.Xaml.2.8.x64.appx /SkipLicense" -NoNewWindow -Wait Start-Process -FilePath "DISM.exe" -ArgumentList "/Online /Add-ProvisionedAppxPackage /PackagePath:C:\winget\Microsoft.DesktopAppInstaller_8wekyb3d8bbwe.msixbundle /SkipLicense" -NoNewWindow -Wait $wingetDir = 'C:\Program Files\WindowsApps\Microsoft.DesktopAppInstaller_1.23.1791.0_x64__8wekyb3d8bbwe' $currentPath = [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine) [System.Environment]::SetEnvironmentVariable("Path", "$currentPath;$wingetDir", [System.EnvironmentVariableTarget]::Machine) # Schedule the reboot script $rebootScriptPath = "C:\winget\reboot.ps1" $taskAction = New-ScheduledTaskAction -Execute 'powershell.exe' -Argument "-ExecutionPolicy Bypass -File $rebootScriptPath" # Set the task to start 30 seconds from now $taskTrigger = New-ScheduledTaskTrigger -Once -At ((Get-Date).AddSeconds(30)) $taskPrincipal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest # Register the scheduled task Register-ScheduledTask -TaskName "Reboot" -Action $taskAction -Trigger $taskTrigger -Principal $taskPrincipal - restart.ps1
Restart-Computer -Force
- main.ps1
- テンプレートのデプロイに進む