Skip to content

Instantly share code, notes, and snippets.

@gb-swatanabe
Created March 15, 2014 06:56
Show Gist options
  • Save gb-swatanabe/9562781 to your computer and use it in GitHub Desktop.
Save gb-swatanabe/9562781 to your computer and use it in GitHub Desktop.
JAWS DAYS 2014 - Immutable Infrastructure時代の構成管理ツール基盤SpecInfra

Immutable Infrastructure時代の構成管理ツール基盤SpecInfra

サーバ構成管理とは

  • サーバの静的な状態を管理すること = インストールされているミドルウェアや設定等

構成管理ツール

  • puppet
  • chef
  • ansible

基本原則(ウェブオペレーション 5章

  • 宣言的「何をしたいかであって、どうするかではない」
    • 具体的なコマンドを書くわけでは無い
  • 抽象化「貴方の代わりに面倒を見てくれる」
    • 具体的なコマンドは勝手にやってくれる
  • 冪当性「必要な時だけ実行する」
  • 収束化「放っておけばどうにかなる」
    • 途中で手を出さなくても良い

Immutableが与える影響

  • 冪当性、収束化 -> いらないんでは?
    • 冪当性 = 状態が不定なので実行が必要かを判断する = Immutableだと不定では無い
    • 収束化 = 不定な状態を一定の状態に収束させる = Immutableだと不定では無い
  • -> もっとシンプルに出来るんでは?
  • -> Immutableなんだから、手動でイメージ作っとけばいいんじゃない?
  • -> でも再現可能な手順は残しておきたい
    • 手順書でもいいけど、実行可能なコードのほうがいいよね
    • シェルスクリプトやDockerfileでどうよ
    • Dockerfile = コマンドを羅列している = シェルスクリプトと同じ
    • 抽象化はしたい = やっぱり構成管理ツールは必要
    • ツール自体はよりシンプルで良い(冪当性、収束化は不要

configspec

とりあえず作ってみたサンプル的なもの

syllabus

configspecよりシンプルに記述

configspec/syllabusともにコマンド実行はSpecInfra

  • 実行形式の差異
  • OS/ディストロの違い これらを吸収してくれるフレームワーク
require ’specinfra’
include SpecInfra::Helper::DetectOS
include SpecInfra::Helper::Exec
backend.install ‘apache2’
require ’specinfra’
require ’net/ssh'
include SpecInfra::Helper::DetectOS
include SpecInfra::Helper::SSH

SpecInfra.configuration.ssh
 = Net::SSH.start(‘example.com’, ‘root’, {{})

backend.install ‘apache2’

話が変わって

Immutableだと毎回いちから構築するから時間がかかるんじゃない?

Dockerバックエンド = configspecからDockerfileを生成

require ’specinfra’


include SpecInfra::Helper::ubuntu
include SpecInfra::Helper::Dockerfile

backend.from ‘ubuntu’
backend.install ‘apache’

Shellscriptバックエンド


require ’specinfra’
include SpecInfra::Helper::ubuntu
include SpecInfra::Helper::ShellScript
backend.install ‘apache’

今後の課題

ドキュメント整備

  • serverspecを使っていれば気にしなくていい領域だった = ので整備されていない

機能の充実

  • serverspec = テストするためのものなので、それようの機能は充実している = 構成管理用はいまいちたりてない

リファクタリング

テストコード整備

  • serverspecとの切り分け
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment