2012年10月15日

システム構築、デプロイツール Fabric について

概要

サーバ構築等のシステム構築は多数のコマンドを打鍵することになる。そうしたコマンドをメモの形で残しておいても、コピペで実行していればミスは発生するし、安全性が低い。
プログラマーなら、手順全てをプログラムしておくのが良い。
それを可能にするツールが「Fabric」。

インストール

Fabric」は Python で作成されている。インストールは easy_install か pip 等で実施する。

pip install fabric

インストールで「fab」というコマンドがインストールされるので、PATHを通しておく。

事前準備

サーバに対して実行する場合は、サーバにログインできる状態にしておく必要がある。

簡単な使い方

以下のようなファイルを「fabfile.py」の名前で作成。

from fabric.api import run

def host_uname():
    run('uname -s')

「fabfile.py」の存在するディレクトリで、ホストを指定して、「fab」コマンドを実行する。

fab -H 192.0.2.178 host_uname

この例だと「192.0.2.178」のサーバにログインして「uname -s」を実行する。ログインする時に通常のログイン処理が実行される。

もっと自動化したい場合は、「evn」を設定することで、自動的にログインすることも可能。

from fabric.api import env

# SSH のキーのパスを設定
env.key_filename = [os.path.join(os.path.dirname(__file__), 'keys/id_rsa')]
# ログイン先の IP
env.hosts = [
    '192.0.2.178',
]
# ログインユーザ名
env.user = 'username'
# sudo する際のパスワード
env.password = 'password'

マニュアル

マニュアルは「Fabric」に存在する。 Operationsの章とかは理解しやすいかもしれない。ほとんどの事が実行できる。 あとは「fabfile.py」で検索するとサンプルが沢山あるのでそれを見るのが速い。

fabfileの分割

通常は「fabfile.py」を作成して実行するが、システム構築等を実行するとすぐに「fabfile.py」が肥大化する。
「fabfile.py」を分割したい場合は「fabfile」というディレクトリを作成し、その中に「__init__.py」ファイルを作成。
同じディレクトリに Python ファイルを用意して、「__init__.py」で import すれば良い。

たとえば以下のようなディレクトリ構成にする。

.
├── fabfile
    ├── __init__.py
    ├── commons.py
    ├── etc
    │   └── ufw
    │       ├── before.rules
    │       └── before6.rules
    ├── ufw.py

「__init__.py」の中身は以下のような感じ。

import commons
import ufw

実行は「ufw.py」の中身が以下のようだとすると。「fab ufw.status」で実行できる。

from fabric.decorators import task
from fabric.api import sudo

@task
def status():
    """
    Firewall の状態確認
    """
    sudo('ufw status')

あとは API を使いこなせば、ほとんど何でも自動実行可能。事前に構築環境と同じOSなどを用意して、十分に動作を確認してから実行できるので、非常に便利。

まとめ

Fabric」に関しては利用してみないと便利さが良くわからないかもしれないが、かなり便利なツール。環境構築を汎用的に実施したい人には特にお勧め。

blog comments powered by Disqus