SlideShare ist ein Scribd-Unternehmen logo
1 von 31
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, local

def 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: Linux

Done.
Disconnecting from localhost... done.
Disconnecting from linuxbox... done.
定義済みタスクの表示


$ fab -l
定義済みタスクの表示
# 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")
sudo

from fabric.api import sudo

def package_update():
    sudo(“yum update”)
        ※あらかじめvisudoなどは済ませておきましょう。
ファイル転送

from fabric.api import get, put

def download_logs():
    get(“/var/log/httpd/access.log*”)

def upload_keys():
    put(“README.txt”, “/tmp”)
ファイルの存在チェック

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”)
カレントディレクトリの保持

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”)
他にもいろいろ
• ホストの事前定義
• ホストのグループ化
• 出力結果の色を変更
• プロンプト、confirm
• etc...
Fabricのいいところ

• シェルでコマンド叩く作業の延長
• APIが直感的
• 覚えるべきことが少ない
• 気軽に始められる(重要!)
Fabricでサーバー管理も
  DRYにしよう!

Weitere ähnliche Inhalte

Was ist angesagt?

2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料Yasutaka Hamada
 
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料Yasutaka Hamada
 
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会Yasutaka Hamada
 
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)CLARA ONLINE, Inc.
 
Webサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことWebサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことTrinityT _
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefnpsg
 
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Sho A
 
Ansible handson ood2016
Ansible handson ood2016Ansible handson ood2016
Ansible handson ood2016Hideki Saito
 
今日から使い始めるChef
今日から使い始めるChef今日から使い始めるChef
今日から使い始めるChefMasahiro NAKAYAMA
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたatk1234
 
Ansible quickstart
Ansible quickstartAnsible quickstart
Ansible quickstartHideki Saito
 
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなしMasahiro NAKAYAMA
 
シンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairシンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairNaoya Inada
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Ransui Iso
 
Apache Auroraの始めかた
Apache Auroraの始めかたApache Auroraの始めかた
Apache Auroraの始めかたMasahito Zembutsu
 
Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1Hidetoshi Hirokawa
 
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Ransui Iso
 

Was ist angesagt? (20)

Ansible入門...?
Ansible入門...?Ansible入門...?
Ansible入門...?
 
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
2014/11/08 第3回 一撃サーバー構築シェルスクリプト勉強会(懇親会もあるよ!) 発表資料
 
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
2014/11/04 第2回 一撃サーバー構築シェルスクリプト勉強会(さっぽろ!) 発表資料
 
第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会第1回 一撃サーバー構築シェルスクリプト勉強会
第1回 一撃サーバー構築シェルスクリプト勉強会
 
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)Ansibleで始めるサーバ管理勉強会(2014年10月1日)
Ansibleで始めるサーバ管理勉強会(2014年10月1日)
 
Webサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのことWebサーバ構築で心がけるべき二つのこと
Webサーバ構築で心がけるべき二つのこと
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門
 
Ansible handson ood2016
Ansible handson ood2016Ansible handson ood2016
Ansible handson ood2016
 
今日から使い始めるChef
今日から使い始めるChef今日から使い始めるChef
今日から使い始めるChef
 
Ansible handson
Ansible handsonAnsible handson
Ansible handson
 
OSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみたOSC Tokyo fall LT~Dockerで分散処理をやってみた
OSC Tokyo fall LT~Dockerで分散処理をやってみた
 
Ansible quickstart
Ansible quickstartAnsible quickstart
Ansible quickstart
 
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし20140828 #ssmjp 社内チューニンガソンで優勝したはなし
20140828 #ssmjp 社内チューニンガソンで優勝したはなし
 
シンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnairシンプルなシステム構成フレームワークalnair
シンプルなシステム構成フレームワークalnair
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
 
Apache Auroraの始めかた
Apache Auroraの始めかたApache Auroraの始めかた
Apache Auroraの始めかた
 
initramfsについて
initramfsについてinitramfsについて
initramfsについて
 
Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1Ansible 2.0を使って組む kubernetesクラスタ vol.1
Ansible 2.0を使って組む kubernetesクラスタ vol.1
 
Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4Lisp Tutorial for Pythonista : Day 4
Lisp Tutorial for Pythonista : Day 4
 

Andere mochten auch

意識の低い自動化
意識の低い自動化意識の低い自動化
意識の低い自動化greenasparagus
 
複合システムネットワーク論を読む(公開版)
複合システムネットワーク論を読む(公開版)複合システムネットワーク論を読む(公開版)
複合システムネットワーク論を読む(公開版)考司 小杉
 
ClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろうClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろうKazuhiro Hara
 
アプリ開発を効率化する 方法あれこれ
アプリ開発を効率化する 方法あれこれアプリ開発を効率化する 方法あれこれ
アプリ開発を効率化する 方法あれこれAtsushi Mizoue
 

Andere mochten auch (6)

意識の低い自動化
意識の低い自動化意識の低い自動化
意識の低い自動化
 
複合システムネットワーク論を読む(公開版)
複合システムネットワーク論を読む(公開版)複合システムネットワーク論を読む(公開版)
複合システムネットワーク論を読む(公開版)
 
Vagrant + Puppet
Vagrant + PuppetVagrant + Puppet
Vagrant + Puppet
 
ClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろうClojureでElectronアプリを作ろう
ClojureでElectronアプリを作ろう
 
Dataflow140711
Dataflow140711Dataflow140711
Dataflow140711
 
アプリ開発を効率化する 方法あれこれ
アプリ開発を効率化する 方法あれこれアプリ開発を効率化する 方法あれこれ
アプリ開発を効率化する 方法あれこれ
 

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

Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistranokumachang_LL
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツールtotty jp
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックEmma Haruka Iwao
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy toolYuki Shibazaki
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよnpsg
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
DockerハンズオンKazuyuki Mori
 
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Emma Haruka Iwao
 
Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Kiwamu Okabe
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented featuretamtam180
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825hiro345
 
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE辰徳 斎藤
 
Lapp環境をソースからインストールする(centos)
Lapp環境をソースからインストールする(centos)Lapp環境をソースからインストールする(centos)
Lapp環境をソースからインストールする(centos)Kimiyuki Yamauchi
 

Ähnlich wie Fabricでサーバー管理をDRYにしよう (20)

Itcamp長崎2012 capistrano
Itcamp長崎2012 capistranoItcamp長崎2012 capistrano
Itcamp長崎2012 capistrano
 
Hadoop on LXC
Hadoop on LXCHadoop on LXC
Hadoop on LXC
 
実は怖くないDevOps
実は怖くないDevOps実は怖くないDevOps
実は怖くないDevOps
 
Mina 20130417
Mina 20130417Mina 20130417
Mina 20130417
 
恋に落ちるデプロイツール
恋に落ちるデプロイツール恋に落ちるデプロイツール
恋に落ちるデプロイツール
 
Dockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニックDockerイメージ構築 実践テクニック
Dockerイメージ構築 実践テクニック
 
Capistrano
CapistranoCapistrano
Capistrano
 
Cinnamon - simple deploy tool
Cinnamon - simple deploy toolCinnamon - simple deploy tool
Cinnamon - simple deploy tool
 
ラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよラズパイ2で動く Docker PaaSを作ってみたよ
ラズパイ2で動く Docker PaaSを作ってみたよ
 
Sinatra and heroku for mac
Sinatra and heroku for macSinatra and heroku for mac
Sinatra and heroku for mac
 
Dockerの導入
Dockerの導入Dockerの導入
Dockerの導入
 
Vyatta 改造入門
Vyatta 改造入門Vyatta 改造入門
Vyatta 改造入門
 
Dockerハンズオン
DockerハンズオンDockerハンズオン
Dockerハンズオン
 
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
Docker on RHEL & Project Atomic 入門 - #Dockerjp 4
 
Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
 
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
 
Lapp環境をソースからインストールする(centos)
Lapp環境をソースからインストールする(centos)Lapp環境をソースからインストールする(centos)
Lapp環境をソースからインストールする(centos)
 
Fabric
FabricFabric
Fabric
 

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

Hinweis der Redaktion

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n