「入門Puppet」を読んだ

自社ではPuppetを使っています。
私が直接いじることはほとんどないけど、
基礎の基礎ぐらいは知っておきたいなということで「入門Puppet」を読みました。

事前知識

  • Chef-soloをほんの少しだけ使ったことがある
  • Ansibleをほんの少しだけ使ったことがある
  • Puppetの存在は知っていたけど使ったことはない
    • でもどういうものか概要は知っている
  • Vagrantを使ったことがある
    • 書籍ではVagrantを使って説明が進む
  • どこかの勉強会かネットでPuppetはちょっと面倒みたいなことを聞いた気がする
    • 外部DSLなので学習コストがーみたいな話だったかな

読み方

  • 1回目: 全体をさらっと一読
  • 2回目: 実際にコマンドを実行しながら読んだ
    • 15章以降は一身上の都合により試してはいない
  • 3回目: この記事のために流し読みで復習

最後に1章ずつserverspecやcapistranoとの連携があるけど、今知りたいことではないので流し読み。

知ったこと

全体的なこと

  • 「システムのあるべき状態」を記述したmanifestを用いる
    • 他の構成管理でも同じことなのだろうけど、状態っていう言葉がなんかしっくりきた
    • 今までは「手順の自動化」っていう感覚だった
  • あるべき状態を管理と捉えると、Puppetの宣言的なDSLは読みやすい気がした
    • もっと複雑化してくると違うのかもしれない
  • 基本的な記述でシンプルに使う分には簡単
    • 最初に抱いていた面倒なイメージは消えた
  • むしろ簡単で良いではないかという気分
  • 基本的な機能はChef/Ansibleとさすがに違いなさそう

具体的なこと

  • 一つの記述でyumやaptとかを自動的に判別して実行してくれる
    • ChefよりAnsibleが好きだけど、この方法が分からなくてうーんってなったのを思い出す
  • あるべき状態を表すresource
    • 具体的な種類をresource typeと呼ぶ
    • resource typeは独自に追加定義できる( defined type )
  • resourceをまとめるclass
  • 上記のmanifestファイルをまとめるmodule
  • moduleの組み合わせとしてのrole
    • サーバー毎の役割
  • resource typeの依存関係を表す書き方
    • 事前にこれが必要だよ => require
    • このあとこれをしてね => notify
    • あれが変わったらこれしてね => subscribe
  • classの場合は依存関係を->~>で表す
  • moduleでは命名やパスに色々ルールがある
  • 変数や条件分岐も使える

感想

説明のバランスが自分にはとても良かった。
動作環境もVagrantを使って「このbox使います」と簡単だった。

段階的に仕様を学んで行く構成も非常に分かりやすかった。

題材とか説明を飛ばしたりとか推奨しない項目について、きちんと理由が書かれていて納得感があった。
これは読みやすさの上で結構重要だったように思う。

各章の最後に「まとめ」として、要約が載っているのがとても良かった。
ハウツー本とかでは良く見る手法な気がするけど、技術本ではあまり見ないかも?

あくまで初歩ということで、扱う項目も最小限になっているっぽい。

  • agent/masterモードは扱わない
  • node情報を管理しない
  • 標準的なディレクトリ構成を用いない

自分は初歩を知りたかったので好都合でした。

総じて言うとすごい説明上手だなーと感じました。