昨日、クリエーションライン株式会社の堀田氏(@jhotta)が講師として開催された Chef ハンズオンセミナーに参加させて頂いたので、その内容を自分なりにまとめてみる。
参加の目的
- ふわっとした Chef の認識をクリアにしたかったので
- chef solo は触っているけど chef server については全く知らなかったので
- 第一線で活躍されている方の話を聞きたかった
- 会社で chef の導入を検討されているようなのでフィードバック出来ればと思ったので...
内容
- 以下、Evernote にメモった箇条書きをそのまま転載
- ブログ内では chef の表記が Chef とか chef とか統一されていないがご容赦くださいまし
chef とは
- モデルを基にして
- node の設定を自動化し
- その状態を保持し続ける
- フレームワーク
Chef Server のコンポーネント
- WebUI には Rails
- API を受け付ける proxy に nginx
- 後ろ側に Chef のエンジン(Erchef)
- DB は PostgreSQL
- MySQL だと思ってたw
- 画像は Opscode より拝借
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 最新事情
ハンズオン
ゴール
- ざっくり言うと Hosted Chef Server を使って EC2 インスタンスに Web サーバーを構築する!
アジェンダ(実際に行った内容)
メモ
- 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 をインストール
- cookbook の自作
- 今回使った resource は下記の通り
- cookbook_file
- execute
- service
- 今回使った resource は下記の通り
- 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 を書けるようにする
- デモサイトが見れんかったのはめっちゃ残念でした...