PowerShell DSCによるプッシュ型展開(中編):PowerShell DSCで始めるWindowsインフラストラクチャ自動化の基本(2/2 ページ)
Windows OSの設定や構成変更を簡単に、そして確実に行うことができるPowerShell DSC(Desired State Configuration)。今回はDSC Local Configuration Managerの概要とプッシュ型の展開方法について解説する。
LCMを通して、DSCが適用される流れがおおよそつかめたところで、Windows Server 2012 R2に標準で含まれているビルトインリソースでプッシュ型による展開を試してみよう(プル型については次回解説する)。
プッシュ型で展開させる
DSCを初めて触る人にとって容易に試せるのはプッシュ型だ。なぜならプッシュ型はプル型よりもシンプルで、IISのセットアップなど依存する要素がほとんどないからだ。
さっそく前回の「DSCの環境構築」で説明した設定(WinRMの有効化)を行ったDSCサーバーで、プッシュ型の展開を試してみよう。
まず、DSCサーバー自身へプッシュ型で あるべき構成 を展開し、続いてプッシュノード(10.0.2.12)へ構成を適用してみよう。
Configurationを記述する
まずはPowerShell ISEを起動してConfigurationを記述する。PowerShell ISE(powerShell_ise.exe)は、Windows PowerShell(powershell.exe)を管理者モードで起動した状態で「ise」と入力すれば起動できる。
DSCで構成を書くときに用いるConfiguration構文に関しては、以下のサイトで詳細を説明しているので参照してほしい。
まずは一番簡単な構成として、Fileリソースを使ってDSCサーバー自身で C: ドライブのルートフォルダーに「Hello PowerShell DSC World!!」と書かれたテキストファイルを作成させてみる。作成するファイル名は「C:\HelloDSCFile.txt」とする。
Configuration HelloPowerShellDSC
{
Node "localhost"
{
File HelloDSCFile
{
DestinationPath = "C:\HelloDSCFile.txt"
Ensure = "Present"
Type = "File"
Contents = "Hello PowerShell DSC World!!"
}
}
}
構成ファイル.mofの生成
それでは、HelloPowerShellDSC Configurationを実行して、C:\HelloPowerShellDSCフォルダーに.mofファイルを生成させてみよう。
$outputPath = "C:\HelloPowerShellDSC"
HelloPowerShellDSC -OutputPath $outputPath
ここまで書けたらPowerShell ISEで[F5]キーを押す。するとスクリプトが実行され、「C:\HelloPowerShellDSC」フォルダーに、ノードに指定した「localhost」という名前の.mofファイル(localhost.mof)が出力される。
構成ファイルをプッシュ型で適用する
次は、生成した.mofファイルをプッシュ型で適用してみよう。
プッシュ型で適用に使うのが、Start-DSCConfigurationコマンドレットだ。このコマンドレットの-Pathパラメーターに.mofを生成したフォルダーを指定すると、フォルダーの中にある.mofファイル名のノードに対してサーバーから接続し、適用を試みる。
Start-DscConfiguration -Path $outputPath -Wait -Verbose
ここでは-Waitと-Verboseスイッチを使っている。-Waitスイッチで、Start-DSCConfigurationコマンドレットの実行完了まで次の行に進まないことを指示している。-Verboseスイッチを使うと、ノードに対して構成が適用される詳細ログが表示される。この2つを付けると進捗状況が確認できるので、プッシュで適用する際に便利である。
構成結果の確認
次に あるべき構成 がノードに反映されているか、LCMを介して確認してみよう。現在適用されているDSC Configurationを確認するにはGet-DSCConfigurationを実行する。
Get-DscConfiguration
実行結果を見ると、Configurationで指定した通りに設定されていることが分かる。
「Hello PowerShell DSC World!」と書かれたファイルが存在していることが確認できる。
作成されたファイルの確認
「Hello PowerShell DSC Word!!」と書かれたファイルがC:\HelloDSCFileに存在する。
(1)このファイルが生成された。
(2)ファイルの内容。
冪等性の確認
前回、DSCでは「冪等性(べきとうせい。何度適用しても結果が同じになること)」が担保されていると説明した。では、現在あるべき状態と相違がない「指定したファイルが存在している」状態で、もう1回Start-DSCConfigurationで適用したらどうなるだろうか。再度Start-DSCCofigurationを実行してみよう。
Start-DscConfiguration -Path $outputPath -Wait -Verbose
実行すると、 [開始 テスト] にて、「[[File]HelloDSCFile] 宛先オブジェクトが見つかったため、何もする必要はありません。」と表示されている。また、直後に「[ スキップ 設定 ] [[File]HelloDSCFile]」と表示され、設定がスキップされていることが分かる。
もちろんファイルのタイムスタンプも更新されておらず、あるべき状態であるため何も適用されなかった。
プッシュノードへの適用
続いて、localhos(DSCサーバー自身)tだけでなく、プッシュノード(10.0.2.12)に対しても同じConfigurationを実行してみよう。
先ほどのConfigurationでは対象ノードをlocalhostに決め打ちしていたが、これをConfigurationの実行時にノードを渡せるようにする。
Configuration HelloPowerShellDSC
{
param
(
[string[]]$nodeName
)
Node $nodeName
{
File HelloDSCFile
{
DestinationPath = "C:\HelloDSCFile.txt"
Ensure = "Present"
Type = "File"
Contents = "Hello PowerShell DSC World!!"
}
}
}
冒頭にparamブロックを追加し、Nodeブロックの定義を「Node "localhost" 〜」から「Node $nodeName 〜」に変更している。paramブロックを使うと、Configurationの実行時に外部から値を渡すことができる。今回は、Stringの配列型である「[string[]]」を$nodeNameに指定した。
プッシュノード(10.0.2.12)を指定して.mofファイルを出力し、Start-DSCConfigurationでプッシュノードに構成を適用してみよう。
$outputPath = "C:\HelloPowerShellDSC"
HelloPowerShellDSC -OutputPath $outputPath -nodeName 10.0.2.12
Start-DscConfiguration -Path $outputPath -Wait -Verbose
「localhost.mof」と「10.0.2.12.mof」の2つのファイルが、.mofファイルの出力先に指定した「C:\HelloPowerShellDSC」フォルダーに存在していたので、両方のノードに対して構成が適用された。Start-DSCConfigurationの実行前にlocalhost.mofを消しておけば、実行される対象は10.0.2.12.mofの1台だけになる。
2台に対して構成を実行する
C:\HelloPowerShellDSCフォルダーに存在したlocalhost.mofと10.0.2.12.mofに基づき、2台に対してあるべき状態を構成している様子。
(1)1台目に適用する。
(2)2台目はスキップされている。
Get-DSCConfigurationを使ってプッシュノード(上の画面ではWIN-PP6AC5GVO22)が、あるべき状態に構成されたことを確認する。
$CimSession = New-CimSession -ComputerName 10.0.2.12
Get-DscConfiguration -CimSession $CimSession
プッシュノード(10.0.2.12)を見ても、あるべき状態に構成されている。
今回はPowerShell DSCによるConfiguration適用の概要と、プッシュ型で構成を適用する方法を紹介した。最終回の後編はプル型で構成を適用する方法を解説する。
Copyright© Digital Advantage Corp. All Rights Reserved.