序論
Serverspec がmizzy氏によってリリースされたのは2013年3月のことです.
そこから5年間でインフラエンジニアの皆さんはクラウド化やセキュリティの機運が高まって
仕事内容が大きく変わったという方も多いのではないでしょうか??
Serverspecの誕生はインフラ構成の自動化の夢を見ていた人類にとって十分すぎるインパクトを与えたと思います.
そして,Ansible,Chefなどの構成管理フレームワークの台頭と相まって運用には欠かせない最高のツールとなりました.
サーバー構成のテストを目視確認で行う人類に比べると大きく進化しました. その自動化は複雑性を伴うものではなく自動化を加速させるほどシンプルで美しいものでした.
テスト駆動インフラの流れ
- これから書くインフラコードに対するテストコードを記述する
- インフラコード適用前のVMに対してテストを実施し失敗することを確認する
- 目的のインフラコードを書く
- インフラコードをVMに適用し、テストが成功することを確認する
- インフラコード適用前の状態にVMをロールバックする
- インフラコードをリファクトリングする
- リファクタリングしたインフラコードをVMに適用し、テストが成功することを確認する
- 1 ~ 7 を繰り返す
Serverspecはサーバー構成管理ツールが複雑であったから生まれたツールです 複雑なサーバー構成管理ツールが不要になるとServerspecも不要になるでしょう しかし、手動でインフラを構築する場合はこれからも有益なツールであるといえます
Gossとは
Goss is EASY! Goss is FAST! Goss is SMALL!
Gossとは、サーバーの構成を検証するためのYAMLベースのServerspecの代替ツールです。 現在のシステム状態からテストを生成できるようにすることもでき、テストを書くプロセスをより簡単に行うことができます。 インストールが簡単でGoさえ動けば基本的にどこでも動かせる。 バイナリとして10MBぐらいの大きさ Dockerへの対応やモジュールが割と充実している。
Serverspecとの違い
メリット
- Ruby(もしくはGo)に精通してなくてもサーバーが正しく構成されているかどうかを確認することができる インストールが簡単
- gemなどの環境に悩まされることがない
デメリット
- プラグインが少ないので少しはみだしたことをしようとするとどうしても、自分で記述する為のGoの知識が必要になる
How to Goss
Goss インストール
自動インストール
curl -fsSL https://goss.rocks/install | sh
手動インストール
curl -L https://github.com/aelsabbahy/goss/releases/download/_VERSION_/goss-linux-amd64 -o /usr/local/bin/goss chmod +rx /usr/local/bin/goss
簡単に使うよ
公式ドキュメントに45秒で使えるよ!とあるので書いただけでも、なれると本当に高速に行うことができる。 使用するコマンドだけ確認する
# goss add package openssh-server # goss add service sshd
この2行で現在のOpenssh-serverのパッケージの情報とsshdのサービスの状態を記録できた。
# systemctl stop sshd # goss validate
sshdを止めてgossを実行すると しっかりとエラーが出ます。
FS....F Failures/Skipped: (詳細中略)
# goss serve 2>/dev/null & # curl -i http://localhost:8080/healthz
ちなみに、HTTPとして取得も可能です。
FS....F Failures/Skipped: (詳細中略)
詳しくはこちらに全部書いています。 https://github.com/aelsabbahy/goss/blob/master/docs/manual.md
Nginxの設定を確認する
コマンドプロンプトで下記のコマンドを実行します.
$goss add service nginx $goss add process nginx $goss add port nginx $goss add port 80 $goss add package nginx $goss add user nginx $goss add group nginx
するとカレントディレクトリにgoss.yaml というファイルができておりファイルの中身は下記のようになっております. Nginxが起動している状態を記録したyamlを生成できました.
package: nginx: installed: true versions: - 1.12.2 port: tcp:80: listening: true ip: - 0.0.0.0 service: nginx: enabled: true running: true user: nginx: exists: true groups: - nginx home: /var/lib/nginx shell: /sbin/nologin group: nginx: exists: true process: nginx: running: true
先ほど同様実行すると
$goss validate ............... Total Duration: 0.053s Count: 15, Failed: 0, Skipped: 0
GitHub - nwiizo/nginx_goss: Call people to use Goss for nginx