Windows PowerShell Blogに現在,PowerShellのDSC(Desired State Configuration)に関する記事が掲載されている。DSCはWindowsでコンピュータの構成管理を行うための,Microsoftからの提案だ。最新の記事のひとつではプッシュとプルという,DSCで選択可能な2つのコンフィギュレーションモードについて説明されている。
DSCは指定されたノードあるいはマシンに必要な構成を宣言的に指定する,PowerShellツールの追加機能である。これはPowerShellが元々備えている,命令型のスタイルとは異なったアプローチだ。マシン設定のために実行するステップに注目するのではなく,DSCを利用したスクリプトでは,必要な設定をただ単に記述すればよい。それを実施する方法は,PowerShell DSCシステムが決定してくれるのだ。
PowerShell DSCはリソースという概念を持っている。リソースはユーザやグループ,サーバロール,レジストリエンティティといった項目を設定するブロックを構成するものだ。組み込みでいくつかのリソースが用意されている他に,独自のリソースを作成することもできる。以下の例ではFileリソースを使用して,localhost
のC:\inetpub\wwwroot
の内容がC:\SiteFiles
の正確なレプリカであることを定義している。
Configuration SiteConfig { # A Configuration block can have zero or more Node blocks Node "localhost" { # File is a built-in resource you can use to manage files and directories # This example ensures files from the source directory are present in the destination directory File MyFileExample { Ensure = "Present" # You can also set Ensure to "Absent" Type = "Directory“ # Default is “File” Recurse = $true SourcePath = "C:\SiteFiles" # This is a path that has web files DestinationPath = "C:\inetpub\wwwroot" # The path where we want to ensure the web files are present } } }
コンフィギュレーションの適用に関して,PowerShellにはプッシュとプルという2つのモードが用意されている。プッシュモードは,Start-DscConfiguration
cmdletを実行することで即時に起動される。例えば下記のコマンドでは,カレントパスにあるコンフィギュレーションが,スクリプトで指定されたすべてのノードに対して適用される。
Start-DscConfiguration -Wait -Verbose -Path .
プルモードでは,イニシアティブが与えられるのはノード自身だ。プルサーバを監視して,新しいコンフィギュレーションをチェックするのはノードの責任になる。新しいコンフィギュレーションが用意されると,LCM(Local Configuration Manager) - PowerShell DSCのエンジン - がダウンロードと適用を行う。プルモードの設定は少し複雑だ。プルサーバとなるWebサイトの設定や,各ターゲットノードのLCMを,DscLocalConfigurationManager
を使って設定する必要がある。Windows PowerShellチームでも,プルサーバの設定を簡単にするための記事とヘルパツールを公開している。
ほとんどのツールが両方のモードをサポートするが,Ansibleなどプッシュ用のものや,PuppetやChefのようにプル用のものもある。どちらのモードにも賛成と反対,さまざまな議論がある。プッシュモードはシンプルで,制御性に優れる。ターゲットノード上に特別なソフトウェアをインストールする必要がない上に,コンフィギュレーションがユーザの要求に従って起動するからだ。一方のプルモードはスケーラビリティに優れ,メタデータ機能が豊富だ。ターゲットノードは自分自身で,非同期的に設定を実行する。またプルサーバには,各ノードの状態に対応するメタデータを集中的に配置することができる。