はじめに
Azure Virtual Desktop(AVD)において、OSイメージとアプリケーションを分離して管理するために、MSIX app attachという技術があります。
実装の手順は、公式ガイドであるDocsや日本マイクロソフトのサポートのGitHubページ、また牛上さんのページなどがあります。
ここでは、システムとして実装するために、自己証明書は使わないAVDリファレンスアーキテクチャを活用します。
前提
手順
作業用VMの展開
- spoke-twoなどのVNetに、セッションホストと同じOSのVMを作成
- ドメイン参加
- 以後、管理者で作業
注意点: 再接続するとローカルになる。FSLogixのグループポリシーが効いてしまうと証明書作成が失敗するのでその場合は適用しないようにすること。
証明書テンプレートにコード署名を追加
PDCのVMの中で下記作業します。
- Server ManagerのToolsメニューからCertification Authorityを起動
- Certificate Templatesフォルダを右クリックして、Certificate Template for Issueを選択
- Code Signingを追加
署名用鍵を作成
作業用VMで操作します。
- MMCを起動して、ファイルメニューから証明書スナップインを追加
- 新しい証明書の要求を選択して、Active Directory登録ポリシーを選択 (出ないときはADユーザーでログインできていないかもしれません)
- コード署名にチェックをして、プロパティから、秘密鍵をクスポート可能に設定
- 作成した証明書を秘密鍵とともにエクスポート
MSIX Packaging Toolを準備
作業用VM内に、MSIX Packaging Toolをインストールします。
Azure Firewall PremiumでInternetへのアクセスを閉じている場合は、アプリケーションルールに、Webカテゴリのコンピュータとテクノロジを、施業用VMからアクセスできるように追加しておきます。
アプリケーションのパッケージ化
ここではVisual Studio Codeを利用します。
ここから、システムインストーラーを作業用VM内にダウンロードしておきます。
牛上さんのブログのStep 3そのままですので、そちらを参照してもよいです。
- MSIX Packaging Toolを起動して、一番左のApplication packageを選択
- 最初のCreate package on this computerを選択
- Windows Searchを無効化
- Visual Studio Codeのシステムインストーラーを指定、エクスポートした秘密鍵付きの証明書を指定
- Visual Studio Codeのパッケージ情報を指定
- Visual Studio Codeをインストール
- Visual Studio Codeのアップデートを無効化
- MSIX Packaging Toolのウィザードをそのまま実施してパッケージを作成
MSIXMGRツールの準備
ほぼ、CSSのページと同様の作業になります。
- MSIX mgr toolを作業用VMにダウンロード
- Zipファイルを展開して、x64フォルダを
C:\MSIXappattach
として移動 - 作成したMSIXパッケージを
C:\MSIXappattach
に移動
VHD化
パッケージを配信するために、VHDファイルにまとめます。
VHDを操作するコマンドレットのために、最初のみHyper-Vを作業用VMにセットします。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
VHDファイルにパッケージを展開します。
VHDファイルを作成
New-VHD -SizeBytes 1024MB -Path c:\MSIXappattach\VSCode_1.58.0.0_x64.vhdx -Dynamic -Confirm:$false
マウント
$vhdObject = Mount-VHD c:\MSIXappattach\VSCode_1.58.0.0_x64.vhdx -Passthru
初期化、パーティションの作成、フォーマット
Exploreからフォーマットを促す画面が出ますが、キャンセル
$disk = Initialize-Disk -Passthru -Number $vhdObject.Number
$partition = New-Partition -AssignDriveLetter -UseMaximumSize -DiskNumber $disk.Number
Format-Volume -FileSystem NTFS -Confirm:$false -DriveLetter $partition.DriveLetter -Force
フォルダを作成して、パッケージを展開
New-Item F:\VSCode -ItemType Directory
cd C:\MSIXappattach
.\msixmgr.exe -Unpack -packagePath .\VSCode_1.58.0.0_x64__f0yfp0x2dcyvj.msix -destination "F:\VSCode" -applyacls
$vhdObject = Dismount-VHD C:\MSIXappattach\VSCode_1.58.0.0_x64.vhdx -Passthru
VHDファイルをファイルサーバーに配置
Azure Filesの共有をマウント
# Azure Filesのストレージ名
$StorageAccountName = "takeokast"
# 異なる名前で共有名を設定している場合は置き換える必要あり
$share_name = "avdfileshare"
# Azure Portalで、ストレージアカウントのアクセスキーを確認し置き換える必要あり
# パスワードにはADのポリシーにより有効期限がある場合があり、https://docs.microsoft.com/ja-jp/azure/storage/files/storage-files-identity-ad-ds-update-passwordを事前に参照して運用を検討する必要あり
$st_key = "access_key"
# ローカルでマウントするドライブレター
$mount_drv = "Z"
$unc_path = "\\" + $StorageAccountName + ".file.core.windows.net\" + $share_name
$net_account = "Azure\" + $StorageAccountName
$securePass = ConvertTo-SecureString $st_key -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential $net_account, $securePass
New-PSDrive -Name $mount_drv -PSProvider FileSystem -Root $unc_path -Credential $cred
コピー
$folder_path = $mount_drv + ':\' +'MSIX'
copy .\VSCode_1.58.0.0_x64.vhdx $folder_path
アンマウント
Remove-PSDrive -Name $mount_drv
セッションホストからのAzure Filesアクセス権設定
セッションホストに必要なファイル共有へのアクセス権限を設定します。
AVDのリファレンスアーキテクチャを利用する場合、セッションホストのコンピュータオブジェクトをAZF FSLogix Contributor
に追加することで、必要な権限が与えられます。
この作業は、PDC VMの中で、セッションホストのコンピュータオブジェクトを選択してグループに追加すると簡単にできます。
MSIXパッケージをホストプールに追加
AVDのホストプールから、コピーしたMSIXイメージをUNCパスで指定し、表示名を設定して、アクティブに設定します。
アプリケーショングループ作成
デスクトップにも配信できますが、Remote Appとして設定してみます。
この後は、ユーザー、ワークスペースの割り当てを行います。
利用確認
起動すると見た目にはローカルで起動したのと変わりありませんが、タスクバーのアイコンがリモートデスクトップ接続であることを示しています。