私が PowerShell をやる理由、好きな理由、今自分が 果たす必要があること。それは Windows におけるデプロイであり、私が PowerShell に興味を持っているすべてです。
Linux 大好きです。Deploy や Automation のトレンドは Linux 界隈を見ると楽しいです。
Windows 超好きです。C# 大好きです。クラウド最高です。なので 謎社 の サーバーは Amazon Web Service 上の Windows Server 2012 です。*1 そんなWindows におけるデプロイに PowerShell をどう使って楽にするのかを毎日考えています。
でも、Windows で デプロイ? どうやるの? といわれると実例も乏しく手法も普及していない残念な現実。なので、今回はそれを考えて見ます。
目次
Windows での Deploy に PowerShellが果たす役割
JPPOSH - 第二回PowerShell勉強会 ということで、 2014年4月12日に行われた PowerShell勉強会@大阪 で、Windowsにおけるデプロイについてお話してきました。
前回の勉強会でもそうでしたが、どうも内容が膨らんで 時間内に話きっていません。ごめんなさい。
お詫びといってはなんですが、補足説明とか増量しておきました。*2 参加された方も参加されていない方も、ぜひ読んでいただけると幸いです。
考え不足な部分があるかと思うので、突っ込みをお待ちしております。
他の登壇者の資料
リンクを置いておきます。
登壇者 | 概要 | リンク |
---|---|---|
牟田口大介 | PowerShell「再」入門 2014 | winscript |
waka | PowerShellをクライアントで活用 | PowerPoint Web App |
Chuki | PowerShell と Active Directory | SlideShare |
他の方と内容が違いすぎて会場を置いてけぼりにした感ハンパナイです。反省していますが後悔はしていません。
伝えたいこと
今回、DSC とかいうバズワードを使ってセッションしていますが、伝えたいのは Windows は PowerShellを使えば楽になるし、楽をしよう です。 DSCが何とか、DSC を使ってね。ではありません。
- 実際にクラウド上に展開した100台を超えるサーバーに対して、どうデプロイを自動化するのか。DSC がそこに果たす役割とは
- DSCが出たけど、今後のデプロイってどうなるの。DSCで満足できるの?
- DSC で注意することとかある?
Windowsでのデプロイ で PowerShell が使えるのか。デプロイをシーンに挙げていますが、システム管理者でも応用できる部分はたくさんあります。
大事なのは、どう PowerShell を使って楽をするか。で、PowerShell を使うことではありません。
デプロイってなに
一言で デプロイっていっても、レイヤーを分けることができます。というより、レイヤーを分けずに考えるのはARIENAI。
まずは、考える中で参考になるあれこれ。
私は Linux に限らず Windows でも同様にレイヤーを分けて考えるべきだと思っています。この考えにOSの違いとかないですし。
ただ、それぞれのレイヤーの明確な定義って結構あいまい..... なイメージ... (勉強不足)
なので、いったん 4層で考えています。*3
Configuration
OS や ミドルウェアレベルのプロビジョニング、静的な設定の自動化を行う層。
- 全サーバーで設定や状態(Configuartion) を合わせる
- 状態をコードに落としこみ、あるべき状態をプログラマブルに管理する
- 何度実行しても、あるべき状態に収束する
Orchestration
1つ一つのシステム (サーバーとかロードバランサーとか色々) を 全体のサービス (ゲーム) として協調動作させる層。
- Capistrano とか fabric による アプリのデプロイ
- サーバーの動的な設定とかの自動化
Cluster Management
他サービスやノードとの協調的な動作を自律的に行う層。*4
同じ役割の各ノードと他ノードの協調的な動作
- サーバーAが状態変化したときに、他のサーバーB,Cに通史
- サーバーB,C は自身の設定からサーバーAの通知を受けた内容を適用
ノードと他サービスが協調的に動作
- ノードD が停止するときに、ロードバランサに通知して、ノードDに参照を割り振らないように設定を適用するなど
Bootstrapping
今回は触れていません。が、OSの自動インストール、マシンの自動開始などの低レイヤーな自動化の層。
- AWS でのインスタンスの開始など
- Azure でも同様にVMの開始など
これからの PowerShell
PowerShell はクラウドでのデプロイにシフト
Microsoft が RapidリリースにAzureを中心としたクラウド展開に舵をきったように、PowerShell チームも Agileに、Rapidリリースに舵をきっています。
PowerShell Remoting (v2) → WorkFlow による Orchestration (v3) → DSC による Configuration (v4) → OneGet による ap-get ライクなパッケージ管理 (v5)
PowerShell の新機能も Automation という本質はそのままに、 Cloud での展開にシフトしています。
これから Windows で Cloud 展開をする時に、PowerShell が有力な手段となる。その実例と成果をだしていきたいと思います。
コミュティの活動は大事
DSC はただのツールで、DSCが出たからといって デプロイが楽になるかというと、やっぱりまだまだです。Linux 界隈での デプロイ手法をWindowsでもやりたいですね。だって必要ですし。特にコンテナベースの展開、ノードの自律的な動作を。
Linux が Windows に比べて超素敵なのはオープンソースなコミュニティが豊富で活発だからです。Microsoft がいくら頑張っても、活発なコミュニティから生み出される素敵な考え、プロダクトには及びません。オープンソースコミュニティをもっと活発に、大事に。
DSC にリソースがない?なら作ればいいのです。リソース追加が面倒?なら楽になるようにすればいいのです。コミュニティが主導して、リソースを展開する活発なやり取りを PowerShell チームも期待しているようです。
2014年のデプロイ
Immutable Infrastructure
2013年の Docker や Stateless、Serf という材料から、2014年トレンドと定番への発展となるイメージです。
ただImmutableにすればいいっていうものではないので、そこは注意です。
インフラ的にポイントとなるのが、box (コンテナ) の高速展開ですが そこで Docker が出てきます。
Microsoft は vagrant への Windows Server 2012 R2 のイメージを提供するなど、積極的です。2014/6/28 まで試用可能な vagrant box が公開されているので、どうぞ。
他にも、ノードの変化を他サービスと連携するためのSerf、アプリも Immutable を前提にするなどの連携が必要ですが、それはまたの機会に。
Windows ではどうなの
単純に Immetable にするには、まだ現状難しいと考えています。ですが、その辺はこれからも考えていきたいです。
今後
次回の PowerShell 勉強会 を東京で 6月か7月に行えればと考えています。告知は、JPPOSH で行っていきますので、今度ともよろしくお願いいたします。*5