Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

Related Books

Free with a 30 day trial from Scribd

See all

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

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

×