じゃあ、おうちで学べる

本能を呼び覚ますこのコードに、君は抗えるか

Goss 入門 迅速かつ簡単なサーバー検証ツールの使い方

序論

Serverspec がmizzy氏によってリリースされたのは2013年3月のことです.
そこから5年間でインフラエンジニアの皆さんはクラウド化やセキュリティの機運が高まって 仕事内容が大きく変わったという方も多いのではないでしょうか??
Serverspecの誕生はインフラ構成の自動化の夢を見ていた人類にとって十分すぎるインパクトを与えたと思います. そして,Ansible,Chefなどの構成管理フレームワークの台頭と相まって運用には欠かせない最高のツールとなりました.

サーバー構成のテストを目視確認で行う人類に比べると大きく進化しました. その自動化は複雑性を伴うものではなく自動化を加速させるほどシンプルで美しいものでした.

テスト駆動インフラの流れ

  1. これから書くインフラコードに対するテストコードを記述する
  2. インフラコード適用前のVMに対してテストを実施し失敗することを確認する
  3. 目的のインフラコードを書く
  4. インフラコードをVMに適用し、テストが成功することを確認する
  5. インフラコード適用前の状態にVMロールバックする
  6. インフラコードをリファクトリングする
  7. リファクタリングしたインフラコードをVMに適用し、テストが成功することを確認する
  8. 1 ~ 7 を繰り返す

Serverspecはサーバー構成管理ツールが複雑であったから生まれたツールです 複雑なサーバー構成管理ツールが不要になるとServerspecも不要になるでしょう しかし、手動でインフラを構築する場合はこれからも有益なツールであるといえます

Gossとは

Goss is EASY! Goss is FAST! Goss is SMALL!

github.com

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