tech.guitarrapc.cóm

Technical updates

PowerShell DSC Advent Calendar 2014 : Day 1 PowerShell DSC とは何か。

これは、アドベントカレンダー1日目の記事です。

https://www.adventar.org/calendars/579

2013年10月に公開されたPowerShell DSCですが、Azureを中心にWindowsプラットフォームで静かに、しかし着実に実績を残しつつあります。

初日は、PowerShell DSCについてさらっと触れておきましょう。これからDSCを深く見る前に、少しは興味を持っていただければ幸いです。

明日は、Configuration Managementがなぜ必要なのかについてです。

PowerShell DSC とは何か

過去に @ITで記事を書いています。より深く見ていくので物足りないと思った方は楽しみにしていただけると。

https://www.atmarkit.co.jp/ait/articles/1405/22/news131.html

PowerShell DSCは、端的にいうと「サービス稼動しているデータセンターや各環境、ソフトウェア、サービスをあるべき状態に維持するための新しい構成管理プラットフォーム」です。

さて、データセンター環境って大雑把ですね。少し細かく見ていきましょう。

データセンターや各環境ってどういうこと

オンプレミスの方はご自分の環境でも結構ですよ?

データセンターと聞いてどんなことを思い浮かべますか? そこにはWindowsサーバーだけがある? ちがいますよね?

そう、データセンターにはスイッチングハブ、L3スイッチ、ロードバランサー、サーバー群、それを管理する機器、他にももろもろ。例が膨大なほど様々なソフトウェアが搭載された機器にあふれています。*1

当然OSがWindowsではない機器も多くあります。むしろWindowsなんて全体で1%にも満たないのが普通です。

データセンターを使っていない? では、あなたの環境はどうでしょうか? AWS? Azure? あるいはGCP? 例えクラウド環境においても、Windowsだけを対象にするような狭い見方はいやですし時代遅れといわれても仕方がないことでしょう。

PowerShell DSC は Windows だけを対象にはしていない

データセンターなど混在した環境では管理1つをとっても、様々なツールを使うことになりがちです。LinuxはChef/Puppet/Ansibleで? ではスイッチは? L3は? LBは? 大変ですね。

もっと標準化された技術を使って、定義されたドキュメントスキーマで構成を解釈できたらどうでしょうか? 各種構成管理ツールから呼び出せれば、ツールと標準化された技術がスムーズに連動しそうですね? つまり、OSやあるいは機器の違いを超えて、データセンターの各種機器に対する構成管理のプラットフォームになりえないでしょうか?

この構成管理のプラットフォームとしての存在、それがPowerShell DSCの目指すところです。

PowerShell DSCは、Windowsに依存していません。誤解を招きそうですね。PowerShell DSC は、構文としてはPowerShell の糖衣構文です。様々なキーワードやCmdletで扱いやすいようにしているので、よくPowerShell DSCといわれます。が、DSCとしての本質は糖衣構文から生成された、「mofというスキーマドキュメントに記述された内容」であり、スキーマを解釈できればどの機器でも適用ができます。

標準化された技術の利用

PowerShell DSCが使うスキーマドキュメントはOMI Standardをベースにしています。

https://collaboration.opengroup.org/omi/

Microsoftは、かなり以前から他社と共にHardware Abstraction Layer (HAL) に参画して、より抽象化されたOSを目指していました。Windows Server 2012は参画して初のCloud OSとしての出発といいます。

OMIはそれだけで、ながーい記事になるので興味のある人はちょっとこの辺をどうぞ。

image

https://blogs.technet.com/b/Windowsserver/archive/2012/06/28/open-management-infrastructure.aspx

PowerShell DSCの本質は、OMIをベースにOSや機器で縛られない構成管理です。 Windowsの実装ではCIM(以前はWMI)と呼ばれ、他OS/機器との境目をなくして標準化された技術として扱えるようにしています。

このため、PowerShell DSC は Windows だけを対象にしておらず、OMI標準に則っていれば他OSやスイッチであっても管理が可能です

Linuxの例としてはこちらをどうぞ。

https://blogs.technet.com/b/privatecloud/archive/2014/05/19/powershell-dsc-for-linux-step-by-step.aspx

実はDockerも記事にしてたり、ね!

https://docs.docker.com/articles/dsc/

OSのみならずOMIを実装したスイッチも管理できるとDELL S4810やS55を例に発表もされています。

https://www.dell.com/jp/business/p/force10-s-series/pd

プラットフォームとツールの違い

良く勘違いされるのですが、「PowerShell DSCってWindowsにしか使えないんでしょ? 使えない!」は誤りであり、一部正しいです。まだ未熟なのでLinuxで使いやすいかというとそうでもないでしょう。

前節で述べた通り、PowerShell DSCは、WindowsやLinuxを含めてOSだけを対象にしていません。OMIに則っていれば、OSや機器のレベルまでどれもが対象に管理できることを目指しています。「データセンター管理をも扱えるプラットフォームを目指して設計」されているのは繰り返した通りです。

そのため、ChefやPuppetは Configuration Management Toolと呼ばれるのに対して、MicrosoftはPowerShell DSCを Configuration Management Platform と表現しています。

プラットフォームとツール、その違いは何でしょうか?

Chef

Chefを使ったことがある人は、Chefの完成度にかなり満足できるでしょう。クックブックからレシピ、ナイフ、chef local modeまで、Configuration ManagementはChefで完結できます。素晴らしいです。さすがです。

しかし、スイッチに対しても適用するのはめんどうですね。

PowerShell DSC

ではDSCはどうでしょうか? ChefチームとPowerShellチームが完全にタッグを組んでDSCは開発されました。なので、ChefとPowerShellを対比させるとよく似ていることに気づきます。

要素 PowerShell DSC Chef
言語 PowerShell Ruby
エンジン LCM chef client
レシピ Configuration Recipe
クックブック Resource Cookbooks
スタンドアローン Push chef local mode (あるいは chef solo)
サーバー/ノード Push / Pull Chef Server
ノード管理 CIM Method/ASP.NET Knife

でもノード管理は不十分ですし、Knifeなどコマンドの使い心地にはまだまだ及びません。ツールとしてはまだまだ未熟です。*2

ツールとして未熟でもOMIをベースにして、PowerShellに限らずRubyを含めた各種言語から呼び出すことを可能としています。実際に、ChefからResource *3、Configuration*4、 mofスキーマ*5 を直接呼び出せるようにしています。つまり、ChefはDSCを土台にすることで、WindowsであってもLinuxやUNIXと変わらない使い心地で構成管理ができます。

https://www.getchef.com/blog/2014/09/08/chef-11-16-gets-into-powershell-dsc/

https://docs.getchef.com/resource_dsc_script.html

先ほども紹介した通り、まだ機能が限定されているとはいえ、WindowsだけでなくLinuxやスイッチも管理できます。

つまり、「PowerShell DSC は自身のツールとしての成熟よりも、他ツールと連携できるプラットフォームとしての性格が強い」と思っていただけると、なぜConfiguration Management Platformというコンセプトがわかりやすいでしょう。

Edge Show 123

このデータセンターで! とかプラットフォームとして! といった考えは、 PowerShell開発チームメンバー自身も含めてMicrosoftがたびたびオープンにしているのですが、全然注目されてません。残念です。

せっかくなので1つ動画を紹介しておきます。*6

Edge Show 123 - Desired State Configuration (DSC) with PowerShell in the Datacenter

どこでDSC動かすの

PowerShell DSCのサーバー自体は、Windowsで動かすのが楽なのは事実です。Linuxでの動作はまだPushに限られているので限定的です。*7

そのためWindowsが多く、Linuxも管理したい環境にはうってつけでしょう。もちろん逆でもいいでしょうが、ふつーは数の多いOSによってCMツールをすでに導入済みでしょうから、ね。

まぁ、使いやすい方を使えばいいんですよ。はい。

PowerShell DSC の利用可能なWindows

PowerShell 4.0以上で利用でき、OSとしてはWindows 2008R2から使えます。Windows Server 2012と2008 R2には、Windows Management Framework 4.0(以降WMF4.0) を入れる必要がありますが、2012 R2はデフォルトで利用できます。

Windows 7SP1とWindows 8もWMF 4.0が必要ですが、Windows 8.1はデフォルトで利用できます。

Windows だけが PowerShell DSC の利用対象じゃない

LinuxもDSCを使えますよ? WindowsをDSCサーバーとして、PushでLinuxも対象にできます。

OMIが必要要件なので、CentOS、Ubuntu、Oracle Linuxそれぞれいけます。Microsoftの公開しているリポジトリを紹介しておきましょう。

https://github.com/MSFTOSSMgmt/WPSDSCLinux

例えば、OMIの事前作業としては、

# Cent OS
yum -y groupinstall 'Development Tools'
yum -y install pam-devel
yum -y install openssl-devel
yum -y install python
yum -y install python-devel
# Ununtu
pt-get -y install build-essential
apt-get -y install pkg-config
apt-get -y install python
apt-get -y install python-dev
apt-get -y install libpam-dev
apt-get -y install libssl-dev
# Oracle Linux
yum -y groupinstall 'Development Tools'
yum -y install pam-devel
yum -y install openssl-devel
yum -y install python
yum -y install python-devel
yum -y install wget
yum -y install kernel-headers

そして、OMIのダウンロードセットアップは

mkdir /root/downloads
cd /root/downloads

wget https://collaboration.opengroup.org/omi/documents/30532/omi-1.0.8.tar.gz
tar -xvf omi-1.0.8.tar.gz

cd omi-1.0.8
./configure | tee /tmp/omi-configure.txt
make | tee /tmp/omi-make.txt
make install | tee /tmp/omi-make-install.txt

あとは、DSC Linuxをセットアップ

cd /root/downloads

wget https://github.com/MSFTOSSMgmt/WPSDSCLinux/releases/download/v1.0.0-CTP/PSDSCLinux.tar.gz
tar -xvf PSDSCLinux.tar.gz
cd dsc/
mv * /root/downloads/

cd /root/downloads
make | tee /tmp/dsc-make.txt
make reg | tee /tmp/dsc-make-reg.txt

最後にOMIの開始でokです。

OMI_HOME=/opt/omi-1.0.8
/opt/omi-1.0.8/bin/omiserver -d

まとめ

  • PowerShell DSCはまだまだツールしては未熟。でもPowerShell v5で一気に改善される
  • Windowsやそれ以外にもPowerShell DSCは使えるし、Configuration Managementの1つとして覚えて損はない

まぁ、Windowsにしか使えないし、Chefだけでいいや。という印象を少しでもぬぐっていただけるとうれしいです。ChefでWidowsを扱うよりDSCを呼び出す方が、圧倒的に楽ですよ。

.... さらっと、とは.... これから毎日PowerShell DSCに関するもろもろを連載していくので、体力が尽きないことを祈っています。

*1:話が脱線するので、物理的なパッチケーブルや光ファイバーはおいておきましょう

*2:次のリリースであるPowerShell v5で現在最も辛いバグの多くが改善され、使い心地が格段に向上するので楽しみにしてください。

*3:Chefでいうクックブック

*4:Chefのレシピ

*5:レシピで生成された構成実態となるCIMドキュメントファイル

*6:7:45ぐらい~の青シャツの人はPowerShellチームの中心人物の一人です。赤シャツの人はDSCのリードエンジニアです

*7:Windows Server 2008 R2から動作します