この記事は前回の続きです。前回の記事を未読の方は前回の記事から読んでいただくことを推奨します!
ゲスト構成用パッケージを作成する
前回までで動作確認できてますのでゲスト構成用パッケージを作成していきます。
まず、ゲスト構成用のモジュールをインストールします。
Install-Module -Name GuestConfiguration
次に、ゲスト構成パッケージを作成します。
New-GuestConfigurationPackage `
-Name 'OpsRampAgentInstall' `
-Configuration './InstallOpsRampClient/localhost.mof' `
-Type AuditAndSet `
-Force
作成に成功するとZipファイルが生成されます。
念のため、作成した構成パッケージが要件を正しく満たしていることを検証します。
Get-GuestConfigurationPackageComplianceStatus -Path .\OpsRampAgentInstall\OpsRampAgentInstall.zip
complianceStatusがTrueとなっていればOKです。
構成のテストも下記のコマンドで可能です。
Start-GuestConfigurationPackageRemediation -Path .\OpsRampAgentInstall\OpsRampAgentInstall.zip
構成パッケージの公開
構成パッケージを公開します。推奨の保存先はAzue Blob Storageですので、インストーラー自体を保存しているBlob Storageに対して発行します。
-StorageContainerNameというオプションがありますが、省略するとguestconfigurationというコンテナに発行されます。あらかじめguestconfigurationという名前のコンテナを作成しておいてからコマンドレットを実行します。
Publish-GuestConfigurationPackage -Path .\OpsRampAgentInstall\OpsRampAgentInstall.zip -ResourceGroupName OpsRampManagement -StorageAccountName opsrampmanagementst | % ContentUri

これで、パッケージの公開ができました。
Azure Policyの定義を作成して公開する
次にAzure Policyの定義を作成します。
New-GuestConfigurationPolicy `
-PolicyId 'OpsRampAgentInstallWindows' `
-ContentUri 'ここには前のコマンドの結果出力されたURLを張り付けます' `
-DisplayName 'OpsRamp Agent Install for Windows' `
-Description 'Install OpsRamp Agent to Windows Server' `
-Path './policies' `
-Platform 'Windows' `
-Version 1.0.0 `
-Mode 'ApplyAndAutoCorrect'
-Verbose
Policyを公開します。
Publish-GuestConfigurationPolicy -Path '.\policies'
きちんとAzureポータル上でも確認できる状態になりました。

ここまでで、Azure Policyを作成することができました。
今回は理解のために1ステップづつやりましたが、実際にはバージョン管理のことも考えて、下記のようにやってしまうのがよさそうです。下記のようになります。(※読んでわかる人向けです)
$version = '1.0.0'
$ConfigName = "OpsRampAgentInstall_$version"
$MofPath = '.\localhost.mof'
$ResourceGroupName = 'OpsRampManagement'
$StorageAccountName = 'opsrampmanagementst'
$DisplayName = 'OpsRamp Agent Install for Windows'
$Description = 'Install OpsRamp Agent to Windows Server'
$policyId = "OpsRampAgentInstallWindows_$version"
$platform = 'Windows'
$mode = 'ApplyAndAutoCorrect'
InstallOpsRampClient -OutputPath:(Get-Location)
$contenturi = New-GuestConfigurationPackage -Name $ConfigName -Configuration $MofPath -Path ./package/ -Type AuditAndSet -Force |
Publish-GuestConfigurationPackage -ResourceGroupName $ResourceGroupName -StorageAccountName $StorageAccountName -Force | ForEach-Object ContentUri
Start-Sleep 60
New-GuestConfigurationPolicy -PolicyId $policyId -DisplayName $DisplayName -Description $Description -Path './policies' -Platform $platform -Version $version -Mode $mode -ContentUri $contenturi|
Publish-GuestConfigurationPolicy
さて、次回は実際にポリシーを割り当てて既存VMの適用状況を確認していきたいと思います!