BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース FOSDEM構成管理 - インフラストラクチャ・アズ・コードとPuppetモジュールのためのプラクティス

FOSDEM構成管理 - インフラストラクチャ・アズ・コードとPuppetモジュールのためのプラクティス

原文(投稿日:2015/02/01)へのリンク

オープンソースのフリーソフトを開発する企業がヨーロッパに集うFOSDEMが今週末,ベルギーのブリュッセルで,4,000を越える参加者によって開催された。今年のカンファレンスはRubyや視覚化,あるいは設定管理など数々のテーマを持った40以上のトラックに,さまざまなコミュニティの主催する公式および開発者主体のミーティングが実施された。

これから紹介する内容は,設定管理に関するいくつかのミーティングからの抜粋だ。

酷いインフラストラクチャコードを前に,建設的な会話をする方法

Puppet LabsのプロダクトマネージャであるRyan Coleman氏が,同社のベストプラクティスと,Puppetモジュールを扱う上でありがちなエラーについて論議した。

氏の推奨は,小規模かつ独立性の高いモジュールにすることだ。すべての構成情報を詰め込んで,モノシリックなPupperモジュールを作っている組織もあるが,複数の個別モジュールで構成する方が,再利用や理解の容易さ,コードベース全体の分かりやすさの面で有利になる。

モジュールの開発にあたっては,どのPuppetクラスが直接利用を意図していて,どれが内部的なものであるかという,モジュールユーザに対するインタ-フェースを考慮するべきだ。Puppetにはプライベートクラスという概念がないので,このような区別はモジュールのドキュメントに記述することになる。インターフェースには,構成対象の基盤システムで設定可能なオプションをすべて公開する必要はないし,そうするべきでもない。必要なものに限定するべきだ。氏は,デフォルト値を明示したクリーンなコードを開発する手法として,パラメータパターンの使用を推奨した。クラス名やパラメータ名,あるいはファイル毎に1クラスといった慣例には従うことが望ましい。

"Puppet Language Style Guide"にはネーミングやスタイル,フォーマットの規則が載せられている。それに従うことで一貫性のある,理解しやすいモジュールとなり,一般的な問題を回避することができる。Puppet Labsでは現在,スタイルガイドを新たなV2に更新する作業中で,モジュールドキュメントのテンプレートと例も提供する予定だ。

モジュールやオペレーティングシステム,バージョン間の互換性については,Puppetの最近のバージョンで導入されたmetadata.jsonモジュールディスクリプタに記述しておくことが可能だ。ユーザが特定のPuppetバージョンやオペレーティングシステムをサポートするモジュールを選択する上で,貴重なリソースとなる。

スタイルやドキュメントを支援するツールもある。Puppet-lintは,スタイルガイド遵守をチェックするだけでなく,コードの自動修正にも使用することができる。Puppet-stringsは,JavaのJavadocツールのように,Puppetクラスからインラインドキュメントを抽出する新しいツールだ。

窃盗(thievery)でもっとよいDevOpsを – “インフラストラクチャ・アズ・コード”のための効果的プラクティス

Puppet LabsのソフトウェアエンジニアであるAdrien Thebo氏の講演では,開発フィールドでの長年の経験で習得したベストプラクティスを活用した,コード提供としてのインフラストラクチャの改善を中心的に取り上げていた。

開発者に必要なのは,安全確保とエラー回避のためのガードレールだ。そしてそれは,構成管理の対象のひとつでもある。人的要素の削減,動作中のサーバの手動切り替え回避,QAと実稼働のような異なる環境間の同期,変更実施前の事前評価などの方法により,ヒューマンエラー軽減を支援する。

氏は,開発のベストプラクティスをすべて盗み出して,それをインフラストラクチャコードに適用するという,Dev風Ops(Dev flavored Ops)について言及した。例えばバージョン管理システムを使用するのであれば,コミットメッセージを使用することで,バージョン管理をレビュー交換の手段として使用することが可能になる。

テスト駆動開発と同じように,テスト駆動インフラストラクチャというものも実現できる。ユーザに怒られるまで待つ,手動でチェックするなど,変更を評価する方法はたくさんあるが,一番よいのは自動テストだ。

テストは開発者だけのものではありません。

講演で紹介されたもうひとつの興味深い概念は,RSpecテストでNagjosプラグイン出力フォーマットを生成するという,テスト駆動監視だ。

Puppetのエコシステムでは,Puppetモジュールをテストするためのツールがいくつも提供されている。モジュールのユニットテストを実行するrspec-puppet,サーバが正しく構成されていることをプログラム的にチェック可能にするserverspec,via SSH,WinRM,Docker API...。クラウド対応の受け入れテストツールであるBeakerでは,仮想マシンや「クラウド,Dockerコンテナに対してテストを実行することができる。

バージョンコントロールとテストはまだ十分ではなく,継続的インテグレーションにおいては,開発の進行によってテストが失敗したり,リグレッションを起こしたりしないように注意する必要がある。

この記事に星をつける

おすすめ度
スタイル

BT