PowerShell DSCによるプル型展開(後編):PowerShell DSCで始めるWindowsインフラストラクチャ自動化の基本(1/2 ページ)
Windows OSの設定や構成変更を簡単に、そして確実に行うことができるPowerShell DSC(Desired State Configuration)。今回はプル型の展開方法について解説する。プル型では、展開先のノードが自分自身でDSCサーバーに構成情報を問い合わせて設定を行う。
前回は、PowerShell DSCで任意のConfigurationをノードに対して展開する方法として、プッシュ型の展開方法を紹介した。今回はプル型での展開方法を解説する。
プル型で展開する
本連載における、PowerShell DSCを使った「プッシュ型」と「プル型」の展開方法を図にすると次のようになる。
本記事におけるDSC構成の実行環境
DSCサーバーからノードに対してDSC構成情報を送信するのがプッシュ型、ノード側からDSCサーバーに構成情報を問い合わせて自身の設定を行うのがプル型である。今回はプル型の構成方法を解説する。本記事では、DSCサーバーに対して、プッシュノード1台とプルノード1台の構成を組んでいる。認証簡便化のため、サーバーとノードのAdministratorユーザーは同じパスワードにしている。
前回のプッシュ型の適用を通して、PowerShell DSCのConfigurationの書き方、.mofを使って構成を適用する流れはつかめただろう。続いて今回はプル型で構成を展開していく流れを説明する。
プル型の展開では、各ノードがDSCサーバーに問い合わせることで、ノードが自分自身の設定を行っていく。いつ設定を適用するか主導権を握っているのは各ノードであり、ノードはDSCサーバーに対して「あるべき構成」が変化してないかどうかを定期的に確認する。
プッシュ型ではDSCサーバーは追加の機能をインストールすることなく、プッシュノードに対して構成を適用できた。しかしプル型では、まずDSCサーバーに対して「PSDSCPullServer」と「PSDSCComplianceServer」の構成が必要だ。これは、IISを使ったoDataEndPointで、標準リソースに加えてxPSDesiredStateConfigurationリソースを用いることで構成できる。
早速、DSCサーバーをプルサーバーにする流れを見ていこう。
xPSDesiredStateConfigurationリソースのダウンロードと配置
DSCサーバーをプルサーバーに構成するので、作業はまずプルサーバー上で行う。
プルサーバーにするために利用するxPSDesiredStateConfiguration は、Microsoft TechNetのScriptCenterで公開されている。記事執筆時点では、Ver.3.0.2.0が最新だ。
- xPSDesiredStateConfiguration Module – PowerShell DSC Resource Kit[英語](TechNet ScriptCenter)
このサイトからZIPファイルをダウンロード・解凍して、プルサーバーのモジュールフォルダー「$env:ProgramFiles\WindowsPowerShell\Modules」に配置すれば準備完了だ。
このリソースを配置するモジュールパスは、リソースを参照するために指定されている。ユーザーモジュールフォルダー「$env:UserProfile\Documents\WindowsPowerShell\Modules」やシステムモジュールフォルダー「$env:SystemRoot\System32\WindowsPowerShell\v1.0\Modules」に配置してもリソースが読み込まれないため注意してほしい。
xPSDesiredStateConfigurationの配置
DSC Resourceは、必ず「$env:ProgramFiles\WindowsPowerShell\Modules」に配置する必要がある。ダウンロードしたZIPファイル中にあるxPSDesiredStateConfigurationフォルダーを、「$env:ProgramFiles\WindowsPowerShell\Modules」中にこのように配置すること。
ところで、ここまでの手順(ZIPファイルをダウンロードして展開・配置する手順)は、シンプルにConfiguraionを書いてDSCで実行できる。せっかくなので、DSC自身でダウンロード・展開するようにしておこう。筆者は普段DSCでサーバーの構成を行っており、次のコードもその1つだ。
Configuration DownloadxPSDesiredStateConfiguration
{
param
(
[Parameter(Mandatory=1)]
[String[]]
$DownloadPath,
[Parameter(Mandatory=1)]
[String]
$OutFile,
[Parameter(Mandatory=1)]
[String]
$SourcePath,
[Parameter(Mandatory=0)]
[ValidateNotNullOrEmpty()]
[String]
$ModulePath = "$env:ProgramFiles\WindowsPowerShell\Modules"
)
Node "localhost"
{
File DownloadDirectory
{
DestinationPath = Split-Path $OutFile -Parent
Type = "Directory"
Ensure = "Present"
}
Script Download
{
SetScript = {(New-Object System.Net.WebClient).DownloadFile("$using:DownloadPath", "$using:OutFile")}
TestScript = {Test-Path "$using:OutFile"}
GetScript = {@{OutFile = "$using:OutFile"}}
}
Archive Unzip
{
Path = $OutFile
Destination = $SourcePath
}
File DSCResourceFolder
{
SourcePath = $SourcePath
DestinationPath = $ModulePath
Recurse = $true
Type = "Directory"
Ensure = "Present"
}
}
}
Configurationの各セクションを説明しておく。
- DownloadDirectoryでは、xPSDesiredStateConfigurationリソースをダウンロードするフォルダーを生成している
- Downloadでは、ScriptCenterからリソースをダウンロードしている
- Unzipでは、ダウンロードしたZIPを解凍している
- DSCResourceFolderでは、解凍したリソースをモジュールフォルダーに配置している
このConfigurationは、特定のリソースに縛られないように書いているので、Configurationの実行時に渡す内容によって他のリソースも配置することが可能だ。
では、xPSDesiredStateConfigurationリソースを配置するように.mofを生成しよう。
$param = @{
DownloadPath = "http://gallery.technet.microsoft.com/xPSDesiredStateConfiguratio-417dc71d/file/124065/1/xPSDesiredStateConfiguration_3.0.2.0.zip"
OutFile = "C:\Tools\xPSDesiredStateConfiguration_3.0.zip"
SourcePath = "C:\Tools\xPSDesiredStateConfiguration"
OutPutPath = "c:\DownloadxPSDesiredStateConfiguration"
}
DownloadxPSDesiredStateConfiguration @param
利用するパラメーターは、先頭の$paramハッシュテーブル部分にまとめて記述して見やすくしている。それぞれの意味は次の通りである。
- DownloadPathには、リソースのZIPファイルが置かれているURLを指定する
- OutFileには、ダウンロードしたときのフォルダーとZIPファイル名を指定する
- SourcePathには、ZIPファイルを解凍したときのフォルダー名を指定する
- OutPutPathには、このConfigurationを実行したときに生成される.mofファイルのパスを指定する
xPSDesiredStateConfigurationリソースのバージョンアップに注意
このスクリプトを使うに当たり、一つだけ注意点がある。上の例のDownloadPathでは特定バージョンのxPSDesiredStateConfigurationリソースを指定している。TechNet ScriptCenterでは最新バージョンのファイルのみアクセス可能で過去のファイルにはアクセスできない。DSCリソースは現在も頻繁にバージョンが更新されているため、TechNet ScriptCenterからダウンロードする場合は、指定したバージョンが存在するか確認が必要だ。もし任意のバージョンを利用したい場合は、GitHubなど任意のリポジトリから取得するような運用をするとよいだろう。
Configurationを実行して.mofファイルを生成した結果が次の画面だ。
Start-DSCConfigurationコマンドレットで、DSCサーバー自身にリソースを配置してみよう。
Start-DscConfiguration -Wait -Verbose -Path $param.OutPutPath
実行されている最中のDSCのVerboseメッセージは長いが、3〜4秒で完了するだろう。
DownloadxPSDesiredStateConfigurationの実行
DownloadxPSDesiredStateConfigurationをStart-DSCConfigurationコマンドレットで実行している様子。
配置したリソースの確認
DSCリソースが配置できたら、Get-DSCResouceコマンドレットでリソースを確認しよう。
Get-DscResource
実行結果を見ると、ModuleプロパティにxPSDesiredStateConfigurationと表示されたリソースが確認できるだろう。リソースの配置は以上で完了だ。
Copyright© Digital Advantage Corp. All Rights Reserved.