SlideShare a Scribd company logo
2
Most read
6
Most read
8
Most read
Serverspecを使用した
サーバ設定テストの実例
https://speakerdeck.com/simozono/kagomoku-no8
鹿児島大学学術情報基盤センター
下園幸一
simozono@cc.kagoshima-u.ac.jp
2018/05/26 かごもく #8 でばっぐ 1
Serverspecとは
 サーバの実際の状態を「ローカルコマンド
実行」、「SSH」、「WinRM」、「Docker
API」等を通してテストする ruby で書かれ
たツール
 宮下剛輔氏によって開発されている
 https://serverspec.org/
 特徴
◦ テスト対象のサーバにはエージェント等を導入
する必要はない
◦ 構成管理ツール(Puppet, Ansible, CFEngine,
Itamae(Chef)等と共に使用可能
◦ ほぼ ruby の Rspec
 真の目的は「インフラストラクチャコード
のリファクタリングを助けること」
2018/05/26 かごもく #8 でばっぐ 2
2018年の状況
 2018年以降、それほど盛んでもない
 新機能は「自分で実装してね」という立
場
2018/05/26 かごもく #8 でばっぐ 3
利用方法
2018/05/26 かごもく #8 でばっぐ 4
gem のインストール
$ gem install serverspec
初期設定(雛形作成):
$ serverspec-init
Select OS type:
1) UN*X
2) Windows
Select number: 1
Select a backend type:
1) SSH
2) Exec (local)
Select number: 1
Vagrant instance y/n: n
Input target host name: webhost.cc.kagoshima-u.ac.jp
+ spec/
+ spec/webhost.cc.kagoshima-u.ac.jp/
+ spec/webhost.cc.kagoshima-u.ac.jp/sample_spec.rb
+ spec/spec_helper.rb
+ Rakefile
+ .rspec
$
severspecを導入するマシン
テスト対象ホスト
webhost.cc.kagoshima-u.ac.jp
ssh
ホスト名に対応した
ディレクトリが作成さ
れる
サンプルspecファイル
利用方法
2018/05/26 かごもく #8 でばっぐ 5
実行
$ rake spec:webhost.cc.kagoshima-u.ac.jp
結果
$ rake spec:webhost.cc.kagoshima-u.ac.jp ASK_SUDO_PASSWORD=1
Enter sudo password:
Package "httpd"
should be installed
Service "httpd"
should be enabled
should be running
Port "80"
should be listening
Finished in 1.48 seconds (files took 6.75 seconds to load)
4 examples, 0 failures
$
標準のディレクトリ構成と実行につい
て
./
spec
host1
http_spec.rb
users_spec.rb
… _spec.rb
host2
hoge1_spec.rb
hoge2_spec.rb
… _spec.rb…
spec_helper.rb
Rakefile
.rspec
2018/05/26 かごもく #8 でばっぐ 6
 spec ディレクトリ配下にディレクトリを作成すると、それは
「ホスト名」であると認識する
◦ 複数のホストに対するテストを管理できる
 ホスト名ディレクトリ配下の「*_spec.rb」をspecファイルとして
認識し、全てをテストする
 これらの制御は Rakefile で行っている
◦ Rakefile をいじれば、いろいろできる
 ssh のログイン制御等「テスト対象ホストへのアクセス方法」制
御は、spec_helper.rb で行っている
specファイルについて(1)
 リソースタイプ(resource type)
 マッチャー(matcher)
2018/05/26 かごもく #8 でばっぐ 7
sample_spec.rb (抜粋)
require 'spec_helper'
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
パッケージ httpd は
インストールされているか?
サービス httpd は
(起動時)有効になっ
ているか?
(現在)起動している
か?
specファイルについて(2)
 リソースタイプごとに一部マッチャーは決まっている
◦ もちろん rspec 由来のマッチャーも利用可能
 どんなリソースタイプがあるのか?
https://serverspec.org/resource_types.html
2018/05/26 かごもく #8 でばっぐ 8
describe user('simozono') do
it { is_expected.to exist }
it { is_expected.to belong_to_group 'wheel' }
it { is_expected.to have_uid 1101 }
it { is_expected.to have_home_directory "/home/simozono" }
it { is_expected.to have_login_shell '/bin/bash' }
end
describe interface('ens160') do
it { is_expected.to exist }
it { is_expected.to be_up }
it { is_expected.to have_ipv4_address "192.168.1.241/24" }
end
describe file '/etc/ntp.conf' do
time_cc_regex = /^server[ t]+timeserver.kagoshima-u.ac.jp/
sinet_ntp_regex = /^server[ t]+ntp[01]1.sinet.ad.jp/
its(:content) { is_expected.to match time_cc_regex }
its(:content) { is_expected.to match sinet_ntp_regex }
end
所属組織での利用方法
 業務で必要なサーバは仮想化基盤 (Vmware)上に手動で作成
◦ サーバによって設定がまちまち
 logrotate が入っていたり入っていなかったり
 ログの保存期間が4週だったり60週だったり
 9つのサーバに対して serverspec を書いた
◦ 共通のテスト項目(ntpが動いているかとか)は、できるだけまとめた
 rspec の shared_examples 機能
 ホスト固有の情報(IPアドレス等)は、specファイルには書かずに、yaml ファイル
書く
 How to use host specific properties
 https://serverspec.org/advanced_tips.html
 よくなった点
◦ 設定等が統一された
◦ 新規サーバ構築時に設定が間違っていないかテストできる
◦ 設定変更者と設定変更確認者を分離し業務フローを作成
 問題点
◦ OS標準からの設定変更点を spec ファイルに全部書き出したか?
◦ 標準でマッチャーがないテスト項目は、設定ファイルの変更点を 正規
表現に頼っているため、正規表現の記載が面倒
 例: /etc/httpd/conf.d/vhost.conf の <VirtualHost *:80>の中で、ちゃんと
ServerName は指定のホスト名となっているか? CustomLog は 指定したファイ
ル名になっているか? <Directory> は指定したディレクトリになっているか?
2018/05/26 かごもく #8 でばっぐ 9
InSpecについて
 InSpecとは
◦ https://inspec.io/
 Chef Software が開発
 特徴
◦ InSpec is inspired by the wonderful Serverspec
project.
◦ InSpec は、コンプライアンス担保を目的として
いる。
 Migrate from Serverspec to InSpec
◦ https://www.inspec.io/docs/reference/migration/
 2018年現在、活発に開発が続いている
 詳細は…使ってないのでよくわかりません
2018/05/26 かごもく #8 でばっぐ 10
Serverspecに関する参考&感想
 本家
◦ https://serverspec.org/
 書籍
◦ O’Reilly より「Serverspec」
 qiita 等でいっぱい出てきます
 少し難しいことをしようと思うと ruby &
rspec の知識が必要となります
 本気でやると resource type が不足
◦ firewalld の設定
 https://github.com/decors/serverspec-firewalld-
resources を利用しました。
2018/05/26 かごもく #8 でばっぐ 11

More Related Content

PDF
Dockerからcontainerdへの移行
PDF
GoによるWebアプリ開発のキホン
PDF
コンテナ未経験新人が学ぶコンテナ技術入門
PDF
AWS 初心者向けWebinar 基本から理解する、AWS運用監視
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
PDF
いつやるの?Git入門 v1.1.0
PDF
DockerとPodmanの比較
PPTX
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
GoによるWebアプリ開発のキホン
コンテナ未経験新人が学ぶコンテナ技術入門
AWS 初心者向けWebinar 基本から理解する、AWS運用監視
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
いつやるの?Git入門 v1.1.0
DockerとPodmanの比較
Dockerからcontainerdへの移行

What's hot (20)

PDF
開発者におくるサーバーレスモニタリング
PPTX
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PDF
単なるキャッシュじゃないよ!?infinispanの紹介
PDF
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
PPTX
VyOSで作るIPv4 Router/IPv6 Bridge
PDF
俺の俺による俺のための App Service Environment
PDF
AWSのログ管理ベストプラクティス
PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PDF
[Cloud OnAir] Google Cloud へのデータ移行 2019年1月24日 放送
PDF
MQTTとAMQPと.NET
PDF
Google Cloud のネットワークとロードバランサ
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PDF
SQL大量発行処理をいかにして高速化するか
PDF
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
PPTX
Anthos を使ったエンタープライズ向けクラスタの設計とアップグレード戦略のススメ(CloudNative Days Tokyo 2021 発表資料)
PDF
CloudFrontのリアルタイムログをKibanaで可視化しよう
PPTX
KubernetesバックアップツールVeleroとちょっとした苦労話
PPTX
Amazon EKS によるスマホゲームのバックエンド運用事例
PDF
[Cloud OnAir] Google Cloud における RDBMS の運用パターン 2020年11月19日 放送
PDF
Elasticsearchを使うときの注意点 公開用スライド
開発者におくるサーバーレスモニタリング
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
単なるキャッシュじゃないよ!?infinispanの紹介
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
VyOSで作るIPv4 Router/IPv6 Bridge
俺の俺による俺のための App Service Environment
AWSのログ管理ベストプラクティス
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
[Cloud OnAir] Google Cloud へのデータ移行 2019年1月24日 放送
MQTTとAMQPと.NET
Google Cloud のネットワークとロードバランサ
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
SQL大量発行処理をいかにして高速化するか
GraalVM の概要と、Native Image 化によるSpring Boot 爆速化の夢
Anthos を使ったエンタープライズ向けクラスタの設計とアップグレード戦略のススメ(CloudNative Days Tokyo 2021 発表資料)
CloudFrontのリアルタイムログをKibanaで可視化しよう
KubernetesバックアップツールVeleroとちょっとした苦労話
Amazon EKS によるスマホゲームのバックエンド運用事例
[Cloud OnAir] Google Cloud における RDBMS の運用パターン 2020年11月19日 放送
Elasticsearchを使うときの注意点 公開用スライド
Ad

Similar to serverspecを使用したサーバ設定テストの実例 (20)

PDF
成長を加速する minne の技術基盤戦略
PPTX
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
PPTX
Itamae-Serverspec入門
PPTX
ネットワークエンジニアのための Puppet / Chef
PDF
ゲームのインフラをAwsで実戦tips全て見せます
PDF
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
PPTX
Open Source System Administration Framework - Func
PDF
Tottoruby 20110903
PDF
Openstack SPICE console (icehouse) verification
PPTX
Windows Azure PHP Tips
PDF
PaaSの作り方 Sqaleの場合
PDF
ヤギにサーバーを管理してもらう話
PDF
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
PPTX
シラサギハンズオン 1015 1016
PDF
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
PDF
Ansible2.0と実用例
PPT
Apache Module
PDF
XML-RPC : Pythonが「電池付属」と呼ばれる理由
PPTX
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
PDF
[Japan Tech summit 2017] DEP 005
成長を加速する minne の技術基盤戦略
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
Itamae-Serverspec入門
ネットワークエンジニアのための Puppet / Chef
ゲームのインフラをAwsで実戦tips全て見せます
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Open Source System Administration Framework - Func
Tottoruby 20110903
Openstack SPICE console (icehouse) verification
Windows Azure PHP Tips
PaaSの作り方 Sqaleの場合
ヤギにサーバーを管理してもらう話
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
シラサギハンズオン 1015 1016
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
Ansible2.0と実用例
Apache Module
XML-RPC : Pythonが「電池付属」と呼ばれる理由
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
[Japan Tech summit 2017] DEP 005
Ad

serverspecを使用したサーバ設定テストの実例

  • 2. Serverspecとは  サーバの実際の状態を「ローカルコマンド 実行」、「SSH」、「WinRM」、「Docker API」等を通してテストする ruby で書かれ たツール  宮下剛輔氏によって開発されている  https://serverspec.org/  特徴 ◦ テスト対象のサーバにはエージェント等を導入 する必要はない ◦ 構成管理ツール(Puppet, Ansible, CFEngine, Itamae(Chef)等と共に使用可能 ◦ ほぼ ruby の Rspec  真の目的は「インフラストラクチャコード のリファクタリングを助けること」 2018/05/26 かごもく #8 でばっぐ 2
  • 4. 利用方法 2018/05/26 かごもく #8 でばっぐ 4 gem のインストール $ gem install serverspec 初期設定(雛形作成): $ serverspec-init Select OS type: 1) UN*X 2) Windows Select number: 1 Select a backend type: 1) SSH 2) Exec (local) Select number: 1 Vagrant instance y/n: n Input target host name: webhost.cc.kagoshima-u.ac.jp + spec/ + spec/webhost.cc.kagoshima-u.ac.jp/ + spec/webhost.cc.kagoshima-u.ac.jp/sample_spec.rb + spec/spec_helper.rb + Rakefile + .rspec $ severspecを導入するマシン テスト対象ホスト webhost.cc.kagoshima-u.ac.jp ssh ホスト名に対応した ディレクトリが作成さ れる サンプルspecファイル
  • 5. 利用方法 2018/05/26 かごもく #8 でばっぐ 5 実行 $ rake spec:webhost.cc.kagoshima-u.ac.jp 結果 $ rake spec:webhost.cc.kagoshima-u.ac.jp ASK_SUDO_PASSWORD=1 Enter sudo password: Package "httpd" should be installed Service "httpd" should be enabled should be running Port "80" should be listening Finished in 1.48 seconds (files took 6.75 seconds to load) 4 examples, 0 failures $
  • 6. 標準のディレクトリ構成と実行につい て ./ spec host1 http_spec.rb users_spec.rb … _spec.rb host2 hoge1_spec.rb hoge2_spec.rb … _spec.rb… spec_helper.rb Rakefile .rspec 2018/05/26 かごもく #8 でばっぐ 6  spec ディレクトリ配下にディレクトリを作成すると、それは 「ホスト名」であると認識する ◦ 複数のホストに対するテストを管理できる  ホスト名ディレクトリ配下の「*_spec.rb」をspecファイルとして 認識し、全てをテストする  これらの制御は Rakefile で行っている ◦ Rakefile をいじれば、いろいろできる  ssh のログイン制御等「テスト対象ホストへのアクセス方法」制 御は、spec_helper.rb で行っている
  • 7. specファイルについて(1)  リソースタイプ(resource type)  マッチャー(matcher) 2018/05/26 かごもく #8 でばっぐ 7 sample_spec.rb (抜粋) require 'spec_helper' 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 パッケージ httpd は インストールされているか? サービス httpd は (起動時)有効になっ ているか? (現在)起動している か?
  • 8. specファイルについて(2)  リソースタイプごとに一部マッチャーは決まっている ◦ もちろん rspec 由来のマッチャーも利用可能  どんなリソースタイプがあるのか? https://serverspec.org/resource_types.html 2018/05/26 かごもく #8 でばっぐ 8 describe user('simozono') do it { is_expected.to exist } it { is_expected.to belong_to_group 'wheel' } it { is_expected.to have_uid 1101 } it { is_expected.to have_home_directory "/home/simozono" } it { is_expected.to have_login_shell '/bin/bash' } end describe interface('ens160') do it { is_expected.to exist } it { is_expected.to be_up } it { is_expected.to have_ipv4_address "192.168.1.241/24" } end describe file '/etc/ntp.conf' do time_cc_regex = /^server[ t]+timeserver.kagoshima-u.ac.jp/ sinet_ntp_regex = /^server[ t]+ntp[01]1.sinet.ad.jp/ its(:content) { is_expected.to match time_cc_regex } its(:content) { is_expected.to match sinet_ntp_regex } end
  • 9. 所属組織での利用方法  業務で必要なサーバは仮想化基盤 (Vmware)上に手動で作成 ◦ サーバによって設定がまちまち  logrotate が入っていたり入っていなかったり  ログの保存期間が4週だったり60週だったり  9つのサーバに対して serverspec を書いた ◦ 共通のテスト項目(ntpが動いているかとか)は、できるだけまとめた  rspec の shared_examples 機能  ホスト固有の情報(IPアドレス等)は、specファイルには書かずに、yaml ファイル 書く  How to use host specific properties  https://serverspec.org/advanced_tips.html  よくなった点 ◦ 設定等が統一された ◦ 新規サーバ構築時に設定が間違っていないかテストできる ◦ 設定変更者と設定変更確認者を分離し業務フローを作成  問題点 ◦ OS標準からの設定変更点を spec ファイルに全部書き出したか? ◦ 標準でマッチャーがないテスト項目は、設定ファイルの変更点を 正規 表現に頼っているため、正規表現の記載が面倒  例: /etc/httpd/conf.d/vhost.conf の <VirtualHost *:80>の中で、ちゃんと ServerName は指定のホスト名となっているか? CustomLog は 指定したファイ ル名になっているか? <Directory> は指定したディレクトリになっているか? 2018/05/26 かごもく #8 でばっぐ 9
  • 10. InSpecについて  InSpecとは ◦ https://inspec.io/  Chef Software が開発  特徴 ◦ InSpec is inspired by the wonderful Serverspec project. ◦ InSpec は、コンプライアンス担保を目的として いる。  Migrate from Serverspec to InSpec ◦ https://www.inspec.io/docs/reference/migration/  2018年現在、活発に開発が続いている  詳細は…使ってないのでよくわかりません 2018/05/26 かごもく #8 でばっぐ 10
  • 11. Serverspecに関する参考&感想  本家 ◦ https://serverspec.org/  書籍 ◦ O’Reilly より「Serverspec」  qiita 等でいっぱい出てきます  少し難しいことをしようと思うと ruby & rspec の知識が必要となります  本気でやると resource type が不足 ◦ firewalld の設定  https://github.com/decors/serverspec-firewalld- resources を利用しました。 2018/05/26 かごもく #8 でばっぐ 11