• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Fabricでサーバー管理をDRYにしよう
 

Fabricでサーバー管理をDRYにしよう

on

  • 6,613 views

kyoto.py in 高槻

kyoto.py in 高槻

Statistics

Views

Total Views
6,613
Views on SlideShare
5,782
Embed Views
831

Actions

Likes
18
Downloads
33
Comments
0

8 Embeds 831

http://d.hatena.ne.jp 802
https://twitter.com 23
https://twimg0-a.akamaihd.net 1
http://s.deeeki.com 1
http://hatena-anohito.appspot.com 1
https://si0.twimg.com 1
http://hatenatunnel.appspot.com 1
http://webcache.googleusercontent.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Fabricでサーバー管理をDRYにしよう Fabricでサーバー管理をDRYにしよう Presentation Transcript

  • Fabricでサーバー管理を DRYにしよう 2012.09.01 kyoto.py in 高槻 Kojima Takanori (max747)
  • お前だれよ• まっくす (max747)• アクセンス・テクノロジー所属• 元Java屋さん• Jenkins勉強会にもよく出没します
  • 開発サーバーの管理どうしてますか?
  • パッケージアップデート$ ssh serverA$ sudo yum update$ exit
  • SSH公開 の配備$ scp foo.pub serverA:.$ ssh serverA$ sudo mv foo.pub /etc/ssh/keys/$ chown root:root /etc/ssh/keys/foo.pub$ exit
  • • Web/APサーバー• DBサーバー• リポジトリサーバー• TracとかRedmineとか動かすサーバー• CIサーバー• 実験用サーバー• 仮想化ホストサーバー• etc...
  • $ ssh <web/ap server> $ sudo yum update ... $ exit $ ssh <db server> $ sudo yum update• ssh serverA ... $ exit• sudo yum update $ ssh <scm server> $ sudo yum update ... $ exit• お茶を飲んで待つ $ ssh <pm server> $ sudo yum update ...• exit $ exit $ ssh <ci server>• 以下5回繰り返し $ sudo yum update ... $ exit...
  • $ scp foo.pub <web/ap server>:. $ ssh <web/ap server> $ sudo mv foo.pub /etc/ssh/keys/ $ chown root:root /etc/ssh/keys/foo.pub $ exit• ssh serverA $ scp foo.pub <db server>:. $ ssh <db server> $ sudo mv foo.pub /etc/ssh/keys/• sudo yum update $ chown root:root /etc/ssh/keys/foo.pub $ exit $ scp foo.pub <scm server>:.• お茶を飲んで待つ $ $ $ $ ssh <scm server> sudo mv foo.pub /etc/ssh/keys/ chown root:root /etc/ssh/keys/foo.pub exit• exit $ $ scp foo.pub <pm server>:. ssh <pm server>• 以下5回繰り返し $ sudo mv foo.pub /etc/ssh/keys/ $ chown root:root /etc/ssh/keys/foo.pub $ exit...
  • 自動化したい
  • Puppet• インストールしてみる• ちょっと触ってみる• ちょっとドキュメント読んでみる• 独自DSL• 挫折...
  • Chef• インストールしてみる• なんかCouchDBとかRabbitMQとか入る• ちょっと触ってみる• Ruby DSL• 挫折...
  • Puppet/Chef 雑感• それなりの学習曲線• (時間の) 初期投資必要• 運用に乗ってしまえばたいへん強力• サーバー台数が多ければ多いほど強力
  • やりたいこと再考• 繰り返し作業を自動化したい• でも覚えることは減らしたい• 管理したいのは5∼6台• シェルスクリプトでできなくもない?• Pythonでなんかいいツールないかなぁ
  • それFabricでできるよ
  • Fabric• デプロイやシステム管理の支援ツール• SSHを使用• コマンドラインベース• Python2.5以上で動作 (not 3.x)
  • 活用例• パッケージアップデート• (必要性をチェックして) リブート• 一斉シャットダウン• 全マシンにSSH公開 を投入• 新しい仮想インスタンスの構成
  • インストール$ pip install fabric ※お好みによりsudoをご利用下さい。
  • ヘルプ$ fab -h
  • タスク定義from fabric.api import run, localdef host_type(): run(“uname -s”)def local_host_type(): local(“uname -s”)
  • 実行$ fab -H hostA host_type
  • 実行$ fab -H localhost,linuxbox host_type[localhost] run: uname -s[localhost] out: Darwin[linuxbox] run: uname -s[linuxbox] out: LinuxDone.Disconnecting from localhost... done.Disconnecting from linuxbox... done.
  • 定義済みタスクの表示$ fab -l
  • 定義済みタスクの表示# coding: utf8 $ fab -lu""" max747.org の管理用max747.org の管理用""" Available commands:from fabric.api import sudo, task@task package_update パッケージをアップデートします.def package_update(): u"""パッケージをアップデートします.""" reboot マシンをリブートします. distro = _get_distro() shutdown マシンをシャットダウンします. if distro == "Debian": sudo("apt-get -y upgrade") elif distro == "Redhat": sudo("yum -y update")def _get_distro(): ... return "Debian"@taskdef shutdown(): u"""マシンをシャットダウンします.""" sudo("shutdown -h now")@taskdef reboot(): u"""マシンをリブートします.""" sudo("reboot")
  • sudofrom fabric.api import sudodef package_update(): sudo(“yum update”) ※あらかじめvisudoなどは済ませておきましょう。
  • ファイル転送from fabric.api import get, putdef download_logs(): get(“/var/log/httpd/access.log*”)def upload_keys(): put(“README.txt”, “/tmp”)
  • ファイルの存在チェックfrom fabric.api import sudo, putfrom fabric.contrib.files import existsdef upload_keys(): if exists(“/etc/ssh/keys”): put(“keys”, “/tmp”) sudo(“mv /tmp/keys/* /etc/ssh/keys”)
  • カレントディレクトリの保持from fabric.api import cd, sudodef package_update(): with cd(“/usr/local/src”): sudo(“tar xvf foo-1.0.tar.gz”) with cd(“/usr/local/src/foo-1.0”): sudo(“./configure”) sudo(“make”) sudo(“make install”)
  • 他にもいろいろ• ホストの事前定義• ホストのグループ化• 出力結果の色を変更• プロンプト、confirm• etc...
  • Fabricのいいところ• シェルでコマンド叩く作業の延長• APIが直感的• 覚えるべきことが少ない• 気軽に始められる(重要!)
  • Fabricでサーバー管理も DRYにしよう!