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

11,022 views

Published on

Published in: Technology

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/

×