Serverspec at July Tech Festa 2013

89
July Tech Festa 2013 2013/07/14 Gosuke Miyashita

description

 

Transcript of Serverspec at July Tech Festa 2013

Page 1: Serverspec at July Tech Festa 2013

July Tech Festa 20132013/07/14

Gosuke Miyashita

Page 2: Serverspec at July Tech Festa 2013

サーバプロビジョニン

Page 3: Serverspec at July Tech Festa 2013

Cloud or VMImage Launch

OSInstall

SystemConfiguration

Provisioning Toolchain by Lee Thompson at Velocity 2010

Application ServiceOrchestration

Bootstrapping

Configuration

OrchestrationCapistranoFabric

PuppetChef

EC2OpenStack

Page 4: Serverspec at July Tech Festa 2013

サーバプロビジョニン

グとテスト

Page 5: Serverspec at July Tech Festa 2013

監視とは継続的なテストである

by @kazuho

Page 6: Serverspec at July Tech Festa 2013

Cloud or VMImage Launch

OSInstall

SystemConfiguration

Application ServiceOrchestration

Bootstrapping

Configuration

Orchestration NagiosZabbix

serverspec

???

Page 7: Serverspec at July Tech Festa 2013

Zabbix/Nagiosによる Apacheのテスト(監視)

httpdプロセスが動いているか80番ポートに外からアクセスできるか80番ポートが正しいレスポンスを返すか

Page 8: Serverspec at July Tech Festa 2013

serverspecによる Apacheのテスト

httpdプロセスが動いているか80番ポートを Listenしているかhttpdパッケージが入っているか自動起動するようになっているか設定ファイルが存在するか正しい設定がされているか

Page 9: Serverspec at July Tech Festa 2013

Orchestration領域のテストZabbixNagiosConfiguration領域のテストserverspec

Page 10: Serverspec at July Tech Festa 2013

Configuration領域におけるテスト

Page 11: Serverspec at July Tech Festa 2013

みなさんどうやってますか?

Page 12: Serverspec at July Tech Festa 2013

シェルコマンド叩く?

シェルスクリプト?実際にサービスにアクセスする?

Page 13: Serverspec at July Tech Festa 2013

ConfigurationManagementFramework

Page 14: Serverspec at July Tech Festa 2013
Page 15: Serverspec at July Tech Festa 2013
Page 16: Serverspec at July Tech Festa 2013
Page 17: Serverspec at July Tech Festa 2013

ConfigurationManagement Framework

とテスト

Page 18: Serverspec at July Tech Festa 2013

これはテストどうやってますか?

Page 19: Serverspec at July Tech Festa 2013

シェルコマンド叩く?

シェルスクリプト?実際にサービスにアクセスする?

Page 20: Serverspec at July Tech Festa 2013

この界隈は様々なテストツールが存在

Page 21: Serverspec at July Tech Festa 2013

シンタックスチェックFoodcriticknife cookbook testpuppet-lint

Page 22: Serverspec at July Tech Festa 2013

ユニットテストChefspecrspec-puppet

Page 23: Serverspec at July Tech Festa 2013

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' endend

Page 24: Serverspec at July Tech Festa 2013

結合テストMinitest Chef HandlerCucumber ChefTest Kitchenrspec-systemserverspec

Page 25: Serverspec at July Tech Festa 2013

class TestNginx < MiniTest::Chef::TestCase def test_package_is_installed assert_installed package("nginx") end

def test_service_is_running assert_running service("nginx") endend

Page 26: Serverspec at July Tech Festa 2013

Infrastructure as Codeからの自然な流れ

Page 27: Serverspec at July Tech Festa 2013

サーバの状態をコードで記述

↓状態のテストもコードで記述

Page 28: Serverspec at July Tech Festa 2013

serverspecはこの流れの中で生まれたもの

Page 29: Serverspec at July Tech Festa 2013

severspecとは

Page 30: Serverspec at July Tech Festa 2013

サーバの状態を簡潔なコードで記述して

テストするための仕組み

Page 31: Serverspec at July Tech Festa 2013

サーバの状態をRSpecで記述

Page 32: Serverspec at July Tech Festa 2013

RSpec?

Page 33: Serverspec at July Tech Festa 2013

Rubyのテストフレームワーク

Page 34: Serverspec at July Tech Festa 2013

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 endend

Page 35: Serverspec at July Tech Festa 2013

serverspecによるテスト

Page 36: Serverspec at July Tech Festa 2013

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

Page 37: Serverspec at July Tech Festa 2013
Page 38: Serverspec at July Tech Festa 2013
Page 39: Serverspec at July Tech Festa 2013

基本的にシェルコマンド叩い

てチェックしてるだけ

Page 40: Serverspec at July Tech Festa 2013

テスト対象のサーバに SSHで接続してコマンドを叩く

Page 41: Serverspec at July Tech Festa 2013

シェルコマンド実行によるサーバのテストをスマートにやれるようにしたのが

serverspec

Page 42: Serverspec at July Tech Festa 2013

serverspecの始め方

Page 43: Serverspec at July Tech Festa 2013

# yum install rubygems# gem install serverspec rake# serverspec-init# rake spec

Page 44: Serverspec at July Tech Festa 2013

デモ

Page 45: Serverspec at July Tech Festa 2013

詳細はhttp://serverspec.org/

Page 46: Serverspec at July Tech Festa 2013

serverspecをつくった理由

Page 47: Serverspec at July Tech Festa 2013

Puppetや Chef使っていてそもそも

serverspecって必要?

Page 48: Serverspec at July Tech Festa 2013

そもそもPuppetや Chefにテストって必要?

Page 49: Serverspec at July Tech Festa 2013

レシピやマニフェストが正しく書けたかどう

か必ずテストしますよ

ね?

Page 50: Serverspec at July Tech Festa 2013

一度書いたマニフェストやレシピを更新しないのであればそれほど必要ではないかも

Page 51: Serverspec at July Tech Festa 2013

マニフェストやレシピを継続的に更新す

るなら必要性が高まる

Page 52: Serverspec at July Tech Festa 2013

プログラムのリファクタリングと

一緒

Page 53: Serverspec at July Tech Festa 2013

様々なテストツールが存在するのになぜわざわざ serverspecをつくったのか?

Page 54: Serverspec at July Tech Festa 2013

既存ツールは機能が多すぎたり、特定のツールに依存してたりするのがイヤ

Page 55: Serverspec at July Tech Festa 2013

serverspecの特徴

Page 56: Serverspec at July Tech Festa 2013

マニフェストを継続的に更新するならテストコードも継続的な更新が必要

Page 57: Serverspec at July Tech Festa 2013

なのでテストコードの読みやすさや書きやすさも重要

Page 58: Serverspec at July Tech Festa 2013

テストツール自体のシンプルさも重要

Page 59: Serverspec at July Tech Festa 2013

Chefや Puppetに依存しない

Page 60: Serverspec at July Tech Festa 2013

テスト対象のサーバにエージェント不要

Page 61: Serverspec at July Tech Festa 2013

テスト対象のサーバに Rubyすら不要

Page 62: Serverspec at July Tech Festa 2013

テスト以外の余計な機能がない

Page 63: Serverspec at July Tech Festa 2013

利用のための敷居が低い

Page 64: Serverspec at July Tech Festa 2013

テストはシェルコマンドを実行してるだ

Page 65: Serverspec at July Tech Festa 2013

問題が起きたときに調査しやすい

Page 66: Serverspec at July Tech Festa 2013

serverspecの応用

Page 67: Serverspec at July Tech Festa 2013

サーバ構築の継続的インテグレーション

Page 68: Serverspec at July Tech Festa 2013

Puppetマニフェストを更新したら自動でマニフェスト適用と

serverspecによるテストを実行

Page 69: Serverspec at July Tech Festa 2013
Page 70: Serverspec at July Tech Festa 2013
Page 71: Serverspec at July Tech Festa 2013

まとめ

Page 72: Serverspec at July Tech Festa 2013

シェルコマンド実行によるサーバのテストをスマートにやれるようにしたのが

serverspec

Page 73: Serverspec at July Tech Festa 2013

読みやすい書きやすいわかりやすい

Page 74: Serverspec at July Tech Festa 2013

要するに簡潔

Page 75: Serverspec at July Tech Festa 2013

簡潔さ超重要

Page 76: Serverspec at July Tech Festa 2013

ビジネス要件は絶えず変化する

Page 77: Serverspec at July Tech Festa 2013

それに伴いシステムも変化し複雑に

Page 78: Serverspec at July Tech Festa 2013

複雑さと変化に対応するためには継続的なテスト重要

Page 79: Serverspec at July Tech Festa 2013

テストコード自体もシステムに伴い変化し複雑になる

Page 80: Serverspec at July Tech Festa 2013

なのでできるだけ簡潔に記述しテストできることが重要

Page 81: Serverspec at July Tech Festa 2013

serverspecとは

Page 82: Serverspec at July Tech Festa 2013

現実のシステムの複雑さと変化に対応するために

Page 83: Serverspec at July Tech Festa 2013

システムのあるべき状態を簡潔に記述し継続的にテストするためのもの

Page 84: Serverspec at July Tech Festa 2013

おまけ

Page 85: Serverspec at July Tech Festa 2013

miyagawa podcast ep14で serverspecについて

話してます

Page 86: Serverspec at July Tech Festa 2013
Page 87: Serverspec at July Tech Festa 2013
Page 88: Serverspec at July Tech Festa 2013
Page 89: Serverspec at July Tech Festa 2013

おしまい