Serverspec at July Tech Festa 2013

3,952 views
3,800 views

Published on

Published in: Technology
0 Comments
22 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,952
On SlideShare
0
From Embeds
0
Number of Embeds
464
Actions
Shares
0
Downloads
32
Comments
0
Likes
22
Embeds 0
No embeds

No notes for slide

Serverspec at July Tech Festa 2013

  1. 1. July Tech Festa 2013 2013/07/14 Gosuke Miyashita
  2. 2. サーバ プロビジョニン グ
  3. 3. Cloud or VM Image Launch OS Install System Configuration Provisioning Toolchain by Lee Thompson at Velocity 2010 Application Service Orchestration Bootstrapping Configuration Orchestration Capistrano Fabric Puppet Chef EC2 OpenStack
  4. 4. サーバ プロビジョニン グ とテスト
  5. 5. 監視とは継続的 なテストである by @kazuho
  6. 6. Cloud or VM Image Launch OS Install System Configuration Application Service Orchestration Bootstrapping Configuration Orchestration Nagios Zabbix serverspec ???
  7. 7. Zabbix/NagiosによるApacheの テスト(監視) httpdプロセスが動いているか 80番ポートに外からアクセスでき るか 80番ポートが正しいレスポンスを 返すか
  8. 8. serverspecによるApacheのテス ト httpdプロセスが動いているか 80番ポートをListenしているか httpdパッケージが入っているか 自動起動するようになっているか 設定ファイルが存在するか 正しい設定がされているか
  9. 9. Orchestration領域のテス ト Zabbix Nagios Configuration領域のテス ト serverspec
  10. 10. Configuration領域に おけるテスト
  11. 11. みなさん どうやってますか?
  12. 12. シェルコマンド叩 く? シェルスクリプト? 実際にサービスに アクセスする?
  13. 13. Configuration Management Framework
  14. 14. Configuration Management Framework とテスト
  15. 15. これはテスト どうやってますか?
  16. 16. シェルコマンド叩 く? シェルスクリプト? 実際にサービスに アクセスする?
  17. 17. この界隈は様々な テストツールが存在
  18. 18. シンタックスチェック Foodcritic knife cookbook test puppet-lint
  19. 19. ユニットテスト Chefspec rspec-puppet
  20. 20. require 'chefspec' describe 'http_server::default' do let (:chef_run) { ChefSpec::ChefRunner.new.converge 'http_server::default‘ } it 'should install nginx' do expect(chef_run).to install_package 'nginx' end it 'should start nginx' do expect(chef_run).to start_service 'nginx' end end
  21. 21. 結合テスト Minitest Chef Handler Cucumber Chef Test Kitchen rspec-system serverspec
  22. 22. class TestNginx < MiniTest::Chef::TestCase def test_package_is_installed assert_installed package("nginx") end def test_service_is_running assert_running service("nginx") end end
  23. 23. Infrastructure as Code からの自然な流れ
  24. 24. サーバの状態を コードで記述 ↓ 状態のテストも コードで記述
  25. 25. serverspecは この流れの中で 生まれたもの
  26. 26. severspecとは
  27. 27. サーバの状態を簡潔な コードで記述して テストするための仕組 み
  28. 28. サーバの状態を RSpecで記述
  29. 29. RSpec?
  30. 30. Rubyのテスト フレームワーク
  31. 31. describe Array, "when empty" do before do @empty_array = [] end it "should be empty" do expect(@empty_array).to be_empty end it "should size 0" do expect(@empty_array.size).to eq 0 end end
  32. 32. serverspecに よるテスト
  33. 33. describe package('httpd') do it { should be_installed } end describe service('httpd') do it { should be_enabled } it { should be_running } end describe port(80) do it { should be_listening } end
  34. 34. 基本的に シェルコマンド叩い て チェックしてるだけ
  35. 35. テスト対象のサーバ にSSHで接続して コマンドを叩く
  36. 36. シェルコマンド実行 によるサーバのテス トをスマートにやれ るようにしたのが serverspec
  37. 37. serverspecの 始め方
  38. 38. # yum install rubygems # gem install serverspec rake # serverspec-init # rake spec
  39. 39. デモ
  40. 40. 詳細は http://serverspec.org/
  41. 41. serverspec をつくった理由
  42. 42. PuppetやChef 使っていてそもそも serverspecって必要?
  43. 43. そもそも PuppetやChefに テストって必要?
  44. 44. レシピやマニフェスト が正しく書けたかどう か 必ずテストしますよ ね?
  45. 45. 一度書いたマニフェス トやレシピを更新しな いのであればそれほど 必要ではないかも
  46. 46. マニフェストやレシ ピを継続的に更新す る なら必要性が高まる
  47. 47. プログラムの リファクタリングと 一緒
  48. 48. 様々なテストツール が存在するのになぜ わざわざserverspecを つくったのか?
  49. 49. 既存ツールは機能が 多すぎたり、特定の ツールに依存してた りするのがイヤ
  50. 50. serverspecの特徴
  51. 51. マニフェストを継続 的に更新するなら テストコードも 継続的な更新が必要
  52. 52. なのでテストコード の読みやすさや 書きやすさも重要
  53. 53. テストツール自体の シンプルさも重要
  54. 54. ChefやPuppetに 依存しない
  55. 55. テスト対象のサーバ にエージェント不要
  56. 56. テスト対象のサーバ にRubyすら不要
  57. 57. テスト以外の余計な 機能がない
  58. 58. 利用のための 敷居が低い
  59. 59. テストはシェルコマ ンドを実行してるだ け
  60. 60. 問題が起きたときに 調査しやすい
  61. 61. serverspecの応用
  62. 62. サーバ構築の継続的 インテグレーション
  63. 63. Puppetマニフェストを 更新したら自動でマニ フェスト適用と serverspecによるテス トを実行
  64. 64. まとめ
  65. 65. シェルコマンド実行 によるサーバのテス トをスマートにやれ るようにしたのが serverspec
  66. 66. 読みやすい 書きやすい わかりやすい
  67. 67. 要するに 簡潔
  68. 68. 簡潔さ超重要
  69. 69. ビジネス要件は 絶えず変化する
  70. 70. それに伴いシステム も変化し複雑に
  71. 71. 複雑さと変化に対応 するためには継続的 なテスト重要
  72. 72. テストコード自体も システムに伴い 変化し複雑になる
  73. 73. なのでできるだけ 簡潔に記述しテスト できることが重要
  74. 74. serverspecとは
  75. 75. 現実のシステムの 複雑さと変化に 対応するために
  76. 76. システムのあるべき 状態を簡潔に記述し 継続的にテストする ためのもの
  77. 77. おまけ
  78. 78. miyagawa podcast ep14 でserverspecについて 話してます
  79. 79. おしまい

×