LoginSignup
1
0

More than 1 year has passed since last update.

PowerShell DSCを調べてみる

Last updated at Posted at 2022-02-18

PowerShell DSC(Desired State Configuration)とは

Windowsで標準で入ってるPowershellを使った構成管理ツール。Ansibleとかその辺みたいなやつ。
普通のPowerShellは命令型で書いていくが、PowerShell DSCは宣言型の構文になっていて当然ながら冪等性を担保できるような作りになっている(はず)。
OSSで、Microsoftが提供しているモジュールも、コミュニティによって作られたモジュールもある。
Microsoftが提供してるモジュールは

  • Archive   zipファイルを展開するモジュール
  • Environment   環境変数を操作するモジュール
  • File   File操作をするモジュール
  • Group   ローカルグループを操作するモジュール
  • Log   Log出力を行うモジュール
  • package   Windows Installerやsetup.exeなどのパッケージを管理するモジュール
  • Registry   レジストリを操作するモジュール
  • Script   Powershellスクリプトを実行するモジュール
  • Service   サービスを操作するモジュール
  • User   ユーザを操作するモジュール
  • Windows Feature   windowsの機能を管理するモジュール
  • Windows Process   プロセスを操作するモジュール

などがある。

管理対象はWindowsだけではなくLinuxも対象。
PowershellがLinuxでも使えるようになったからかと思いきや、それ以前から使えたらしい。
現在はLinux用モジュールも提供されてる模様(この辺
Microsoftが提供してるモジュールはxで始まる名前になっており、コミュニティのモジュールはcで始まる名前になってるとのこと。ドキュメントを見る限りLinux用の公式モジュールはnxで始まるっぽい。
参考にしてた情報が古かった。Linuxのがnxなのはあってそうだが、xで始まる公式モジュールはおそらくもう更新されてなくて、最新のはDSC Communityに移ってるっぽい。
モジュールはPowershell Galleryや、

Find-Module -Name hoge

みたいな感じで探せる。さらにインストールまでする場合には

Install-Module -Name xActiveDirectory

なお、オフラインインストールをしたい場合にはSave-Moduleを使う。

Powershell DSCの構成要素

Powrshell DSCは4つの要素?で構成されているらしい。

  1. Configuration
  2. Configuration Data
  3. Management Object Format Files (MOF)
  4. Local Configuration Manager (LCM)

Configuration

実際に構成要素を書いていく中身。↓のように書いていく
こちらはServerAにあるtmpフォルダがC:¥tmp に配置されてる状態を定義している。

configuration MyDSCConfiguraion{
    File DirectoryCopy{
        Ensure = "Present"
        Type =  "Directory"
        SourcePath = "\\ServerA\tmp"
        DestinationPath = "C:\tmp"
    }
}

ConfigurationData

Configurationをどのサーバに適用するかを定義するハッシュテーブル。
こんな感じで書く。

@{
    AllNodes = @(
        @{
            NodeName ='Server1'
        }
        @{
            NodeName = 'Server2'
        }
    )
}

Management Object Format Files (MOF)

configurationファイルをコンパイルした結果生成されるファイル。
これを管理対象のサーバに配布して実行させることで構成管理を実現する。

Local Configuration Manager(LCM)

各管理対象サーバでMOFファイルを実行するやつ。
単に実行するだけでなく、どういうタイミングでどう実行するかもここで管理している。
例えば、後述するPull/Pushのどちらで動くか、更新頻度はどうするか、再起動が必要となった場合にどう対応するか、などなど。
要は構成管理を実行するエージェントか。

(powershell 7からはLCMを使ってないらしいが、、まあ何かしらエージェントが動いてるのだろう。エージェントレスではないと思う、たぶん)

Powershecll DSCの動きかた

Powershell DSCは、

  • DSC管理サーバ
  • ターゲットサーバ(管理対象サーバ)

の2種類で構成される。
そして、以下の2種類のモードで動作する。

  • Push
  • Pull

Pushモード

DSC管理サーバがConfigurationをコンパイル、MOFを生成して管理対象サーバに送り付けるモード。
各管理対象サーバのLCMが、受信したMOFをもとに構成の変更などを行う。
構成の変更を特定のサーバにスポットで実行したい場合に使う。
デフォルトの動きはこちらになる。

Pullモード

DSC管理サーバがConfigurationをコンパイル、MOFを生成するまではPushと同じだが、
各管理対象サーバからDSC管理サーバにMOFファイルを要求する。
構成情報に差分があったらMOFをダウンロードするのか、MOFをダウンロードして差分を見るのかはよくわからないが、とにかくDSC管理サーバにある構成情報と自身(管理対象サーバ)の構成情報との差異が出たら自動的に適用する。
この場合にはDSC管理サーバもPull用に構成が必要らしい。
なお、WindowsサーバにPull型のDSC管理機能をインストールすることは可能だが、2022/02/18時点では今後特にUpdateなどを適用する予定はないとのこと。AzureのAutomation DSC機能を使うことを推奨している。(こちら参照
自分もAzure Automationを使用している。

まずはいったんここまで。
というかDSC CommunityのFAQとか見る限り、いろいろ情報が古そうだな。。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0