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

11,238 views

Published on

kyoto.py in 高槻

Published in: Technology
0 Comments
22 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
11,238
On SlideShare
0
From Embeds
0
Number of Embeds
1,080
Actions
Shares
0
Downloads
41
Comments
0
Likes
22
Embeds 0
No embeds

No notes for slide
  • \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にしよう

    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にしよう!

    ×