連載
» 2014年07月24日 18時03分 UPDATE

PowerShell DSCで始めるWindowsインフラストラクチャ自動化の基本:PowerShell DSCによるプッシュ型展開(中編) (2/2)

[吉崎生、http://tech.guitarrapc.com/,著]
前のページへ 1|2       

 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」と入力すれば起動できる。

PowerShellのISEを起動する PowerShellのISEを起動する
PowerShellで「ise」と入力すると、PowerShell 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ファイル
出力された.mofファイル 出力された.mofファイル
Configurationが実行されて、C:\HelloPowerShellDSCフォルダーに「localhost.mof」という名前のファイルが出力された。

構成ファイルをプッシュ型で適用する

 次は、生成した.mofファイルをプッシュ型で適用してみよう。

 プッシュ型で適用に使うのが、Start-DSCConfigurationコマンドレットだ。このコマンドレットの-Pathパラメーターに.mofを生成したフォルダーを指定すると、フォルダーの中にある.mofファイル名のノードに対してサーバーから接続し、適用を試みる。

Start-DscConfiguration -Path $outputPath -Wait -Verbose 



 ここでは-Waitと-Verboseスイッチを使っている。-Waitスイッチで、Start-DSCConfigurationコマンドレットの実行完了まで次の行に進まないことを指示している。-Verboseスイッチを使うと、ノードに対して構成が適用される詳細ログが表示される。この2つを付けると進捗状況が確認できるので、プッシュで適用する際に便利である。

構成の適用状況の表示 構成の適用状況の表示
.mofファイルに従って、localhostに対してConfigurationで指示した状態を構成(適用)している様子。

構成結果の確認

 次に あるべき構成 がノードに反映されているか、LCMを介して確認してみよう。現在適用されているDSC Configurationを確認するにはGet-DSCConfigurationを実行する。

Get-DscConfiguration 



 実行結果を見ると、Configurationで指定した通りに設定されていることが分かる。

現在適用されている構成の確認 現在適用されている構成の確認
Get-DscConfigurationを使うと、LCMを介して現在構成されている状態を確認できる。

 「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]」と表示され、設定がスキップされていることが分かる。

構成の繰り返し 構成の繰り返し
あるべき状態になっている時に同じ構成をプッシュで展開すると、すでに「あるべきファイル」が存在しているので、設定がスキップされる。
  (1)スキップされている。

 もちろんファイルのタイムスタンプも更新されておらず、あるべき状態であるため何も適用されなかった。

プッシュノードへの適用

 続いて、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台に対して構成を実行する 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 



構成結果の確認(1) 構成結果の確認(1)
プッシュノードの構成はGet-DscConfigurationで確認できる。

 プッシュノード(10.0.2.12)を見ても、あるべき状態に構成されている。

構成結果の確認(2) 構成結果の確認(2)
「Hello PowerShell DSC Word!!」と書かれたファイルが、プッシュノードでも生成されている。


 今回はPowerShell DSCによるConfiguration適用の概要と、プッシュ型で構成を適用する方法を紹介した。最終回の後編はプル型で構成を適用する方法を解説する。

「PowerShell DSCで始めるWindowsインフラストラクチャ自動化の基本」のインデックス

PowerShell DSCで始めるWindowsインフラストラクチャ自動化の基本

前のページへ 1|2       

Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。