ようへいの日々精進XP

よかろうもん

Chef ハンズオンに参加してきた一部始終

昨日、クリエーションライン株式会社の堀田氏(@jhotta)が講師として開催された Chef ハンズオンセミナーに参加させて頂いたので、その内容を自分なりにまとめてみる。

参加の目的

  • ふわっとした Chef の認識をクリアにしたかったので
  • chef solo は触っているけど chef server については全く知らなかったので
  • 第一線で活躍されている方の話を聞きたかった
  • 会社で chef の導入を検討されているようなのでフィードバック出来ればと思ったので...

内容

  • 以下、Evernote にメモった箇条書きをそのまま転載
  • ブログ内では chef の表記が Chef とか chef とか統一されていないがご容赦くださいまし

chef とは

  1. モデルを基にして
  2. node の設定を自動化し
  3. その状態を保持し続ける
  4. フレームワーク
Chef Server のコンポーネント
  • WebUI には Rails
  • API を受け付ける proxy に nginx
  • 後ろ側に Chef のエンジン(Erchef)
  • DB は PostgreSQL
    • MySQL だと思ってたw
  • 画像は Opscode より拝借

f:id:inokara:20130320094343p:plain

chef は何をしたいのか
  • 複雑性の管理
  • 安定した再現性の管理
  • べき等性(何度テストとしても同じ結果)
    • これ重要!!
  • Test 次 Action(実行される前に必ずテストを行って、差分がある時のみ実行される)
  • 設定の順次実行
  • 対象 node は物理サーバー、仮想サーバーどちらでもイケる
これだけは言いたい!
  • Chef Server に関する日本語 blog は古い!
  • Chef11 Server のインストールは簡単らしい!
Chef-server のインストール
  • 以下のステップでインストール完了
    • Opscode よりパッケージをダウンロード
    • パッケージをインストール
    • chef-server-ctl reconfigure
    • chef-server-ctl ctrl 
Chef-client のインストール
  • Omnibus Chef Packaging を使えばめちゃ簡単
curl -L http://www.opscode.com/chef/install.sh | bash
Ohai
  • 情報収集の鬼!
  • node の情報を JSON 形式で返してくれる
  • node 情報の有効活用

chef 最新事情

  • Chef11 Server まだ使ってないの?
    • レシピの適用失敗が GUI で確認出来る等、実運用でとても有難い機能が満載
  • amazon OpsWorks(chef-solo)
    • Chef9 を使っている
  • Chef11 から大きく変わった
    • エンタープライズ向け
    • Private Chef11 Server
  • facebook 一年間テストを行った
  • 10000 ノードまで裁ける
  • 底辺の拡大
    • 簡単にインストールが出来る!
  • オープンソース版とプライベート版の違い
    • 別物くらい違う
  • 新ドキュメントサイト
    • doc.opscode.com
    • ドキュメントが従来よりも整理され置かれるようになった

ハンズオン

ゴール
  • ざっくり言うと Hosted Chef Server を使って EC2 インスタンスに Web サーバーを構築する!
アジェンダ(実際に行った内容)
  • Hosted Chef Server のユーザー登録
  • Workstation(recipe を書いたりするマシン)の設定
  • knife-ec2 のインストールと設定
  • cookbook の準備と Hosted Chef Server での確認
  • Apache を設定する cookbook の自作
  • Workstation から knife コマンドで EC2 インスタンスを起動して設定
メモ
  • Hosted Chef Server
    • 無料トライアルがある
    • 以下のファイルを管理コンソールからダウンロードする(必須)
      • Userkey
      • 組織認証用の pem
      • knife.rb
  • Workstation に Chef-client をインストール
    • Omnibus installer を使えば簡単!
    • インストール先は /opt/chef
    • cookbook のテンプレートを Opscode から git で clone する(自分で作ることが出来るけど、こっちが簡単)
    • 自分で書いた recipe は site-cookbook に置く
    • Hosted Chef Server から取得した三つのファイルを Workstation の Chef リポジトリ内 .chef 以下に配置する
    • knife client list で Workstation の動作確認
  • knife-ec2 のインストール
    • Chef から AWS の EC2 をコントロール出来るプラグイン
    • Opscode には沢山のプラグインが配布されている
    • 組み込み用の gem でインストールする
      • sudo /opt/chef/embedded/bin/gem install knife-ec2 --no-ri --no-rdoc
    • knife.rb に EC2 のアクセス ID とかシークレットアクセスキーの設定を行う
  • cookbook の準備と Hosted Chef Server での確認
    • cookbook をインストール
      • knife cookbook site install xxxx
    • cookbook を Hosted Chef Server に登録
      • knife cookbook upload -a
    • アップロードした cookbook は Hosted Chef Server のマネージメントコンソールにて確認出来る
  • cookbook の自作
    • 今回使った resource は下記の通り
      • cookbook_file
      • execute
      • service
  • EC2 インスタンスを起動して設定
    • knife ec2 server create ... で起動
    • knife ec2 オプションを確認する
    • -r オプションでは role 以外にも recipe を設定すること出来た
    • でも...レシピの構文エラーでデモサイトを確認することが出来なかった...

質疑応答

ハンズオン中
  • レシピの構文チェックする方法は?
    • 幾つかある
      • Foodcritic(名前が粋だなw)
      • test-kitchen(vagrant でテストしてくれる)
      • knife cookbook test ${cookbook}
突撃質問
  • execute の使用していいもの?
    • puppet の exec と同じもの
    • puppet でも exec は多用するべきではないとあるが
    • chef 同様にべき等性を考慮すると execute を多用するべきではない
  • rpm リポジトリの登録、管理はどのようにするのが最善の方法か?
    • 手動で取得した rpm を cookbook_file を利用して node に転送して package でインストールしているのが現状
    • HTTP Request の get を使って取得した方がシンプル
      • なるほど

まとめ

  • Chef はサーバーの状態を保持し続ける為のフレームワーク(べき等性)
    • 手動でサーバーを設定するのは止めたい
  • Chef11 Server を使ってみるべし!
    • Chef Solo を卒業したら是非!
  • Hosted Chef Server は 5 ノードまでは無料!
    • 小さい会社であればこれで十分だな...
  • knife のプラグインは多数、状況に応じてダウンロードして使ってみる
  • レシピの構文チェックは幾つかある
    • knife cookbook test あたりが一番お手頃か?
  • execute の多用を禁ずる
  • もっと resource を勉強して、適材適所で recipe を書けるようにする
  • デモサイトが見れんかったのはめっちゃ残念でした...