PowerShell DSC を実際に動かしてみる
※これは PowerShell Advent Calendar 2013: ATND 14 日目の記事です。
Windows 8.1 および Windows Server 2012 R2 が発表されてからしばらく経ちますが、PowerShell DSC に関する情報や手順があんまり出ていないようですので(公式もまだですよね?)、正式な情報が揃うまでの間でちょっと触ってみようということで簡単な構成を作ってみました。
そもそも PowerShell DSC が何かということについては @guitarrapc_tech 氏がご自身のブログで丁寧に説明されていますので丸投げしてしまいます。
環境を準備する
まず、PSDSC を実行する環境ですが、基本的には IIS が動かせるコンピューターと DSC 適用対象のコンピューターの2台程度があればいいです。もちろんもっと DSC 適用対象コンピューターを用意すると構成情報の大量のコピペが楽しめます。ドメインを構成しているほうがコンピューター間の通信が簡単にできるんじゃないかなとは思いますが、スタンドアロン構成で実施するかどうかはお好みで…。
構成例:
- PSDSCHost001 (DC, DSC: WS2012 R2)
- PSDSCClient001 (WS2012 R2)
DSC の管理サーバー(?)を構成する
では早速 PSDSCHost001 上で PowerShell を起動し、Windows PowerShell Desired State Configuration Service
機能をインストールします。GUI でもなんでも結構ですが、せっかくなので PowerShell で。この機能、のちに適切な日本語に変更されたりするんでしょうか…。MCP の翻yいえなんでもありません。
PS > Install-WindowsFeature DSC-Service
Success Restart Needed Exit Code Feature Result
------- -------------- --------- --------------
True No Success {Windows PowerShell Desired State Configur...
上のコマンドレットを実行して成功していることを確認します。関連する機能として Web-Server
の一部の機能もインストールされます。今回は使いませんすみませんすみません。続いて Desired State Configuration ファイルを作ります。こんな感じ。
PS > New-Item c:\PSDSC -ItemType Directory
Directory: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2013/12/13 20:19 PSDSC
PS > New-Item c:\PSDSC\IISConfig.ps1 -ItemType File
Directory: C:\PSDSC
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2013/12/13 20:19 0 iisconfig.ps1
で、作成した IISConfig.ps1
ファイルを開いて以下の内容を書き込んで保存、実行します。
Configuration IISConfiguration
{
Node PSDSCClient001
{
WindowsFeature IIS
{
Ensure = "Present"
Name = "Web-Server"
}
WindowsFeature ASP
{
Ensure = "Present"
Name = "Web-Asp-Net45"
}
}
}
IISConfiguration
実行すると PowerShell のカレント ディレクトリ(Get-Location
で表示されるディレクトリ)に MOF ファイルが作成されます。
PS > C:\PSDSC\iisconfig.ps1
Directory: C:\PSDSC\WebSiteConfig
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2013/12/13 20:54 1732 PSDSCClient001.mof
これで準備は完了です。
DSC でクライアントに IIS を展開する
まずは DSC 適用前の PSDSCCllient001 に PowerShell で接続して機能のインストール状態を確認します。Get-Credential
のクレデンシャル認証は PSDSCClient001 に対して十分な権限があれば何でもいいです(Domain Admins とかw)。
PS > Enter-PSSession -ComputerName PSDSCClient001 -Credential $(Get-Credential)
問題なく接続できれば、プロンプトの部分が [PSDSCClient001]: PS >
みたいな形になりますので Get-WindowsFeature
を実行します。
[PSDSCClient001]: PS > Get-WindowsFeature -Name Web*
Display Name Name Install State
------------ ---- -------------
[ ] Web サーバー (IIS) Web-Server Available
[ ] Web サーバー Web-WebServer Available
[ ] HTTP 共通機能 Web-Common-Http Available
[ ] HTTP エラー Web-Http-Errors Available
[ ] ディレクトリの参照 Web-Dir-Browsing Available
[ ] 既定のドキュメント Web-Default-Doc Available
[ ] 静的なコンテンツ Web-Static-Content Available
[ ] HTTP リダイレクト Web-Http-Redirect Available
[ ] WebDAV 発行 Web-DAV-Publishing Available
[ ] .NET 拡張機能 4.5 Web-Net-Ext45 Available
[ ] Application Initialization Web-AppInit Available
[ ] ASP Web-ASP Available
[ ] ASP.NET 3.5 Web-Asp-Net Available
[ ] ASP.NET 4.5 Web-Asp-Net45 Available
※途中割愛してます
こんな感じでまだ何もインストールされていないことを確認したら PSSession は Exit しておきます。では DSC を実行してみましょう。
Start-DscConfiguration -ComputerName PSDSCClient001 -Path IISConfiguration -Wait -Verbose -Credential $(Get-Credential)
するとこんな感じの結果が表示されます。
ここで、もう一度 PowerShell から先ほどと同じコマンドレットを実行して PSDSCClient001 に接続し、機能のインストール状況を確認してみると…
[PSDSCClient001]: PS > Get-WindowsFeature -Name web*
Display Name Name Install State
------------ ---- -------------
[X] Web サーバー (IIS) Web-Server Installed
[X] Web サーバー Web-WebServer Installed
[X] HTTP 共通機能 Web-Common-Http Installed
[X] HTTP エラー Web-Http-Errors Installed
[X] ディレクトリの参照 Web-Dir-Browsing Installed
[X] 既定のドキュメント Web-Default-Doc Installed
[X] 静的なコンテンツ Web-Static-Content Installed
[ ] HTTP リダイレクト Web-Http-Redirect Available
[ ] WebDAV 発行 Web-DAV-Publishing Available
[X] .NET 拡張機能 4.5 Web-Net-Ext45 Installed
[ ] Application Initialization Web-AppInit Available
[ ] ASP Web-ASP Available
[ ] ASP.NET 3.5 Web-Asp-Net Available
[X] ASP.NET 4.5 Web-Asp-Net45 Installed
※途中割愛してます
インストールされてますね!ということで本当はウェブサイトを作ってコンテンツも一緒に DSC で構成したほうがデモっぽい感じですが、そういうのはブログよりも動画で見るほうがおおーっ!ってなるので Channel 9 で公開されている Teched 2013 の Desired State Configuration in Windows Server 2012 R2 PowerShell でカップケーキのウェブサイトが増殖する様子を見てもらえればと思います。
追記
そういえばせっかく Desired State Configuration って言っているのに構成済みの環境に再度 DSC を適用したときにどんな振る舞いをするのかについても結果を書いておいた方がいいかなと思いますので、実行したら追記しようと思います。環境もうつぶしちゃった (・ω<)
あと、全然本文とは関係ないですがブロガーなら誰しも、ふと書き続けていたブログをぶち壊したくなる衝動に駆られることがあるかと思いますが、多分に漏れず私もその衝動のままにこれまで使っていたブログを消去し、ここからまた始めることにしました。
ということでこれが最新の記事となります()