PowerShell DSC (Desired State Configuration) は、Windows環境やクラウドインフラを管理・自動化するための強力なツールです。
インフラをコードで管理し、特定の設定状態を維持するための仕組みを提供します。
本記事では、PowerShell DSCの基本的な概念から、構成ファイルの作成、適用方法について解説します。
また、学んだ内容を定着させるための演習問題とその解答も用意しました。
DSCを使うことで、インフラ管理の自動化や一貫性のある設定を実現する方法を理解しましょう。
DSCとは?
DSC (Desired State Configuration) は、システムの「望ましい状態」を定義し、その状態が確実に維持されるようにするための機能です。
これにより、システムやサーバーが常に期待通りの設定を維持し、手動の設定変更によるヒューマンエラーを防ぎます。
DSCの主なコンポーネントは次のとおりです:
- 構成 (Configuration): 望ましい状態を定義するコード
- リソース (Resources): 実際に設定を適用するためのモジュール
- ローカル構成マネージャー (LCM: Local Configuration Manager): 構成を適用・維持するためのエージェント
DSCの構成ファイルの基本
DSCを使用するための第一歩は、「構成ファイル」を作成することです。
構成ファイルは、PowerShellスクリプトとして記述され、システムの望ましい状態を定義します。
これにより、指定されたリソースが正しい状態に設定されることを保証します。
以下のような要素を使用して構成を作成します。
- Configuration ブロック: システムの状態を定義する場所
- Node ブロック: 構成を適用する対象のノード(コンピュータ)を定義
- Resource ブロック: 実際の設定を行うリソース(ファイル、サービス、パッケージなど)
構成ファイルの作成例
まず、シンプルな構成ファイルを作成してみましょう。
この例では、特定のファイルが存在し、かつ内容が正しく設定されているかを確認します。
# 構成の定義
Configuration SampleConfiguration {
# 適用対象のノード
Node "localhost" {
# ファイルが存在することを確認
File MyExampleFile {
DestinationPath = "C:\Temp\example.txt" # 作成するファイルのパス
Contents = "This is an example file." # ファイルの内容
Ensure = "Present" # ファイルが存在することを保証
}
}
}
# 構成をMOFファイルにコンパイル
SampleConfiguration -OutputPath "C:\DSC\"
このスクリプトは、PowerShell DSCの構成を定義しています。
「localhost」に対して、「C:\Temp\example.txt」ファイルが存在し、その内容が「This is an example file.」であることを保証します。
構成ファイルの適用
構成ファイルを作成したら、次にその構成を適用します。
PowerShell DSCでは、構成ファイルは「MOF」形式にコンパイルされ、各ノードに適用されます。
以下の手順で構成を適用します。
- 構成をMOFファイルにコンパイル
- 構成ファイルを作成したら、-OutputPath パラメータを指定して、構成をMOFファイルにコンパイルします。これにより、指定したパスにMOFファイルが生成されます。
- 構成の適用
- 次に、Start-DscConfiguration コマンドを使用して、MOFファイルを適用します。
# 構成の適用
Start-DscConfiguration -Path "C:\DSC\" -Wait -Verbose
-Wait パラメータは構成の実行が終了するまで待機し、-Verbose は詳細なログを出力します。
構成の確認
構成が正しく適用されたかを確認するために、ファイルが存在するかどうか、内容が正しいかを手動でチェックできます。
また、DSCは定期的に構成の整合性を確認し、もし設定がずれていれば自動的に修正します。
リソースの追加
DSCでは、ファイルの存在だけでなく、さまざまなシステム設定を管理できます。
次に、サービスの状態を管理するリソースの例を見てみましょう。
Configuration ServiceConfiguration {
Node "localhost" {
# Windows Updateサービスを起動状態に設定
Service WindowsUpdateService {
Name = "wuauserv" # サービス名
State = "Running" # サービスを起動状態にする
StartUpType = "Automatic" # 自動起動に設定
}
}
}
# 構成をMOFファイルにコンパイル
ServiceConfiguration -OutputPath "C:\DSC\ServiceConfig\"
この例では、「Windows Updateサービス(wuauserv)」が「起動状態」かつ「自動起動」に設定されることを保証します。
構成を適用する手順は、前の例と同様にStart-DscConfigurationコマンドを使います。
LCMの設定
LCM (Local Configuration Manager) は、DSCの構成を管理するエージェントです。
LCMはデフォルトで定期的に構成をチェックし、望ましい状態が維持されているかを確認します。
LCMの動作はカスタマイズ可能で、次の設定を行えます:
- 構成を適用するタイミング(手動、プルモード、プッシュモード)
- 構成が変更された場合の動作(自動修正など)
LCMの設定例を示します。
# LCMの設定
[DSCLocalConfigurationManager()]
Configuration LCMConfig {
Node "localhost" {
Settings {
ConfigurationMode = "ApplyAndAutoCorrect" # 構成が変更されたら自動修正
RefreshMode = "Push" # プッシュモードで構成を適用
}
}
}
# LCMの構成を適用
LCMConfig
この設定により、構成が変更された場合、自動で修正が行われるようになります。
演習問題
ここまで学んだ内容を元に、次の演習問題に挑戦してみましょう。
問題1: ファイルの作成とサービスの管理
次の要件を満たすPowerShell DSCの構成ファイルを作成してください。
- C:\DSC\testfile.txt というファイルが存在し、その内容が “Hello DSC” であることを保証する
- Windowsの「Print Spoolerサービス」を「起動状態」にし、「自動起動」に設定する
問題2: LCMの設定変更
LCMの設定を変更し、次の要件を満たすように構成ファイルを作成してください。
- 構成が変更された場合は自動修正
- 構成の適用方法はプッシュモード
解答例
問題1の解答例
Configuration FileAndServiceConfiguration {
Node "localhost" {
# ファイルの作成と内容の設定
File TestFile {
DestinationPath = "C:\DSC\testfile.txt"
Contents = "Hello DSC"
Ensure = "Present"
}
# Print Spoolerサービスの管理
Service PrintSpoolerService {
Name = "Spooler"
State = "Running"
StartUpType = "Automatic"
}
}
}
# 構成をMOFファイルにコンパイル
FileAndServiceConfiguration -OutputPath "C:\DSC\"
問題2の解答例
[DSCLocalConfigurationManager()]
Configuration LCMSetting {
Node "localhost" {
Settings {
ConfigurationMode = "ApplyAndAutoCorrect"
RefreshMode = "Push"
}
}
}
# LCMの設定を
適用
LCMSetting
まとめ
PowerShell DSCは、システムの構成をコードで管理し、インフラの一貫性を保つための強力なツールです。
構成ファイルの作成方法や適用方法を理解することで、効率的にシステム管理を行うことができます。
演習問題を通じて、実際に手を動かしながら理解を深めましょう。
DSCはWindows管理者やDevOpsエンジニアにとって重要な技術ですので、さらに高度なリソース管理やクラウドインフラの自動化にも挑戦してみてください。