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

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

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

D484f3a4d5f516f943b29b9ff55a2040?s=128

thinkAmi

May 12, 2013
Tweet

Transcript

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

  2. 自己紹介 • @thinkAmi • hatenaID: thinkAmi • C#, Python, Ruby

    • 自社インフラ管理 • NSEG, GDG信州 • りんご好き • 食べたりんごの内訳を表示するアプリを作成とか • http://ringo-tabetter.herokuapp.com/
  3. PR • 5/25(土) DevFestJapan2013 信州会場 – 塩尻インキュベーションプラザ (SIP) – 5/15~17に開かれるGoogle

    I/Oの報告会 • セッションの解説・得られた情報の報告 etc • Google+ ハングアウトで日本の7会場を結び交流 – 珍しいガジェットも登場予定 • NexusQ, Pebble, etc (Glassは希望的観測) – Google Developer Expertの方々も参加
  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
  5. アジェンダ • ある環境のおはなし • Chef-solo, knife-solo, Vagrant • その先へ •

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

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

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

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

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

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

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

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

  14. ある環境のおはなし • 解決方法を考える – 変更履歴を残す • 履歴を書き忘れる... – 環境の内容を残す •

    環境を書き忘れる... – バージョン管理 • ファイルサイズが大きいとか... • ...どれもダメっぽい
  15. ある環境のおはなし • 動かないドキュメントより、 それだけで動く何かがほしい!!

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

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

    Chef-ServerとChef-soloがある
  18. Chef • 用語 – Cookbook • Recipe • Template •

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

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

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

  22. Chef • 例) Apache2のRecipe – インストール package "apache2" do action

    :install end – 起動 service "apache2" do action :start end
  23. Chef • Chefの管理・運用は手間...

  24. knife(ナイフ) • Chefの管理・運用を行うためのツール – cookbookのひな形を作成 – cookbookを転送してサーバーに適用 – etc •

    Chefに同梱 • プラグインあり – knife-soloとか
  25. knife-solo(ナイフソロ) • Chef-solo用にknifeを拡張するもの • Windowsでも動く – Windowsにはrsnyc(アールシンク) がないことから、 cookbookの転送は小細工する必要あり •

    Issue #167に上がっているので、希望を持つ https://github.com/matschaffer/knife-solo/issues/167 – rsyncがないとはいえ、Windowsにおいても 他の設定を自力でやるよりは、はるかにマシ
  26. ところで • 某おひとりさま環境 – 仮想環境の構築で使いたいんだが...

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

    Recipe等を指定
  28. Vagrant • 用語 – VagrantBox – Vagrantfile

  29. Vagrant • VagrantBox – 仮想マシンのひな形 (OSイメージ) – 公開されているものを利用 or 自作

    • 公開: Vagrantbox.es にて – 公開Boxが安全かどうかは自己責任 » dropboxで公開されているものとかあるし... • 自作: veewee を使う
  30. Vagrant • Vagrantfile – 仮想マシンの設定を行うファイル • ネットワークやGUI表示 etc – Rubyで記述

    – Chef連携は、このファイルに記載 • Windowsでは、(今のところ)ここで連携... – Cygwinがあれば、ここでなくても転送できるらしい – 他に良い情報があれば、ぜひ!
  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
  32. 3つのツールの連携 • 某おひとりさま環境 – knife-soloで環境準備 – Chef-soloでcookbook準備 – Vagrantで仮想マシンへcookbook転送し   自分がほしい仮想マシンをGet!

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

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

  35. 仮想マシンを手に入れる流れ • 2.Chef-soloを利用するための準備 – knife solo prepare vagrant@192.168.33.10 -P vagrant

    • これでcookbook適用の準備OK
  36. 仮想マシンを手に入れる流れ • 3.Chefのcookbook適用のため、再起動 – vagrant reload • vagrant provision でchefのみ動作でもいいけ

    れど、念のため • 4.仮想マシンのできあがり!
  37. その他のコマンド • 仮想マシンの停止 – vagrant halt • 仮想マシンが不要なら削除 – vagrant

    destroy
  38. というわけで  

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

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

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

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

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

    • インストール・設定順はrecipeでOKだけど、 どのrecipeを使っていたんだっけ... – 微妙な課題 • そこら辺を自動化して履歴をとりたい
  44. そこで Jenkins project - http://jenkins-ci.org/

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

    履歴の保管に使ったりする
  46. Jenkins • 使ってみて良いと感じたところ – 仮想マシンの作成を自動化 • 夜中に放置できる – コマンド実行の履歴が残る •

    あとで見返すことができる – Jenkinsのジョブを再度実行すれば、    何回でも同じ仮想マシンが手に入る
  47. Jenkins • どんなふうに使ったか – Chef-solo, knife-solo, Vagrantの実行を PowerShellに記述し、Jenkinsで実行 – そのために、いくつか準備

    • PowerShellのセキュリティポリシーを変更 • JenkinsにPowershellプラグインを導入 • Jenkinsの実行ユーザは自分のアカウント • 環境変数を設定 – 「VBOX_USER_HOME」「VAGRANT_HOME」
  48. PowerShellの内容 • タイムスタンプ名のディレクトリを用意 • Gitリポジトリから、clone・copy • Vagrantfile, chefのcookbook – 必要に応じてブランチ指定

    – 本当は、“knife solo cook”したい... • Chef-solo, knife-solo, Vagrantを実行 • ジョブの終了をTwilioから電話連絡
  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"
  50. PowerShellソース # Chefの準備 cmd /C "knife solo prepare vagrant@192.168.33.10 -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()
  51. ご注意 • やりすぎ感があったので、 他の方法があれば、ぜひ教えてください!!

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

    デモ
  53. デモ • Jenkins + PowerShellで以下を実行 – Ubuntuの仮想マシンを作成 – UbuntuにApacheをインストール・起動 –

    仮想マシンは一度停止 • VirtualBoxで仮想マシンを起動 • ブラウザにて「It works」を確認
  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