Citrix with AVD 環境にてイメージを自動更新する。

はじめに

 本記事ではCitrix Cloud with AVD環境におけるセッションホストサーバのイメージを自動更新する方法について記載したいと思います。Citrix Cloudにおいてはマスターイメージをもとにマシンカタログを作成し、セッションホストサーバを展開する流れとなり、Citrixの管理画面にてマシンカタログのマシンイメージを更新することも可能です。しかしながら管理画面上での操作ではどうしても手動更新となってしまい運用の負荷がかかる為、なるべく運用の負荷を下げるためにイメージを自動更新する方法について検証しました。

基本方針

 管理画面での操作では自動更新する方法が見当たらない為、CitrixのPowerShellを用いてPowerShellスクリプトを作成し、そのスクリプトを適当なサーバに配置しタスクスケジューラにて自動実行する方針とします。マシンカタログの更新に使用できるAzure上のリソースとしては、管理ディスク、イメージリソース、スナップショットなどが有りますが今回はマスターイメージ用Azure仮想マシンの管理ディスクを使用します。

スクリプトの処理の概要

 今回のスクリプトではCitrixに対する操作は勿論のことですが、Azureのリソースを参照する都合上Azureに対する操作も発生します。そのため、Citrix環境へのログイン処理とAzure環境へのログイン処理が何れも必要となります。この点も踏まえて、スクリプトの処理の流れは概ね以下となります。

・Azure へのログイン処理
・Citrixへのログイン処理
・イメージ更新に使用する管理ディスクリソースの取得
・更新対象となるマシンカタログの取得
・イメージ更新処理の実行

 

前提条件

 本記事においてはCitrix Cloud with AVD環境の構築が完了していることを前提とします。

 

事前準備

 スクリプト作成前に以下の事前準備作業が必要となります。
・Azure ログイン用のサービスプリンシパルの作成
・Citrix ログイン用のAPIの作成と認証情報の保存
・スクリプト実行用サーバにCitrix SDKをインストール
・スクリプト実行用サーバにAzure PowerShell Moduleをインストール

 それぞれの準備作業について見ていきます。

①Azure ログイン用のサービスプリンシパルの作成

 Azure サブスクリプションが関連付けられているAzure ADにてサービスプリンシパルを作成します。今回はAzureログイン用にサービスプリンシパルを使用しますが、勿論Azureログインに関してはその他の方法で実装しても問題ございません。

・Azure Portalにログインし、Azure ADの画面を開きます。


・「アプリの登録」をクリックします。


・「新規登録」をクリックします。


・「名前」に任意の名前を入力し、「登録」をクリックします。


・後程スクリプト作成時に使用するので、「アプリケーションID」と「テナントID」を控えます。その後、「証明書とシークレット」をクリックします。


・「新しいクライアントシークレット」をクリックします。


・「説明」および「有効期限」を任意で設定し、「追加」をクリックします。


・後程スクリプト作成時に使用するので作成したクライアントシークレットの「値」を控えます。


 

②Citrix ログイン用のAPIの作成と認証情報の保存

・Citrixログイン用にAPIアクセスを作成します。Citrixの管理ポータルにログインし、「IDおよびアクセス管理」を開き「APIアクセス」をクリックします。


・「セキュアクライアントの名前を入力」に任意の名前を入力し、「クライアントの作成」をクリックします。


・「ダウンロード」をクリックします。


・「secureclient.csv」というファイルがダウンロードされます。後程スクリプトを作成する際に使用するので控えておきます。


 

③スクリプト実行用サーバにCitrix SDKをインストール

 スクリプト実行用サーバにてCitrixのPowerShellコマンドレットを使用できるようにする必要が有ります。そのためCitrixのSDKをインストール必要が有ります。その手順については以下のCitrix社の公式サイトに詳しい記載が有りますのでこちらを参考に対応します。本記事では詳細な手順については割愛いたしますが、基本的にダウンロードページから「Virtual Apps and Desktops Remote PowerShell SDK」をダウンロードして実行すればインストールは完了します。
https://docs.citrix.com/ja-jp/citrix-daas/sdk-api.html


 

④スクリプト実行用サーバにAzure PowerShell Moduleをインストール

 次にスクリプト実行用サーバでAzure のPowerShell コマンドレットを使用する為、Azure PowerShellのModuleをインストールします。この手順については詳細はマイクロソフト社の公式ページを参照することとして、本記事では詳細な手順は割愛します。
https://docs.microsoft.com/ja-jp/powershell/azure/install-az-ps?view=azps-6.6.0


 

スクリプト作成

 事前準備が整いましたら、PowerShellスクリプトを準備します。

①Azure へのログイン処理

 Azureへのログイン処理については以下のスクリプトで実現できます。

#Azureログイン情報
$clientid = “先程作成したサービスプリンシパルのアプリケーションIDを指定”
$tenantid = “Azure AD のテナントIDを指定”
$password = “先程作成したクライアントシークレットの「値」を指定”

#認証キャッシュのクリア
Clear-AzContext -Force

#認証情報の構築
$securepassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($clientid, $securepassword)

#Azure へ接続
Connect-AzAccount -ServicePrincipal -Credential $credential -Tenant $tenantid


 

②Citrixへのログイン処理

 先程ダウンロードした「secureclient.csv」ファイルをログイン処理において使用するので、スクリプト実行用サーバの任意の場所(本手順では「C:\ScriptFiles」)に保存します。そのうえで、Citrixへのログイン処理については以下のスクリプトで実現できます。

#Citrixログイン
Set-XDCredentials -SecureClientFile C:\ScriptFiles\secureclient.csv -CustomerId <Citrixの顧客ID> -ProfileType CloudAPI –StoreAs “prod”
Get-XDAuthentication –ProfileName “prod”
Add-PSSnapin Citrix*

※Citrixの顧客IDはCitrix管理画面の「IDおよびアクセス管理」の以下箇所にて確認可能です。


 

③イメージ更新に使用する管理ディスクリソースの取得

 イメージ更新に使用する管理ディスクリソースに関するAzureの各種パラメータを設定し、ディスクを取得します。ディスクの取得自体は「Get-AzDisk」コマンドレットを使用します。

#OSDiskを指定
$ResourceGroupName = “ディスクリソースが存在するリソースグループ名”
$LocationName = “ディスクリソースのリージョン(例:Japaneast)”
$BaseDiskName = “ディスクリソースのディスク名”
$newdisk = Get-AzDisk -ResourceGroupName $ResourceGroupName -DiskName $BaseDiskName


 

④更新対象となるマシンカタログの取得

 Citrixの各種パラメータを設定し、更新対象となるマシンカタログを取得します。マシンカタログの取得自体は「Get-ProvScheme」コマンドレットを使用します。

#マシン更新の準備
$ResourceGroup = “Citrix管理ポータル上のリソースグループ名”
$MCName = “更新対象のマシンカタログ名”
$AzureNetworkName = “Citrix管理ポータル上のネットワーク名”
$Diskname = $newdisk.Name
$MasterImage = “XDHyp:\HostingUnits\$AzureNetworkName\image.folder\$ResourceGroup.resourcegroup\$Diskname.manageddisk”
Set-ProvSchemeMetadata -Name “ImageManagementPrep_DoImagePreparation” -ProvisioningSchemeName $MCName -Value “True”
$ProvScheme = Get-ProvScheme -ProvisioningSchemeName $MCName

※注意点としてここで指定するリソースグループ名やネットワーク名はAzureでの名称ではなくCitrixでの名称を使用するということです。万が一Azureでの名称とは異なる名称をCitrixで使用している場合は誤った名称を記載しないようにしましょう。具体的にはCitrix管理画面の「ホスト」の以下箇所にて確認することができます。


 

⑤イメージ更新処理の実行

 以上で準備が整いましたので最後に「Publish-ProvMasterVMImage 」コマンドレットにてイメージを更新します。

#更新
Publish-ProvMasterVMImage -MasterImageVM $MasterImage -ProvisioningSchemeName $MCName

スクリプトまとめ

改めて各種パラメータには仮の値を入力したスクリプト全体を以下に記載します。

#Azureログイン情報
$clientid = “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”
$tenantid = “XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX”
$password = “XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX”

#認証キャッシュのクリア
Clear-AzContext -Force

#認証情報の構築
$securepassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential($clientid, $securepassword)

#Azure へ接続
Connect-AzAccount -ServicePrincipal -Credential $credential -Tenant $tenantid

#Citrixログイン
Set-XDCredentials -SecureClientFile C:\ScriptFiles\secureclient.csv -CustomerId XXXXXXXXXXXX -ProfileType CloudAPI –StoreAs “prod”
Get-XDAuthentication –ProfileName “prod”
Add-PSSnapin Citrix*

#OSDiskを指定
$ResourceGroupName = “AVD-RG”
$LocationName = “Japaneast”
$BaseDiskName = “avdvm001-osdisk”
$newdisk = Get-AzDisk -ResourceGroupName $ResourceGroupName -DiskName $BaseDiskName

#マシン更新の準備
$ResourceGroup = “AVD-RG” 
$MCName = “mc-avd-01”
$AzureNetworkName = “AVD-Vnet”
$Diskname = $newdisk.Name
$MasterImage = “XDHyp:\HostingUnits\$AzureNetworkName\image.folder\$ResourceGroup.resourcegroup\$Diskname.manageddisk”

Set-ProvSchemeMetadata -Name “ImageManagementPrep_DoImagePreparation” -ProvisioningSchemeName $MCName -Value “True”
$ProvScheme = Get-ProvScheme -ProvisioningSchemeName $MCName

#更新
Publish-ProvMasterVMImage -MasterImageVM $MasterImage -ProvisioningSchemeName $MCName

最後に

 以上、Citrix Cloud with AVDにおけるイメージの自動更新方法について記載致しました。この内容がCitrix環境に管理の負荷軽減に少しでも役立てば幸いです。

いいね (この記事が参考になった人の数:1)
(↑参考になった場合はハートマークを押して評価お願いします)
読み込み中...

注意事項・免責事項

※技術情報につきましては投稿日時点の情報となります。投稿日以降に仕様等が変更されていることがありますのでご了承ください。

※公式な技術情報の紹介の他、当社による検証結果および経験に基づく独自の見解が含まれている場合がございます。

※これらの技術情報によって被ったいかなる損害についても、当社は一切責任を負わないものといたします。十分な確認・検証の上、ご活用お願いたします。

※当サイトはマイクロソフト社によるサポートページではございません。パーソルプロセス&テクノロジー株式会社が運営しているサイトのため、マイクロソフト社によるサポートを希望される方は適切な問い合わせ先にご確認ください。
 【重要】マイクロソフト社のサポートをお求めの方は、問い合わせ窓口をご確認ください