Azure Image Builder(AIB)とは、マスターイメージを作成するためのインストール作業を全自動化するサービスです。マスターイメージを作成/更新する際には、OSアップデートや各種アプリケーションのインストール作業が発生します。このような時間のかかるインストール作業を自動で行ってくれる便利なサービスです。※AIBは、Packerを利用しています。
【サポートOS】
Azure MarketplaceでサポートされているOS
【イメージ出力形式】
・共有イメージギャラリー
・マネージドイメージ
・VHD ※ストレージアカウントの指定は不可
【Image Builder を設定するための流れ】
①②マネージドIDの適用先と権限を絞るために、リソースグループとカスタムロールを作成します。
③マネージドIDに対して、カスタムロールとリソースグループを割り当てます。
④出力先として指定するため、先にイメージ定義を作成しておきます。
⑤イメージテンプレートを作成するためのJSONを作成します。
ー作成に必要な権限(マネージドID)
ー出力先(共有イメージギャラリー)
ーインストールに必要なスクリプト
⑥イメージテンプレートから、イメージバージョンを作成します。
⑦イメージバージョンから仮想マシンを作成します。
※Azure FilesやANF上のファイルを実行したい場合、プライベートエンドポイントにて既存の仮想ネットワークと接続します。
※補足記事「マスターイメージ管理サービス! 共有イメージギャラリー を試す!」
全体の流れ
Step1:リソースグループの作成 (Image Builder専用)
Step2:カスタムロールの作成
Step3:マネージドIDの作成
Step4:イメージ定義 (共有イメージギャラリー)
Step5:JSON (イメージテンプレート作成用)
Step6:イメージテンプレート
※イメージ出力先として「共有イメージギャラリー」を選択しております。
Step1:リソースグループの作成
サブスクリプション:Azureサービスの提供範囲
リソースグループ:表示名
リージョン:※AIBがサポートしているリージョンを選択
Step2:カスタムロールの作成
[サブスクリプション]ー[アクセス制御]ー[+追加]ー[カスタムロールの追加]を選択
カスタムロール名:表示名
説明:コメントを記載
ベースラインのアクセス許可:
ロールを複製します=既存ロールをベースにして作成
最初から始める=ベース無しで作成
JSONから開始=JSONファイルをアップロードして作成
※「アクセス許可」は変更なし
Step1で作成したリソースグループを選択
“actions”項目に下記を追加します。
“Microsoft.Compute/galleries/read”,
“Microsoft.Compute/galleries/images/read”,
“Microsoft.Compute/galleries/images/versions/read”,
“Microsoft.Compute/galleries/images/versions/write”,
“Microsoft.Compute/images/read”,
“Microsoft.Compute/images/write”,
“Microsoft.Compute/images/delete”
最後に確認
Step3:マネージドIDの作成
[検索:managedid]ー[マネージドID]を選択
サブスクリプション:Azureサービスの提供範囲
リソースグループ:※Step1で作成したものを選択
リージョン:※AIBがサポートしているリージョンを選択
Name:表示名
作成したマネージドIDを選択ー[Azureロールの割り当て]ー[ロールの割り当ての追加]を選択
スコープ:※リソースグループを選択
サブスクリプション:
リソースグループ:※Step1で作成したリソースグループを選択
役割:※Step2で作成したカスタムロールを選択
マネージドIDに対して、適用先と権限の付与が完了しました。
マネージドIDの適用が確認できます。
Step4:イメージ定義 (共有イメージギャラリー)
※「共有イメージギャラリー」と「イメージ定義」を作成します。
【共有イメージギャラリー】の作成
サブスクリプション:Azureサービスの提供範囲
リソースグループ:※Step1で作成したものを選択
名前:表示名
リージョン:デプロイするAzureのリージョン
説明:メモ
【イメージ定義】の作成
サブスクリプション:Azureサービスの提供範囲
リソースグループ:※Step1で作成したものを選択
地域:デプロイするAzureのリージョン
ターゲットShared Image Gallery:※本イメージ定義が保存される場所
イメージの定義名:表示名
オペーレーティング システム:※ソースイメージの選択に影響
VMの生成:※ソースイメージの選択に影響
オペーレーティング システムの状態:※”一般化”を選択
発行元:※会社名/組織名 など
オファー:※Windows10_Enterprise_multi-session_Version2004 など
SKU:※利用用途 など
※「バージョン」「発行のオプション」はスルー
Step5:JSON (イメージテンプレート作成用)
Docs記載のテンプレートを利用しております。
※指定のOS展開→FSLogix→OS最適化→Teams→Windows Updateを実行します。
※Cloud Shellにて実施。赤字は適宜書き換えて下さい。
PS /home/taushiga> vi AIB_ImageTemplate.json ※下記をペースト
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"imageTemplateName": {
"type": "string"
},
"api-version": {
"type": "string"
},
"svclocation": {
"type": "string"
}
},
"variables": {
},
"resources": [
{
"name": "[parameters('imageTemplateName')]",
"type": "Microsoft.VirtualMachineImages/imageTemplates",
"apiVersion": "[parameters('api-version')]",
"location": "[parameters('svclocation')]",
"dependsOn": [],
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"<マネージドIDのリソースIDをペースト>": {}
}
},
"properties": {
"buildTimeoutInMinutes" : 120,
"vmProfile":
{
"vmSize": "Standard_B2ms",
"osDiskSizeGB": 127
},
"source": {
"type": "PlatformImage",
"publisher": "MicrosoftWindowsDesktop",
"offer": "windows-10",
"sku": "21h1-evd",
"version": "latest"
},
"customize": [
{
"type": "PowerShell",
"name": "installFsLogix",
"runElevated": true,
"runAsSystem": true,
"scriptUri": "https://raw.githubusercontent.com/danielsollondon/azvmimagebuilder/master/solutions/14_Building_Images_WVD/0_installConfFsLogix.ps1"
},
{
"type": "PowerShell",
"name": "OptimizeOS",
"runElevated": true,
"runAsSystem": true,
"scriptUri": "https://raw.githubusercontent.com/danielsollondon/azvmimagebuilder/master/solutions/14_Building_Images_WVD/1_Optimize_OS_for_WVD.ps1"
},
{
"type": "WindowsRestart",
"restartCheckCommand": "write-host 'restarting post Optimizations'",
"restartTimeout": "5m"
},
{
"type": "PowerShell",
"name": "Install Teams",
"runElevated": true,
"runAsSystem": true,
"scriptUri": "https://raw.githubusercontent.com/danielsollondon/azvmimagebuilder/master/solutions/14_Building_Images_WVD/2_installTeams.ps1"
},
{
"type": "WindowsRestart",
"restartCheckCommand": "write-host 'restarting post Teams Install'",
"restartTimeout": "5m"
},
{
"type": "WindowsUpdate",
"searchCriteria": "IsInstalled=0",
"filters": [
"exclude:$_.Title -like '*Preview*'",
"include:$true"
],
"updateLimit": 40
}
],
"distribute":
[
{
"type": "SharedImage",
"galleryImageId": "<イメージ定義のリソースIDをペースト>/versions/1.0.0",
"runOutputName": "sigOutput",
"replicationRegions": [
"japaneast",
"japanwest"
],
"storageAccountType": "Standard_LRS",
"excludeFromLatest": true
}
]
}
}
]
}
PS /home/taushiga> New-AzResourceGroupDeployment -ResourceGroupName “ImageBuilder“ -TemplateFile AIB_ImageTemplate.json -api-version “2020-02-14” -imageTemplateName “AVD_ImageTemplate01” -svclocation “westus2“
※イメージテンプレートを作成
イメージテンプレートの作成が確認できます。
同時にリソースグループとストレージアカウントが作成される。
※イメージテンプレートで指定したスクリプト,ビルド時のログ,VHDが格納される
Step6:イメージテンプレート
[ビルドの開始]を選択すると、イメージバージョンが作成される。
※JSONビューからテンプレートの内容を確認できる
インストールするアプリによりますが、約90分ほどかかります。
リソースが一時的に作成されます。 ※NSG(in 52.161.20.89:5986) WinRM
完了です!
イメージバージョンの作成が確認できます。
共有イメージギャラリーから、AVD SessionHostを作成する
イメージの種類:ギャラリー
イメージ:すべてのイメージとディスクを参照する
[マイアイテム]ー[共有イメージ]を選択
※作成したイメージバージョンが表示されます。
お疲れ様でした~!