tech.guitarrapc.cóm

Technical updates

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

これは、PowerShell DSC Advent Calendar 2014 - Adventar 1日目の記事です。

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

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

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

目次

PowerShell DSC とは何か

過去に @IT で記事を書いたので、この記事をご覧の方の中には読んでいただいた方もいるかもしれません。より深く見ていくので物足りないと思った方は楽しみにしていただけると。

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 といわれます。

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

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

f:id:guitarrapc_tech:20141201060644p:plain

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

繰り返します。「PowerShell DSC は Windows だけを対象にしておらず、OMI標準に則っていれば他OSやスイッチであっても管理が可能です」。

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

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

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

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

良く勘違いされるのですが、 「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 などコマンドの使い心地にはまだまだ及びません。ツールとしてはまだまだ未熟です。*3

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

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

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

Edge Show 123

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

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

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

どこでDSC動かすの

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

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

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

PowerShell DSC の利用可能なWindows

PowerShell v4 以上で利用でき、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 それぞれいけます。マイクロソフトの公開しているリポジトリを紹介しておきましょう。

例えば、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:以前は WMI でしたが、PowerShell v3 から Windows は CIM標準 に移行を進めています

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

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

*5:Chefでいうレシピ

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

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

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