July Tech Festa 2013
2013/07/14
Gosuke Miyashita
サーバ
プロビジョニン
グ
Cloud or VM
Image
Launch
OS
Install
System
Configuration
Provisioning Toolchain by Lee Thompson at Velocity 2010
Applicati...
サーバ
プロビジョニン
グ
とテスト
監視とは継続的
なテストである
by @kazuho
Cloud or VM
Image
Launch
OS
Install
System
Configuration
Application Service
Orchestration
Bootstrapping
Configuration
Orc...
Zabbix/NagiosによるApacheの
テスト(監視)
httpdプロセスが動いているか
80番ポートに外からアクセスでき
るか
80番ポートが正しいレスポンスを
返すか
serverspecによるApacheのテス
ト
httpdプロセスが動いているか
80番ポートをListenしているか
httpdパッケージが入っているか
自動起動するようになっているか
設定ファイルが存在するか
正しい設定がされ...
Orchestration領域のテス
ト
Zabbix
Nagios
Configuration領域のテス
ト
serverspec
Configuration領域に
おけるテスト
みなさん
どうやってますか?
シェルコマンド叩
く?
シェルスクリプト?
実際にサービスに
アクセスする?
Configuration
Management
Framework
Configuration
Management Framework
とテスト
これはテスト
どうやってますか?
シェルコマンド叩
く?
シェルスクリプト?
実際にサービスに
アクセスする?
この界隈は様々な
テストツールが存在
シンタックスチェック
Foodcritic
knife cookbook test
puppet-lint
ユニットテスト
Chefspec
rspec-puppet
require 'chefspec'
describe 'http_server::default' do
let (:chef_run) {
ChefSpec::ChefRunner.new.converge
'http_server::de...
結合テスト
Minitest Chef Handler
Cucumber Chef
Test Kitchen
rspec-system
serverspec
class TestNginx < MiniTest::Chef::TestCase
def test_package_is_installed
assert_installed package("nginx")
end
def test_se...
Infrastructure as Code
からの自然な流れ
サーバの状態を
コードで記述
↓
状態のテストも
コードで記述
serverspecは
この流れの中で
生まれたもの
severspecとは
サーバの状態を簡潔な
コードで記述して
テストするための仕組
み
サーバの状態を
RSpecで記述
RSpec?
Rubyのテスト
フレームワーク
describe Array, "when empty" do
before do
@empty_array = []
end
it "should be empty" do
expect(@empty_array).to be_empty
e...
serverspecに
よるテスト
describe package('httpd') do
it { should be_installed }
end
describe service('httpd') do
it { should be_enabled }
it { sho...
基本的に
シェルコマンド叩い
て
チェックしてるだけ
テスト対象のサーバ
にSSHで接続して
コマンドを叩く
シェルコマンド実行
によるサーバのテス
トをスマートにやれ
るようにしたのが
serverspec
serverspecの
始め方
# yum install rubygems
# gem install serverspec rake
# serverspec-init
# rake spec
デモ
詳細は
http://serverspec.org/
serverspec
をつくった理由
PuppetやChef
使っていてそもそも
serverspecって必要?
そもそも
PuppetやChefに
テストって必要?
レシピやマニフェスト
が正しく書けたかどう
か
必ずテストしますよ
ね?
一度書いたマニフェス
トやレシピを更新しな
いのであればそれほど
必要ではないかも
マニフェストやレシ
ピを継続的に更新す
る
なら必要性が高まる
プログラムの
リファクタリングと
一緒
様々なテストツール
が存在するのになぜ
わざわざserverspecを
つくったのか?
既存ツールは機能が
多すぎたり、特定の
ツールに依存してた
りするのがイヤ
serverspecの特徴
マニフェストを継続
的に更新するなら
テストコードも
継続的な更新が必要
なのでテストコード
の読みやすさや
書きやすさも重要
テストツール自体の
シンプルさも重要
ChefやPuppetに
依存しない
テスト対象のサーバ
にエージェント不要
テスト対象のサーバ
にRubyすら不要
テスト以外の余計な
機能がない
利用のための
敷居が低い
テストはシェルコマ
ンドを実行してるだ
け
問題が起きたときに
調査しやすい
serverspecの応用
サーバ構築の継続的
インテグレーション
Puppetマニフェストを
更新したら自動でマニ
フェスト適用と
serverspecによるテス
トを実行
まとめ
シェルコマンド実行
によるサーバのテス
トをスマートにやれ
るようにしたのが
serverspec
読みやすい
書きやすい
わかりやすい
要するに
簡潔
簡潔さ超重要
ビジネス要件は
絶えず変化する
それに伴いシステム
も変化し複雑に
複雑さと変化に対応
するためには継続的
なテスト重要
テストコード自体も
システムに伴い
変化し複雑になる
なのでできるだけ
簡潔に記述しテスト
できることが重要
serverspecとは
現実のシステムの
複雑さと変化に
対応するために
システムのあるべき
状態を簡潔に記述し
継続的にテストする
ためのもの
おまけ
miyagawa podcast ep14
でserverspecについて
話してます
おしまい
Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013
Serverspec at July Tech Festa 2013
Upcoming SlideShare
Loading in...5
×

Serverspec at July Tech Festa 2013

3,542
-1

Published on

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

No Downloads
Views
Total Views
3,542
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
30
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. おしまい
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×