Upgrade to Pro — share decks privately, control downloads, hide ads and more …

おひとりさま環境でのChef-solo使用例

 おひとりさま環境でのChef-solo使用例

NSEG #39 で発表した時のスライドです。

thinkAmi

May 12, 2013
Tweet

More Decks by thinkAmi

Other Decks in Programming

Transcript

  1. おひとりさま環境での
    Chef-solo 使用例
    NSEG #39 2013.05.11
    @thinkAmi

    View Slide

  2. 自己紹介
    • @thinkAmi
    • hatenaID: thinkAmi
    • C#, Python, Ruby
    • 自社インフラ管理
    • NSEG, GDG信州
    • りんご好き
    • 食べたりんごの内訳を表示するアプリを作成とか
    • http://ringo-tabetter.herokuapp.com/

    View Slide

  3. PR
    • 5/25(土) DevFestJapan2013 信州会場
    – 塩尻インキュベーションプラザ (SIP)
    – 5/15~17に開かれるGoogle I/Oの報告会
    • セッションの解説・得られた情報の報告 etc
    • Google+ ハングアウトで日本の7会場を結び交流
    – 珍しいガジェットも登場予定
    • NexusQ, Pebble, etc (Glassは希望的観測)
    – Google Developer Expertの方々も参加

    View Slide

  4. PR
    • 5/25(土) DevFestJapan2013 信州会場
    – 詳細は...
    • イベントページ
    – https://sites.google.com/site/devfestjapan2013/
    • DevFest Japan 2013 信州会場 紹介pdf
    – https://docs.google.com/file/d/0B-
    jPssOUp2xCNEx5aWt0ZXVrQ0U/edit?usp=sharing
    • GDG信州のハッシュタグ #gdgshinshu
    – 5/15深夜、Google I/O Extend 信州会場?!
    – http://www.zusaar.com/event/654003

    View Slide

  5. アジェンダ
    • ある環境のおはなし
    • Chef-solo, knife-solo, Vagrant
    • その先へ
    • デモ

    View Slide

  6. その前に
    • デモの準備に時間がかかるため、   
    事前に仕込んでいます
    • 準備が終わったら、手元の携帯電話に 
    連絡がきますが、気にしないでください

    View Slide

  7. アジェンダ
    • ある環境のおはなし
    • Chef-solo, knife-solo, Vagrant
    • その先へ
    • デモ

    View Slide

  8. ある環境のおはなし
    • 某おひとりさま
    – Windows使い
    – 某社内インフラで利用

    View Slide

  9. ある環境のおはなし
    • 仮想マシン登場前
    – 物理サーバーを用意・インストール
    • サーバーを買ってもらうのが大変...
    • 再インストールや類似環境の構築が手間...

    View Slide

  10. ある環境のおはなし
    • 仮想マシン登場後
    – 物理サーバー1つで、複数の環境を構築
    – スナップショットやVMファイルのコピーで、
    環境の複製などが容易に
    – がんがん仮想マシンを作るようになった

    View Slide

  11. ある環境のおはなし
    • そのうちに...
    – あれ、どのVMが最新版だっけ...
    – そもそも何が入っているっけ...
    – 手順はどこだっけ...

    View Slide

  12. ある環境のおはなし
    • ひどいことに

    View Slide

  13. ある環境のおはなし
    • デジャヴ

    View Slide

  14. ある環境のおはなし
    • 解決方法を考える
    – 変更履歴を残す
    • 履歴を書き忘れる...
    – 環境の内容を残す
    • 環境を書き忘れる...
    – バージョン管理
    • ファイルサイズが大きいとか...
    • ...どれもダメっぽい

    View Slide

  15. ある環境のおはなし
    • 動かないドキュメントより、
    それだけで動く何かがほしい!!

    View Slide

  16. アジェンダ
    • ある環境のおはなし
    • Chef-solo, knife-solo, Vagrant
    • その先へ
    • デモ

    View Slide

  17. Chef (シェフ)
    • サーバーのシステム構築・運用を
    管理・自動化するフレームワーク
    – Puppetみたいなもの
    • Rubyで設定を書く
    • Chef-ServerとChef-soloがある

    View Slide

  18. Chef
    • 用語
    – Cookbook
    • Recipe
    • Template
    • Attribute
    – Node
    – Role
    – etc

    View Slide

  19. Chef
    • まずはこれだけ
    – Cookbook
    • Recipe
    • Attribute
    • Template
    – Node
    – Role
    – etc

    View Slide

  20. Chef
    • Cookbook
    – 環境設定の定義を、まとめたもの
    – 環境設定の定義
    • Recipe
    • Template
    • Attribute
    • etc

    View Slide

  21. Chef
    • Recipe
    – インストールや設定などの実行手順を記載

    View Slide

  22. Chef
    • 例) Apache2のRecipe
    – インストール
    package "apache2" do
    action :install
    end
    – 起動
    service "apache2" do
    action :start
    end

    View Slide

  23. Chef
    • Chefの管理・運用は手間...

    View Slide

  24. knife(ナイフ)
    • Chefの管理・運用を行うためのツール
    – cookbookのひな形を作成
    – cookbookを転送してサーバーに適用
    – etc
    • Chefに同梱
    • プラグインあり
    – knife-soloとか

    View Slide

  25. knife-solo(ナイフソロ)
    • Chef-solo用にknifeを拡張するもの
    • Windowsでも動く
    – Windowsにはrsnyc(アールシンク)
    がないことから、
    cookbookの転送は小細工する必要あり
    • Issue #167に上がっているので、希望を持つ
    https://github.com/matschaffer/knife-solo/issues/167
    – rsyncがないとはいえ、Windowsにおいても
    他の設定を自力でやるよりは、はるかにマシ

    View Slide

  26. ところで
    • 某おひとりさま環境
    – 仮想環境の構築で使いたいんだが...

    View Slide

  27. Vagrant (ベイグラント)
    • VirtualBoxのVMを設定・操作するツール
    – Rubyで設定を書く
    • Chefと連携可能
    – Chefのcookbooks, Recipe等を指定

    View Slide

  28. Vagrant
    • 用語
    – VagrantBox
    – Vagrantfile

    View Slide

  29. Vagrant
    • VagrantBox
    – 仮想マシンのひな形 (OSイメージ)
    – 公開されているものを利用 or 自作
    • 公開: Vagrantbox.es にて
    – 公開Boxが安全かどうかは自己責任
    » dropboxで公開されているものとかあるし...
    • 自作: veewee を使う

    View Slide

  30. Vagrant
    • Vagrantfile
    – 仮想マシンの設定を行うファイル
    • ネットワークやGUI表示 etc
    – Rubyで記述
    – Chef連携は、このファイルに記載
    • Windowsでは、(今のところ)ここで連携...
    – Cygwinがあれば、ここでなくても転送できるらしい
    – 他に良い情報があれば、ぜひ!

    View Slide

  31. Vagrantfile
    Vagrant.configure("2") do |config|
    # VagrantBox名
    config.vm.box = "hoge"
    # knife soloで 使 用 す る SSHの た め の IPア ド レ ス 設 定
    config.vm.network :private_network, ip: "192.168.33.10"
    # Recipeの 実 行
    config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = "./chef-repo/cookbooks"
    chef.add_recipe "piyo"
    end
    end

    View Slide

  32. 3つのツールの連携
    • 某おひとりさま環境
    – knife-soloで環境準備
    – Chef-soloでcookbook準備
    – Vagrantで仮想マシンへcookbook転送し  
    自分がほしい仮想マシンをGet!
    • 普通はChefのcookbookのテストとかで使うかと

    View Slide

  33. 仮想マシンを手に入れる流れ
    • 流れの前に
    – 各ツールのインストールやcookbook,
    Vagrantfileなどの構築は省略します
    • 書籍やBlogで数多くあるため

    View Slide

  34. 仮想マシンを手に入れる流れ
    • 1.VagrantBoxを元にした仮想マシン起動
    – vagrant up
    • cookbook適用しないようVagrantfileへ記述
    – Chef-soloの準備を先にやらないと、途中で失敗する

    View Slide

  35. 仮想マシンを手に入れる流れ
    • 2.Chef-soloを利用するための準備
    – knife solo prepare
    [email protected] -P vagrant
    • これでcookbook適用の準備OK

    View Slide

  36. 仮想マシンを手に入れる流れ
    • 3.Chefのcookbook適用のため、再起動
    – vagrant reload
    • vagrant provision でchefのみ動作でもいいけ
    れど、念のため
    • 4.仮想マシンのできあがり!

    View Slide

  37. その他のコマンド
    • 仮想マシンの停止
    – vagrant halt
    • 仮想マシンが不要なら削除
    – vagrant destroy

    View Slide

  38. というわけで
     

    View Slide

  39. ある環境のおはなし
    • ビフォー

    View Slide

  40. ある環境のおはなし
    • ビフォーアフター

    View Slide

  41. アジェンダ
    • ある環境のおはなし
    • Chef-solo, knife-solo, Vagrant
    • その先へ
    • デモ

    View Slide

  42. ある環境のおはなし(再掲)
    • そのうちに...
    – あれ、どのVMが最新版だっけ...
    – そもそも何が入っているっけ...
    – 手順はどこだっけ...

    View Slide

  43. ある環境のおはなし
    • そのうちに...
    – あれ、どのVMが最新版だっけ... 解決
    – そもそも何が入っているっけ...  解決
    – 手順はどこだっけ...
    • インストール・設定順はrecipeでOKだけど、
    どのrecipeを使っていたんだっけ...
    – 微妙な課題
    • そこら辺を自動化して履歴をとりたい

    View Slide

  44. そこで
    Jenkins project - http://jenkins-ci.org/

    View Slide

  45. Jenkins (ジェンキンス)
    • CI (継続的インテグレーション)ツール
    • 一般的な環境ではプログラムのビルドや
    テストの自動化で使う
    • 某おひとりさま環境では、自動実行と 
    履歴の保管に使ったりする

    View Slide

  46. Jenkins
    • 使ってみて良いと感じたところ
    – 仮想マシンの作成を自動化
    • 夜中に放置できる
    – コマンド実行の履歴が残る
    • あとで見返すことができる
    – Jenkinsのジョブを再度実行すれば、   
    何回でも同じ仮想マシンが手に入る

    View Slide

  47. Jenkins
    • どんなふうに使ったか
    – Chef-solo, knife-solo, Vagrantの実行を
    PowerShellに記述し、Jenkinsで実行
    – そのために、いくつか準備
    • PowerShellのセキュリティポリシーを変更
    • JenkinsにPowershellプラグインを導入
    • Jenkinsの実行ユーザは自分のアカウント
    • 環境変数を設定
    – 「VBOX_USER_HOME」「VAGRANT_HOME」

    View Slide

  48. PowerShellの内容
    • タイムスタンプ名のディレクトリを用意
    • Gitリポジトリから、clone・copy
    • Vagrantfile, chefのcookbook
    – 必要に応じてブランチ指定
    – 本当は、“knife solo cook”したい...
    • Chef-solo, knife-solo, Vagrantを実行
    • ジョブの終了をTwilioから電話連絡

    View Slide

  49. PowerShellソース
    # タイムスタンプのフォルダ作成&移動
    $datetime = Get-Date -format yyyyMMddhhmmss
    cd d:\
    mkdir $datetime
    cd $datetime
    # ChefのGitリポジトリ(d:\chef-repo)のうち、該当するブランチをクローン
    git clone -b nseg39 d:\chef-repo
    # VagrantのGitリポジトリからコピー
    # *基本的に変更がないので、最新のものをコピーをするという手抜き
    copy d:\chef-vagrant\Vagrantfile .
    # VMの起動
    cmd /C "vagrant up"

    View Slide

  50. PowerShellソース
    # Chefの準備
    cmd /C "knife solo prepare [email protected] -P vagrant"
    # VMの再起動とrecipeの実行
    cmd /C "vagrant reload"
    # 仮想環境構築が完了したため、シャットダウン
    cmd /C "vagrant halt"
    # 終わったので、Twilioにて連絡
    $webRequest = [System.Net.WebRequest]::Create($URL)
    $webRequest.ContentType = "text/html"
    $webRequest.ContentLength = 0
    $webRequest.Method = "POST"
    $response = $webRequest.GetResponse()

    View Slide

  51. ご注意
    • やりすぎ感があったので、
    他の方法があれば、ぜひ教えてください!!

    View Slide

  52. アジェンダ
    • ある環境のおはなし
    • Chef-solo, knife-solo, Vagrant
    • その先へ
    • デモ

    View Slide

  53. デモ
    • Jenkins + PowerShellで以下を実行
    – Ubuntuの仮想マシンを作成
    – UbuntuにApacheをインストール・起動
    – 仮想マシンは一度停止
    • VirtualBoxで仮想マシンを起動
    • ブラウザにて「It works」を確認

    View Slide

  54. 参考文献
    • naoyaさんの「入門Chef Solo」
    – http://tatsu-zine.com/books/chef-solo
    • Software Design 2012年10月号
    – http://gihyo.jp/magazine/SD/archive/20
    12/201210
    – 今なら総集編に含まれています
    • 自分のところ
    – http://d.hatena.ne.jp/thinkAmi/20130407/1365310673

    View Slide