33
Chef ののののののののの のののの Capistrano ののののの ( 株 ) 株株株株株株株株株株株 株株株 (@tk0miya) http://www.flickr.com/photos/chiotsrun/4464944256/

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

Embed Size (px)

Citation preview

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

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

( 株 ) タイムインタメーディア小宮健 (@tk0miya)

http://www.flickr.com/photos/chiotsrun/4464944256/

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

自己紹介:小宮 健

仕事( 株 ) タイムインターメディア所属

参加コミュニティSphinx-users.jpPython mini hack-a-thon

Author of blockdiagChef 歴 1.5 年ぐらい

Community cookbook 推進派ですこつこつ Pull Req. 投げてます

Twitter: @tk0miya

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

chef を使って環境構築しよう

OS の設定Yum/Apt, NTP, Firewall, etc…

ミドルウェアのインストールJDK/JRE, Ruby, Python, PHP, etc…Nginx/Apache, MySQL, memcached,

etc…アプリのデプロイ

あれ、どうやってやるんだろう ?

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

chef でアプリをデプロイする

application cookbook を使うOpsCode 公式 cookbook

Java, PHP, Python, Rails に対応

利用事例が少ない ( ググりづらい… )運用方法がよく分からない

バージョンアップの仕方切り戻しの方法実験的に一部のサーバにだけ入れたい

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

デプロイ時にやること

アプリ ( ソースコード / バイナリ ) の配布リリース前の準備

asset precompileJavaScript Compile/minify

トラブル発生時のバージョンダウン ( 切り戻し )

DB Migrationデータ修正一部の操作は『冪等性』と相性が悪く、  chef に任せづらい

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

Capistrano

手元の端末からデプロイを行うツールデプロイ以外のメンテナンス用途にも使

える切り戻しが考慮されている情報がたくさんある

デプロイは専用ツールの方がやりやすい

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

Capistrano/Chef を組み合わせる

環境構築 / 更新は chef-soloアプリのデプロイは capistrano

それぞれの長所を組み合わせる

+

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

なぜ chef-solo なの ?

扱うサーバの台数が少ない ( 〜 10 台 )chef-server を使うのは大げさchef-server を入れるリソースがもったいな

ほとんど構成が変化しない運用・保守に入ると変化が少なくなる定期的にセキュリティアップデートをするぐ

らいChef-client 分のメモリが惜しい

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

Let's cooking!

まずは chef-solo で環境を作ろうChef-solo といえば knife-solo ですよ

ねid:naoya 本は必読ですよ

えっ?ホスト名を並べなくちゃいけないの !?

$ echo [email protected] ... | \ xargs -n 1 knife solo cook -i your.pem

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

knife-solo の残念なところ

ホストを列挙しないといけないそれ AWS SDK でできるよ

並列実行できないそれ xargs -P でできるよ

自動化用にスクリプトを書かなくちゃ…それ capistrano でできるよ

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

それ capistrano でできるよ

ホストを列挙しないといけないAWS SDK で対象ホストを自動抽出Web にはサンプルが大量にいくつか gem もあるよELB 配下のホスト、タグ検索、特定の名前…

並列実行できない基本的にすべての処理が並列に行われるmax_hosts 指定で制限も掛けられる

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

capistrano 経由で chef-solo を実行する

AWS SDK で対象ホストを抽出するcookbook などのファイルを転送するchef-solo を実行する

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

capistrano 経由で chef-solo を実行する

たくさんブログ記事があるgem もいくつもある

capistrano_chef_solocapistrano-chefcapistrano-chef-soloyyuu-capistrano-chef-solochefistranoroundsman

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

capistrano 経由で chef-solo を実行する

gem はいくつもあるが…試しに作ってみた系の実装が多い

data_bags, roles に対応していないdata_bags の暗号鍵も対応してないなぜか /tmp 以下で作業している…Attributes を deploy.rb に書くことになっ

ているホストごとに設定を切り替えられない

というわけで、新たに作ってみましたparatrooper-chef

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

http://www.flickr.com/photos/thenationalguard/8029811025/

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

http://www.flickr.com/photos/thenationalguard/8029811025/

【 Paratrooper 】落下傘兵 《 paratroops の一員》 .

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

http://www.flickr.com/photos/thenationalguard/8029811025/

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

http://www.flickr.com/photos/thenationalguard/8029811025/

【 Chef 】コック ; ( 特に )( レストランなどの ) コック長 .

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

This is paratrooper-chef

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

既存の gems との違い

roles や data_bags に対応data_bags の暗号鍵も扱えるlibrarian に対応

berkshelf は次バージョンで対応予定ホスト毎に設定が変えられるWindows でも動く (rsync を使ってい

ない )

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

使い方

deploy.rb の中で require する

config/cookbooks に cookbooks を配置

config/solo.json を作るcapistrano を実行する

require 'capistrano-paratrooper-chef’

$ cap paratrooper:chef

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

paratrooper-chef デモ

デモやります。

今回は paratrooper-chef を使っていますが、もちろん capistrano も同様のことができます

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

Q. chef のインストールもやってほしい

対応してます。omnibus installer 経由 / gem 経由deploy:setup でインストールされるよ

うにsee README.md

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

Q. ホスト毎に設定を変えたい

knife-solo っぽい仕組みを用意

ホスト毎の定義ファイルを用意しておくconfig/nodes/[hostname].json

接続先のホストによって自動的に切り替え見つからない場合は config/solo.json を使

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

Q. cookbook マネージャを使いたい

librarian に対応Cookbook 転送時に自動的に librarian 実

行ユーザは Cheffile を書いておくだけ

次バージョンで berkshelf に対応予定

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

Q. capistrano 使ったことないんだけど

knife paratrooper init コマンドを用意knife solo init っぽいもの必要な構成ファイルを生成してくれる

近日リリース予定knife-paratrooper パッケージとなる予定

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

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 機能

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

chef_roles_auto_discovery

Capistrano と Chef のロールを対応付ける

対応する Chef のロールがあれば自動適用

例 :role :app, “210.xx.xx.xx”# => config/roles/app.json が ( あれば )適用される

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

chef_roles_auto_discovery + AWS SDK

AWS SDK と組み合わせると…インスタンス名 (Name) でロールを決め

るweb01 → web ロールapp01 → app ロール

タグによってロールを決めるrole=web,app → web ロールと app ロー

ルを適用

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

Capistrano + chef-solo の弱点

規模が大きい場合はやっぱり chef-serverデプロイ方法も変化するかも ?

AutoScaling には別の仕組みが必要CloudInit など運用中は capistrano も組み合わせるこの部分はまだ模索中

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

まとめ

アプリのデプロイは capistrano が便利小規模環境なら chef-solo を使いたくな

るCapistrano + chef-solo の組合せは使

えるそれ paratrooper-chef なら簡単にでき

るよ

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

http://www.flickr.com/photos/thenationalguard/8029811025/

Enjoy cooking!