Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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.p...
•   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 u...
$    scp foo.pub <web/ap server>:. $    ssh <web/ap server> $    sudo mv foo.pub /etc/ssh/keys/ $    chown root:root /etc/...
自動化したい
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] ...
定義済みタスクの表示$ fab -l
定義済みタスクの表示# coding: utf8                         $ fab -lu"""                                       max747.org の管理用max747....
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(“R...
ファイルの存在チェックfrom fabric.api import sudo, putfrom fabric.contrib.files import existsdef upload_keys():  if exists(“/etc/ssh/...
カレントディレクトリの保持from fabric.api import cd, sudodef package_update():  with cd(“/usr/local/src”):    sudo(“tar xvf foo-1.0.tar...
他にもいろいろ• ホストの事前定義• ホストのグループ化• 出力結果の色を変更• プロンプト、confirm• etc...
Fabricのいいところ• シェルでコマンド叩く作業の延長• APIが直感的• 覚えるべきことが少ない• 気軽に始められる(重要!)
Fabricでサーバー管理も  DRYにしよう!
Fabricでサーバー管理をDRYにしよう
Upcoming SlideShare
Loading in …5
×

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

kyoto.py in 高槻

  • Be the first to comment

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

  1. 1. Fabricでサーバー管理を DRYにしよう 2012.09.01 kyoto.py in 高槻 Kojima Takanori (max747)
  2. 2. お前だれよ• まっくす (max747)• アクセンス・テクノロジー所属• 元Java屋さん• Jenkins勉強会にもよく出没します
  3. 3. 開発サーバーの管理どうしてますか?
  4. 4. パッケージアップデート$ ssh serverA$ sudo yum update$ exit
  5. 5. SSH公開 の配備$ scp foo.pub serverA:.$ ssh serverA$ sudo mv foo.pub /etc/ssh/keys/$ chown root:root /etc/ssh/keys/foo.pub$ exit
  6. 6. • Web/APサーバー• DBサーバー• リポジトリサーバー• TracとかRedmineとか動かすサーバー• CIサーバー• 実験用サーバー• 仮想化ホストサーバー• etc...
  7. 7. $ 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...
  8. 8. $ 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...
  9. 9. 自動化したい
  10. 10. Puppet• インストールしてみる• ちょっと触ってみる• ちょっとドキュメント読んでみる• 独自DSL• 挫折...
  11. 11. Chef• インストールしてみる• なんかCouchDBとかRabbitMQとか入る• ちょっと触ってみる• Ruby DSL• 挫折...
  12. 12. Puppet/Chef 雑感• それなりの学習曲線• (時間の) 初期投資必要• 運用に乗ってしまえばたいへん強力• サーバー台数が多ければ多いほど強力
  13. 13. やりたいこと再考• 繰り返し作業を自動化したい• でも覚えることは減らしたい• 管理したいのは5∼6台• シェルスクリプトでできなくもない?• Pythonでなんかいいツールないかなぁ
  14. 14. それFabricでできるよ
  15. 15. Fabric• デプロイやシステム管理の支援ツール• SSHを使用• コマンドラインベース• Python2.5以上で動作 (not 3.x)
  16. 16. 活用例• パッケージアップデート• (必要性をチェックして) リブート• 一斉シャットダウン• 全マシンにSSH公開 を投入• 新しい仮想インスタンスの構成
  17. 17. インストール$ pip install fabric ※お好みによりsudoをご利用下さい。
  18. 18. ヘルプ$ fab -h
  19. 19. タスク定義from fabric.api import run, localdef host_type(): run(“uname -s”)def local_host_type(): local(“uname -s”)
  20. 20. 実行$ fab -H hostA host_type
  21. 21. 実行$ 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.
  22. 22. 定義済みタスクの表示$ fab -l
  23. 23. 定義済みタスクの表示# 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")
  24. 24. sudofrom fabric.api import sudodef package_update(): sudo(“yum update”) ※あらかじめvisudoなどは済ませておきましょう。
  25. 25. ファイル転送from fabric.api import get, putdef download_logs(): get(“/var/log/httpd/access.log*”)def upload_keys(): put(“README.txt”, “/tmp”)
  26. 26. ファイルの存在チェック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”)
  27. 27. カレントディレクトリの保持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”)
  28. 28. 他にもいろいろ• ホストの事前定義• ホストのグループ化• 出力結果の色を変更• プロンプト、confirm• etc...
  29. 29. Fabricのいいところ• シェルでコマンド叩く作業の延長• APIが直感的• 覚えるべきことが少ない• 気軽に始められる(重要!)
  30. 30. Fabricでサーバー管理も DRYにしよう!

×