(株)タイムインタメーディア
小宮健 (@tk0miya)
http://www.flickr.com/photos/chiotsrun/4464944256/
自己紹介:小宮 健
 仕事
 (株)タイムインターメディア所属
 参加コミュニティ
 Sphinx-users.jp
 Python mini hack-a-thon
 Author of blockdiag
 Chef 歴 1.5年ぐらい
 Community cookbook 推進派です
 こつこつ Pull Req. 投げてます
Twitter: @tk0miya
chef を使って環境構築しよう
 OS の設定
 Yum/Apt, NTP, Firewall, etc…
 ミドルウェアのインストール
 JDK/JRE, Ruby, Python, PHP, etc…
 Nginx/Apache, MySQL, memcached, etc…
 アプリのデプロイ
 あれ、どうやってやるんだろう?
chef でアプリをデプロイする
 application cookbook を使う
 OpsCode 公式 cookbook
 Java, PHP, Python, Rails に対応
 利用事例が少ない (ググりづらい…)
 運用方法がよく分からない
 バージョンアップの仕方
 切り戻しの方法
 実験的に一部のサーバにだけ入れたい
デプロイ時にやること
 アプリ(ソースコード/バイナリ)の配布
 リリース前の準備
 asset precompile
 JavaScript Compile/minify
 トラブル発生時のバージョンダウン(切り
戻し)
 DB Migration
 データ修正
 一部の操作は『冪等性』と相性が悪く、
chef に任せづらい
Capistrano
 手元の端末からデプロイを行うツール
 デプロイ以外のメンテナンス用途にも使え
る
 切り戻しが考慮されている
 情報がたくさんある
 デプロイは専用ツールの方がやりやすい
Capistrano/Chef を組み合わせる
 環境構築/更新は chef-solo
 アプリのデプロイは capistrano
 それぞれの長所を組み合わせる
+
なぜ chef-solo なの?
 扱うサーバの台数が少ない (〜10台)
 chef-server を使うのは大げさ
 chef-server を入れるリソースがもったいない
 ほとんど構成が変化しない
 運用・保守に入ると変化が少なくなる
 定期的にセキュリティアップデートをするぐ
らい
 Chef-client 分のメモリが惜しい
Let's cooking!
 まずは chef-solo で環境を作ろう
 Chef-solo といえば knife-solo ですよね
 id:naoya 本は必読ですよ
 えっ?ホスト名を並べなくちゃいけない
の!?
$ echo ec2-user@xxx.amazonaws.com ... | 
xargs -n 1 knife solo cook -i your.pem
knife-solo の残念なところ
 ホストを列挙しないといけない
 それ AWS SDK でできるよ
 並列実行できない
 それ xargs -P でできるよ
 自動化用にスクリプトを書かなくちゃ…
 それ capistrano でできるよ
それ capistrano でできるよ
 ホストを列挙しないといけない
 AWS SDK で対象ホストを自動抽出
 Web にはサンプルが大量に
 いくつか gem もあるよ
 ELB 配下のホスト、タグ検索、特定の名前…
 並列実行できない
 基本的にすべての処理が並列に行われる
 max_hosts 指定で制限も掛けられる
capistrano 経由で chef-solo を実行す
る
 AWS SDK で対象ホストを抽出する
 cookbook などのファイルを転送する
 chef-solo を実行する
capistrano 経由で chef-solo を実行す
る
 たくさんブログ記事がある
 gem もいくつもある
 capistrano_chef_solo
 capistrano-chef
 capistrano-chef-solo
 yyuu-capistrano-chef-solo
 chefistrano
 roundsman
capistrano 経由で chef-solo を実行す
る
 gem はいくつもあるが…
 試しに作ってみた系の実装が多い
 data_bags, roles に対応していない
 data_bags の暗号鍵も対応してない
 なぜか /tmp 以下で作業している…
 Attributes を deploy.rb に書くことになってい
る
 ホストごとに設定を切り替えられない
 というわけで、新たに作ってみました
 paratrooper-chef
http://www.flickr.com/photos/thenationalguard/8029811025/
http://www.flickr.com/photos/thenationalguard/8029811025/
【Paratrooper】
落下傘兵 《paratroops の一員》.
http://www.flickr.com/photos/thenationalguard/8029811025/
http://www.flickr.com/photos/thenationalguard/8029811025/
【Chef】
コック; (特に)(レストランなどの)コック
This is paratrooper-chef
既存の gems との違い
 roles や data_bags に対応
 data_bags の暗号鍵も扱える
 librarian に対応
 berkshelf は次バージョンで対応予定
 ホスト毎に設定が変えられる
 Windows でも動く (rsync を使っていない)
使い方
 deploy.rb の中で require する
 config/cookbooks に cookbooks を配置
 config/solo.json を作る
 capistrano を実行する
require 'capistrano-paratrooper-chef’
$ cap paratrooper:chef
paratrooper-chef デモ
 デモやります。
 今回は paratrooper-chef を使っています
が、もちろん capistrano も同様のことが
できます
Q. chef のインストールもやってほし
い
 対応してます。
 omnibus installer 経由 / gem 経由
 deploy:setup でインストールされるように
 see README.md
Q. ホスト毎に設定を変えたい
 knife-solo っぽい仕組みを用意
 ホスト毎の定義ファイルを用意しておく
 config/nodes/[hostname].json
 接続先のホストによって自動的に切り替え
 見つからない場合は config/solo.json を使う
Q. cookbook マネージャを使いたい
 librarian に対応
 Cookbook 転送時に自動的に librarian 実行
 ユーザは Cheffile を書いておくだけ
 次バージョンで berkshelf に対応予定
Q. capistrano 使ったことないんだけ
ど
 knife paratrooper init コマンドを用意
 knife solo init っぽいもの
 必要な構成ファイルを生成してくれる
 近日リリース予定
 knife-paratrooper パッケージとなる予定
Q. Capistrano のロールをうまく使い
たい
 capistrano では、対象ホストにロールを設
定
role :web, "210.xx.xx.xx”
role :app, "210.xx.xx.xx”
role :db, "210.xx.xx.xx"
 chef でもこのロールを使えないだろうか?
 chef_roles_auto_discovery 機能
chef_roles_auto_discovery
 Capistrano と Chef のロールを対応付ける
 対応する Chef のロールがあれば自動適用
 例:
role :app, “210.xx.xx.xx”
# => config/roles/app.json が(あれば)適用される
chef_roles_auto_discovery + AWS SDK
 AWS SDK と組み合わせると…
 インスタンス名(Name)でロールを決める
 web01 → web ロール
 app01 → app ロール
 タグによってロールを決める
 role=web,app → web ロールと app ロールを適
用
Capistrano + chef-solo の弱点
 規模が大きい場合はやっぱり chef-server
 デプロイ方法も変化するかも?
 AutoScaling には別の仕組みが必要
 CloudInit など
 運用中は capistrano も組み合わせる
 この部分はまだ模索中
まとめ
 アプリのデプロイは capistrano が便利
 小規模環境なら chef-solo を使いたくなる
 Capistrano + chef-solo の組合せは使える
 それ paratrooper-chef なら簡単にできるよ
http://www.flickr.com/photos/thenationalguard/8029811025/

Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug