アドバンスペイ株式会社
ネットワーク事業部 リーダー
川岡 潤
SoftLayerで
Puppetを動かしてみよう
1
内容
• 運用保守は大切なお仕事
• 運用保守は意外と大変
• Puppetで効率アップ
• デモ
2
運用保守って?
3
つくる→まもる
4
インフラにおける
運用保守の例
5
6
7
8
9
10
11
12
13
14
サーバーを「まもる」って?
・ハードウェア交換
・バックアップ
・障害対応
・セキュリティパッチ適用
などなど
今回はセキュリティパッチの適用について。
15
• OpenSSL
• bash
• ntpd
• glibc
最近話題になった脆弱性
16
パッチ適用の流れ
パッチリリースをお客様へ通知
↓
適用日時を調整
↓
パッチ適用
17
問題点
パッチを適用するとアプリケーショ
ンがきちんと動くかわからない。
特に開発アプリ。
かといって脆弱性を放置するわけに
もいかない。
18
やりとり
弊社「御社サーバーへのパッチ適用
日時を調整したく…」
お客様「検証環境で動作確認しな
きゃ…後日連絡します」
の繰り返し
19
お客様がしんどい
こちらもしんどかったりします
20
もっと楽に
できない?
21
22
Puppetとは?
サーバー設定やインストールなどを自動化す
るクラサバ構成の設定管理ツール
(https://puppetlabs.com)
定義ファイルを作ることで、たとえば
“ユーザーをサーバー10台へ一度に追加する”
というようなことができる
23
定義ファイルサンプル
user { ‘hogehoge':
ensure => present,
uid => ‘501’,
gid => ‘501’,
home => ‘/home/hogehoge’,
managehome => true,
}
24
名称
user { ‘hogehoge':
ensure => present,
uid => ‘501’,
gid => ‘501’,
home => ‘/home/hogehoge’,
managehome => true,
}
リソースタイプ タイトル
属性 値
マニフェスト
25
リソースタイプの例
user { ‘hogehoge':
ensure => present,
uid => ‘501’,
gid => ‘501’,
home => ‘/home/hogehoge’,
managehome => true,
}
ほかにGroup(グループ)、Service(サービス)など
user=ユーザーに関する定義を宣言
26
マニフェスト
サーバーのあるべき状態が書かれたファイ
ル
user { ‘hogehoge':
ensure => present,
uid => ‘501’,
gid => ‘501’,
home => ‘/home/hogehoge’,
managehome => true,
}
/etc/puppet/manifests/site.pp
27
SoftLayerで動かしてみる
今回の構成
Puppet
マスター
Puppet
エージェント
28
祝!東京DC開設!
500ドル割引コードが使えます
※有効期限:2015年3月31日まで
29
割引コードの適用
は1回まで!
30
サーバーを増や…あれ?
31
!
32
1回で使い切れ!
33
Puppetが威力を
発揮するシナリオ
を考える
34
想定シナリオ
ApacheでWebサイトが改ざんされる脆弱性が見
つかった!うわぁ!すべてのお客さんが対象だ!
これは調整が大変だぞ…まずはA社へ連絡だ!
しかし担当者はランチでお出かけ中。やっと戻っ
てきた!はい、即パッチを適用しないとお客様の
Webサイトが危険にさらされ…え?午後休とろ
うかと?ってそんな場合じゃないです!まずいで
す!どんだけまずいって?そうですね、Aさんの
スマフォからあの子との写真が流出てオフィスラ
ブがばれるくら…
たしかにそれはまずいって、おい何で知ってr
35
A社検証サーバーへパッチ
を適用する
Puppet
マスター
Puppet
エージェント
(A社検証サーバ)
36
Apacheを最新版にする
マニフェスト
package { 'httpd':
ensure => latest,
}
service { 'httpd':
name => httpd,
ensure => running,
require => Package[httpd]
}
37
ところで
アップデート後の
動作確認は目視?
38
39
Serverspec
• サーバーの自動テストを実現するツール
• RSpecの機能を使っている
• Windows環境でも利用できる
(http://knowledge.sakura.ad.jp/tech/2596/ から引用しました)
40
require 'rubygems'
require 'spec_helper'
describe package('httpd'), :if => os[:family] == 'redhat' do
it { should be_installed }
end
describe service('httpd'), :if => os[:family] == 'redhat' do
it { should be_enabled }
it { should be_running }
end
describe port(80) do
it { should be_listening }
end
テストケースサンプル
(一部抜粋)
41
# rake spec
Service "httpd"
should be enabled
should be running
Port "80"
should be listening
Finished in 0.19273 seconds (files took 0.64301 seconds
to load)
4 examples, 0 failures
テスト成功時(一部抜粋)
42
Service "httpd"
should be enabled
should be running (FAILED - 1)
Failures:
1) Service "httpd" should be running
On host `companyA.advanspey.com'
Failure/Error: it { should be_running }
expected Service "httpd" to be running
/bin/sh -c service¥ httpd¥ status
httpd is stopped
# ./spec/companyA.advanspey.com/sample_spec.rb:14
Finished in 0.19489 seconds (files took 0.64632 seconds to load)
4 examples, 2 failures
テスト失敗時(一部抜粋)
43
テストケースは
開発とインフラが
タッグを組んで
作ると良いです
44
45
マニフェスト完成
package { 'httpd':
ensure => latest,
}
service { 'httpd':
name => httpd,
ensure => running,
require => Package[httpd]
}
exec { "rake spec":
subscribe => Package['httpd'],
require => Service['httpd'],
cwd => "/root",
path => ["/usr/bin"]
}
アップ
デート
テスト
46
Apacheをアップデート
した後にテスト
↓結果OKなら
新しいバージョンで動作
担保がとれたことになる
47
デモ
Puppet+Serverspecで
Apacheの自動アップデート+テスト
タスク 担当
1 パッチリリース検出 Cron( yum --security
check-updateなど )
2 マニフェスト作成 人間
3 イメージテンプレートから
検証サーバーをデプロイ
SoftLayer コマンドライ
ン・クライアント
4 パッケージアップデート Puppet
5 テスト/結果通知 Serverspec
課題:どこまで自動化できる?
(パッチのリリース~本番サーバーへ適用する前)
タスク 担当
6 サーバーシャットダウン SoftLayer コマンドライ
ン・クライアント
7 本番環境への適用日時調整 人間
課題:どこまで自動化できる?
(パッチのリリース~本番サーバーへ適用する前)
タスク 担当
1 本番環境への適用 Puppet
Serverspec
人間
2 イメージテンプレート更新
(新旧入れ替え)
SoftLayer コマンドライ
ン・クライアント
人間
課題:どこまで自動化できる?
(本番サーバーへの適用~次回パッチリリース時に向けた準備)
51
理想の構成
Internet
デプロイ
テンプレ化
Puppet
マスター
+SLCLI
A~Z社
検証サーバー
A~Z社
本番サーバー
自社など
Puppetエージェント
52
この自動化方法がすごい!
http://sssslide.com/speakerdeck.com/tn
mt/jenkins-puppet-serverspec-infra-ci
※GMOペパボの方の記事
53
どうやらJenkinsという
すごい執事がいるらしい
54
注:
道路/水道がこわれるかものところで使用した画像は老朽化が原因でこわれたわ
けではなく「こわれる」をわかりやすく伝えたいがために使用いたしました。
ご了承ください。

第5回札幌SoftLayer勉強会資料_20150311