地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Serverspec】入門する

f:id:ryuichi1208:20210728191031j:plain

背景

Serverspecを見る機会があったのでこの機会に入門する。IaCのテストってすごく難しいと思っていてどこからどこまでやるかみたいな線引きがよく分からないとかもある。記事的には具体的なServerspecの使い方よりも各プロダクトでどんな使われ方してるのかを見てまとめられれば良いかなといった感じ。

概要

Serverspecとは

Serverspec(サーバスペック)とは、サーバ状態のテスト自動化フレームワークUNIX/LinuxサーバとWindowsサーバに対応している。構築したサーバ環境が意図した通りに構成されているかについて自動的に確認作業を行えたりする。IaCの先のフェーズとかで出てくるイメージ。個人的な感覚ではあるがいままで手動で行なう必要があったサーバ構成の確認(テスト)をスクリプトにより自動化することができるツールぐらいのイメージ。

Serverspecは、Rubyで実装されていてRubyがある環境ならwindowsでも動くらしい。windows -> linuxのテストみたいなことも可能とのこと。リリース頻度自体はそこまで高くは無いもののメンテナンスはされている模様。作者は宮下 剛輔という日本の方(https://twitter.com/gosukenator)

github.com

Serverspec is not ServerSpec.ってツイートもあるがこれは間違えそうというかちょっと調べているだけでもこう書かれている記事が散見されたので結構間違ってる人いるんだろうなと感じた。(ElasticSearch的な感じかな)

公式サイトもある

serverspec.org

導入するとできること

Serverspec自体は主に以下のような目的で使われる

  • テスト駆動によるインフラのコード開発
  • サーバ構築後の確認作業の自動化
  • 稼働しているサーバの監視
  • サーバの再起動時の状態確認

サーバーにエージェントなどをインストールする必要がないのがとても便利そうでした。

セットアップ/サンプル

以下でインストールできる。

$ gem install serverspec

serverspec-initで初期化

$ serverspec-init

Select OS type:

  1) UN*X
  2) Windows

Select number: 1

Select a backend type:

  1) SSH
  2) Exec (local)

Select number: 2

Vagrant instance y/n: n
Input target host name: www.example.jp
 + spec/
 + spec/www.example.jp/
 + spec/www.example.jp/sample_spec.rb
 + spec/spec_helper.rb
 + Rakefile
 + .rspec

sample_spec.rbにテストを記述する

require 'spec_helper'

describe "gitについてのテスト" do
  context "環境設定" do
    describe package('git'), :if => os[:family] == 'redhat' do
      it "インストールされている" do
        expect be_installed
      end
    end
  end
end

describe "git-coreについてのテスト" do
  context "環境設定" do
    describe package('git-core'), :if => os[:family] == 'redhat' do
      it "インストールされている" do
        expect be_installed
      end
    end
  end
end

describe "httpdについてのテスト" do
  context "環境設定" do
    describe package('httpd'), :if => os[:family] == 'redhat' do
      it "インストールされている" do
        expect be_installed
      end

      it "enabledされている" do
        expect be_enabled
      end

      it "runningされている" do
        expect be_running
      end
    end
  end
end

describe "portについてのテスト" do
  context "環境設定" do
    describe port(80) do
      it "listeningされている" do
        expect be_listening 
      end
    end
  end
end

rake specで実行できる

$ rake spec

まとめ

参考記事