Puppetアドベントカレンダー、25日目です。
この記事が公開される頃には、きっと無事24日分の記事が完成していることでしょう。前日の @zipper さん、たのみましたよ......。
最終日は、2015年のPuppetの状況を振り返り、そして勝手気ままな妄想をしたためたいと思います。
Puppetの状況の整理
まず大前提として、Puppetは:
- 国内、海外共に大規模な実例もあり、充分に実績を持っているツールである
- 2015年末現在も活発に開発が続いている
- 公式の英語によるドキュメントが非常に充実している
以上のような理由により、OSSプロビジョニングツールの選択肢として普通に選ばれても問題のない、むしろ有利な面がたくさんあるツールです。
にもかかわらず、少なくとも現在の日本の開発現場においては若干手を出しづらい状況にある、という印象を持っています。
これには幾つかの理由があると思っています。
手に入る日本語情報が古い
検索すると、 2007~08年のmizzyさんの記事 や あんちぽさんの「入門Puppet」 が最初の方に出てくると思います。これらの情報は偉大な仕事で(私自身もあんちぽ本でPuppetのとっかかりを作った人間です)はありますが、バージョン4も出て時間も経っている現在のPuppetの入門の資料にするにはいささか古いという面があります。
顕著に表れているのはディレクトリ構成の規約で、どちらの資料も、Puppet3.8以降で推奨される Directory Environments には対応していません。
独自の外部DSLの学習コストがある
もう一つが、Puppetが独自の外部DSLでサーバの状態を宣言するという戦略をとっていることです。
Chef/ItamaeのようにRubyの内部DSLでもなく、Ansibleのようにyamlでもない、 Puppetのためだけに、全く独自の 文法を学習する必要がある、ということは敷居の高さにつながっていると考えられます。
外部DSLであることは、22日目にも述べた通り、「完全に頭を切り替えられる」というメリットも大きいのですが、一つの言語を一から覚えるという学習コストは無視することはできないでしょう。
この状況を打破したい→アドカレだ!!1
以上のようなつまるところ問題は純粋に、日本語情報が足りていれば解決すると考えています。Puppetの日本語情報は正直なところ質がどうこう、という以前のフェーズにいると考えられます。
あまりにも「いま、Puppetをどう使っているか」という素朴な記事、tips、感想がない(少なくとも探しづらい)ため、これから始める人にも、いまなんとなく流れで使っている人にも、もんやりとした不安感を与えているのかもしれません。
コミュニティというほどでもないですが、そういったゆるい紐帯といったものが、現代のOSSプロダクトの利用の際にはやっぱり必要だと思うわけです。
そのきっかけの一つに僭越ながらなれないかなあと思って、今年はPuppetアドベントカレンダーを主宰させていただきました。
やっぱり単著だ!!1
もう一つPuppetをバーンと行かせるための策として、 本を出せないか と考えています。「入門Chef」がChefを皮切りにプロビジョニングツールを改めて見直すきっかけとなっていますし、まずはこの本を、と言えるものがあると便利だと思います。
以下は、筆者の内緒のリポジトリにある目次の案です。
はじめに:
- 1. この本の狙い
- 2. 先ずは、触ってみよう
第一部 Puppet入門:
- 3. あらためて、Puppetとは何か
- 4. 基本的なマニフェストを作る
- 5. リソースを使いこなす
第二部 Puppetによるサーバ構築実践:
- 6. マニフェストを設計する
- 7. サーバの具体的なロールを書いていく
- 8. リファクタリングをする:
- 依存関係を整理する
- Defined Typesを使ってサーバの定義を抽象化する
- 9. サーバの状態をテストする:
- Serverspecの導入
第三部 Puppetserverの導入:
- 10. Puppetserverを立ち上げる:
- インストール
- 設定項目
- External Node Classifiers の利用
第四部 より高度な使い方 - 拡張、外部ツールとの連携:
- 11. Hieraを使う
- 12. Rubyによる拡張をする
- 13. Dockerを用いてインフラCIをする
- 14. Packerを用いて「ゴールデンイメージ」を作る
終わりに:
- 15. 総括
- 16. 参考資料
単にPuppetの紹介、入門書、あるいはレファレンスにとどまらず、Docker、ServerspecやPackerを中心としたHashiCorpのツールたちなど、オペレーション自動化の先端的なツールとサーバ自体とをつなぐ重要な役割を担うものとして、Puppetを解説できれば、ある程度の新規性はあるかな...と見ています。
無論、どういう方法で本にするのか、そもそも書けるのか、単著はつらいぞ...のような問題は山積みですが...。クリスマスなのでとにかくやりたいんだ!!!と叫んでみます。サンタさん、書く時間をください
終わりに
同僚/元同僚にしつこく圧を与えた甲斐もあり、多くの人にご参加いただき、さらにはいままでに交流のなかったPuppeteerの皆さんにも記事を書いていただきました。前半は死ぬかと思いましたが、徐々に参加人数も増え、この通り無事完走できました(で、できたよね...この記事を書いている段階ではわからないのでした)。
本アドベントカレンダーにある通り、Puppetは奥深く、多機能で、そして様々なメリットのあるツールです。Infrastructure as a Code が叫ばれ、コンテナ、Docker、オーケストレーション、HashiCorp tools、Kubernatesと流行の技術がどんどんと出てきますが、その世界線に行く前提として、 プロビジョニングのレイヤーを固める ことが非常に重要だと筆者は考えています。
Puppetが、あなたの確実で手堅いプロビジョニングのための助けになると信じています。