Successfully reported this slideshow.

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

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, local def 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: Linux Done. Disconnecting from localhost... done. Disconnecting from linuxbox... done.
  22. 22. 定義済みタスクの表示 $ fab -l
  23. 23. 定義済みタスクの表示 # coding: utf8 $ fab -l u""" 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" @task def shutdown(): u"""マシンをシャットダウンします.""" sudo("shutdown -h now") @task def reboot(): u"""マシンをリブートします.""" sudo("reboot")
  24. 24. sudo from fabric.api import sudo def package_update(): sudo(“yum update”) ※あらかじめvisudoなどは済ませておきましょう。
  25. 25. ファイル転送 from fabric.api import get, put def download_logs(): get(“/var/log/httpd/access.log*”) def upload_keys(): put(“README.txt”, “/tmp”)
  26. 26. ファイルの存在チェック from fabric.api import sudo, put from fabric.contrib.files import exists def upload_keys(): if exists(“/etc/ssh/keys”): put(“keys”, “/tmp”) sudo(“mv /tmp/keys/* /etc/ssh/keys”)
  27. 27. カレントディレクトリの保持 from fabric.api import cd, sudo def 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にしよう!

Editor's Notes

  • \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
  • ×