Puppet Enterprise 2015.2 - Michael Olson氏に聞く

Puppet LabsPuppet Enterpriseの最新バージョン - バージョン2015.2 - では,ノードグラフの視覚化表示やインベントリフィルタ,VMware vSphereモジュールといった新機能が,Puppet言語の大幅な機能拡張やWeb UIのアップデートと合わせて提供されている。Open Source Puppetコードベースのバージョン4.2.1をベースとした今回のPuppet Enterprise 2015.2は,2015年7月に導入された新しいバージョニングシステムによる最初のリリースでもある。

同社シニアプロダクトマネージャのMichael Olson氏が,Puppet Enterpriseについて説明してくれた。

InfoQ: 今回導入されたコードビジュアライゼーションは,どのような問題を解決するためのものなのでしょう? “コードを最適化して変化により早く対応する”上で,インタラクティブなグラフはどの程度有効なのでしょうか?

Michael: インフラストラクチャ構成の全体像は長い間,IT担当者にとって,理解の難しいブラックボックスでした。その大きな理由は,一度限りのスクリプトや手作業といった今までの手法が,インフラストラクチャの状態や異なるサーバ設定間の関連性について,資料や洞察を残していない点にあります。このような問題は,分散型チームがインフラストラクチャ全体の構成に関与する大規模組織において,初めて顕著なものとなって現れます。その結果が,理想変更障害率(ideal change failure rates)が高く,IT部門による迅速な問題対応が難しくなっているのです。

Puppet Enterpriseの新しいインフラストラクチャ可視化機能は,インフラストラクチャがPuppet内のコードでどのようにモデル化されているのかを可視化し,理解可能にすることで,そのような問題を解決します。これにより,ノード構成をドリルダウンして変更部分や障害発生部分を識別し,上流あるいは下流の構成との関連性を中心に状況を理解することが簡単になります。インフラストラクチャコードを探し回って,個々のコンフィギュレーション間の関係を整理する必要はもうありません。コードを最適化して,変化に素早く対応することが可能になるのです。

InfoQ: インベントリフィルタを保証期間管理に利用した具体例を教えてください。

Michael: 今回導入されたインベントリフィルタ機能を使用すれば,マシンやその構成に関する具体的な事実など,詳細な情報によるフィルタ処理が簡単にできるようになります。例えば私たちは,マシンの保証情報管理を担当するチームと一緒に仕事をする機会が多いのですが,Puppet導入以前の彼らは,保証情報とマシンのリストをメンテナンスする作業の多くを人手に頼っていました。Puppet Enterpriseの新機能であるインベントリフィルタを使うことで,保証状況に関するレポートを簡単に出力することが可能です。今後30日以内に保証期間が終了してリプレースするマシンはどれか,有効期限が既に切れている,あるいは30日以内に切れるために更新または交換が必要なものがいくつあるのか,といったことが簡単に確認できます。

別の例としては,インフラストラクチャをあるOSから別のものに移行して古いOSを廃止する,といった作業の必要なことはよくありますが,インベントリフィルタを使えば,現在どのような状況なのか,廃止する必要のあるシステムはいくつで,あといくつ残っているのかというレポートを,簡単に出力できます。Puppet Enterpriseのこの機能がなければ,どのインフラストラクチャがどのOSを実行しているのかといった移行状態がブラックボックス化して,正確な理解が難しいことも少なくありません。これが簡単にできるようになるのです。

InfoQ: コアエージェントコンポーネントについて,20倍以上の高速化とメモリ使用量の50%削減を実現するために,具体的にどのような最適化を行ったのでしょうか? 実際の値はどのようなものか,改善を確認できるデータはありますか?

Michael: Puppetエージェントをより速くより効率化して,メモリ使用量を削減するため,Puppet Enterpriseのインベントリディスカバリサービスを,現代的でパフォーマンスのよい言語(C++)で完全に書き直しました。

新しいエージェントテクノロジが20倍高速に動作し,メモリ使用量が50%削減されたという評価については,https://puppetlabs.com/blog/speeding-up-puppet-on-windowsに詳細があります。記事中のグラフが示すように,ネットワークインターフェースの処理時間は,いずれも4~12秒から1秒以内に改善されています。

InfoQ: Puppet言語のおもな強化点の中で,トップ5は何でしょうか?

Michael: インフラストラクチャをコードで記述する手段として,今回,Puppet言語に非常に大きな改良をいくつも加えています。その結果,コア言語としては,2005年の導入以来最大の機能強化になりました。おもな改善点をいくつか挙げると,

  • クリーンで一貫性のある動作 – 今回初めて,言語仕様や演算子,データ型のすべてについて,その動作を記述した仕様書を確認して頂けるようになりました。本リリースでは言語の一貫性が向上し,これまでより自然な形で動作するようになっています。
  • 反復とループ – インフラストラクチャのコードを手作業で繰り返し記述する必要性を,Rubyによる記述を使わずに削減できるようになりました。これにより,簡潔なコード記述と効率的なデータ利用が可能になります。
  • 今回のリリースには,匿名のインライン関数を受け付ける関数形式で繰り返し機能が実装されています。追加的な情報を必要とするコードブロックを記述しておいて,必要な情報を提供可能な関数にそれを渡してコード評価する,という手法が可能になりました。この方法は,ループ構造を特別なキーワードとしている他の言語とは違っています。Puppetでは,ループは単なる関数なのです。
  • データシステム – 新しいデータ型システムによって,パラメータのチェックを行う品質の高いPuppetコードが,従来よりもはるかに簡単に記述できるようになりました。Puppet Enterprise 2015.2では,クラスやパラメータ定義を使って指定可能な値を制限することで,データの値チェックと共通エラーの検出を簡単に行うことができます。これによって定型コードの多くが,パラメータに期待するデータ型に関する強力なアサーションで置換可能になりました。
  • エラー処理 – Puppet言語がこれまでよりも詳細なエラー情報を提供するようになりました。問題の所在を正確に示すことが可能になったため,構成に関する問題を,これまでよりも迅速に解決できるようになります。
  • Puppetテンプレート – Puppet言語に新しい機能を導入しました。テキスト出力に関するロジックを,言語テンプレート内に記述することが可能です。従来,これを行うにはRuby構文が必要でしたが,すべてのロジックとテキストコマンドをPuppetコード内に配置可能になったことで,一貫性が向上すると同時に,インフラストラクチャのコードによる記述がより簡単で安全なものになりました。

InfoQ: vSphereモジュールは,ChefのvSphereサポートやVagrantのvSphereプラグインと比較した場合,どのように違うでしょうか?

Michael: vSphere用のプラグインは他のベンダも提供していますが,Puppetの最も大きな違いは,モジュール自体よりも,自動化に対するアプローチそのものにあります。私たちは宣言型というユニークなアプローチを導入して,マシンのあるべき状態を定義や構成方法の定義を可能にしました。それによって,システムが常に所定の状態にあることを保証するだけでなく,予期しない構成変更の修正も行うことができます。

従来の手続き型の自動化アプローチ(Chefのような)では,自動化のワークフローに関するすべてのステップをひとつひとつ,そのステップのプロセスが失敗した時に障害修復を行う手作業プロセスにマップしなくてはなりません。Puppetは宣言型ですから,環境全体の整合性を保証することが可能です。デプロイに苦労することもありませんし,マシンが元の状態を逸脱したような場合に必要であった,対処活動や問題修正を手作業で行うために要する時間からも解放されます。

InfoQ: 今後の予定を教えてください。Puppet Enterpriseはどのような方向を目指しているのでしょう?

Michael: Puppetはこれまで,ITインフラストラクチャ管理を支援してきました。テクノロジが戦略的差別の手段となり,顧客価値の提供を目標とするチームの活動がクロスファンクショナルなものになった現在,革新的で信頼性の高いビジネスアプリケーションを提供することの重要性は,これまで以上に高くなっています。その結果として,コアインフラストラクチャを越えた自動化とモデリングによってITを支援することが,私たちにとって大きな目標になると思います。

今日のIT技術の大きな変化は,ITチームにさらなる複雑さとプレッシャを与えています。混在環境やインフラストラクチャのクラウド移行,Dockerのような新たなインフラストラクチャ手法のテスト,さらには市場提供時間の短縮やパフォーマンス向上といったユーザニーズ拡大への対処など,テクノロジにまつわる雑多な議論がありますが,いずれにしても将来的に,管理対象となるサーバやデバイスが(減るのではなく)より多くなることは間違いありません。

従って,私たちにとって重要な目標は,ITの複雑性を排除し,エコシステムのサポートを拡大する努力を今後も継続して,ユーザの利用するさまざまな技術を自動化していくことなのです。具体的には,ベアメタル上のオペレーティングシステムの構築,仮想環境の運用,インフラストラクチャのクラウド移行,コンテナやマイクロサービスの活用による速度向上と迅速化,データセンタのネットワークおよびストレージ部分におけるハイパーコンバージェンス化の探求といったものが含まれます。ユーザ環境で使用されるテクノロジが何であるかに関わらず,インフラストラクチャ全体とアプリケーションスタックの効果的管理を支援すべく,サポート範囲を拡大するために,当社は今後も投資を続けていきます。