SlideShare a Scribd company logo
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

...
自動化したい
Fabricでサーバー管理をDRYにしよう
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にしよう!

More Related Content

PDF
2日間Fabricを触った俺が
 色々解説してみる
PDF
Fabric Essentials
PDF
ChefとPuppetの比較
PPTX
Puppetのススメ
PDF
Ansible 入門 #01 (初心者向け)
PPTX
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
PDF
Ansible入門
PDF
Puppet on AWS
2日間Fabricを触った俺が
 色々解説してみる
Fabric Essentials
ChefとPuppetの比較
Puppetのススメ
Ansible 入門 #01 (初心者向け)
Chef の気まぐれ環境構築 〜季節の Capistrano を添えて〜 #jawsug
Ansible入門
Puppet on AWS

What's hot (20)

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

Viewers also liked (6)

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

Similar to Fabricでサーバー管理をDRYにしよう (20)

PDF
Fabric + Amazon EC2で快適サポート生活 #PyFes
PDF
Fabric
PDF
Fabricによるcloud stackインストール自動化
PPTX
Fabric
PPTX
FabricとRailsと私
PDF
密着!わたしのコンソールアプリ開発環境
PDF
CloudFoundry 2 on Apache CloudStack 4.2.1
PDF
Hbstudy41 auto scaling
PDF
環境構築自動化ツールのご紹介
PPTX
microPCFを使ってみよう
PDF
Personal Cloud Automation
PDF
Hachiojipm31
PDF
MacPort_&_FTP_ver1.0
PPTX
ラズパイ2で動く Docker PaaSを作ってみたよ
PDF
Hyperledger Fabric 簡単構築ツール minifabricのご紹介 〜productionへの移行をminifabricで加速〜
PPTX
第一回コンテナ情報交換会@関西
KEY
Itcamp長崎2012 capistrano
PDF
コンテナ情報交換会2
PDF
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Fabric + Amazon EC2で快適サポート生活 #PyFes
Fabric
Fabricによるcloud stackインストール自動化
Fabric
FabricとRailsと私
密着!わたしのコンソールアプリ開発環境
CloudFoundry 2 on Apache CloudStack 4.2.1
Hbstudy41 auto scaling
環境構築自動化ツールのご紹介
microPCFを使ってみよう
Personal Cloud Automation
Hachiojipm31
MacPort_&_FTP_ver1.0
ラズパイ2で動く Docker PaaSを作ってみたよ
Hyperledger Fabric 簡単構築ツール minifabricのご紹介 〜productionへの移行をminifabricで加速〜
第一回コンテナ情報交換会@関西
Itcamp長崎2012 capistrano
コンテナ情報交換会2
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編

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

Editor's Notes