tech.guitarrapc.cóm

Technical updates

Windows と Deploy と PowerShell

私が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とかいうバズWordを使ってセッションしていますが、伝えたいのはPowerShellを使えばWindowsは楽になる、楽をしようです。 DSCが何とか、DSCを使ってね。ではありません。

  • 実際にクラウド上に展開した100台を超えるサーバーに対して、どうデプロイを自動化するのか。DSCがそこに果たす役割とは
  • DSCが出たけど、今後のデプロイってどうなるの。DSCで満足できるの?
  • DSCで注意することとかある?

WindowsでのデプロイでPowerShellが使えるのか。デプロイをシーンに挙げていますが、システム管理者でも応用できる部分はたくさんあります。

大事なのは、どうPowerShellを使って楽をするか。で、PowerShellを使うことではありません。

デプロイってなに

一言でデプロイっていっても、レイヤーを分けることができます。というより、レイヤーを分けずに考えるのはARIENAI。

まずは、考える中で参考になるあれこれ。

私はLinuxに限らずWindowsでも同様にレイヤーを分けて考えるべきだと思っています。この考えにOSの違いとかないですし。

ただ、それぞれのレイヤーの明確な定義って結構あいまい..... なイメージ... (勉強不足)

なので、いったん4層で考えています。*3

Configuration

OSやミドルウェアレベルのプロビジョニング、静的な設定の自動化を行う層。

  • 全サーバーで設定や状態(Configuartion) を合わせる
  • 状態をコードに落としこみ、あるべき状態をプログラマブルに管理する
  • 何度実行しても、あるべき状態に収束する

Orchestration

1つ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で行っていきますので、今度ともよろしくお願いいたします。 PULLモードでのDSCによるConfigurationを題材に挙げていきます。

*1:Windows Server 2012 R2まだー?

*2:どうせ全て喋ってないしイケるイケる?

*3:セッション資料ではBootstrapingをはずして3層としています

*4:正直Orchestrationと被っているので、分けるか悩むし分けなくてもという気がします。が、いったん分けました。