fabricによるリモートサーバのコントロールを試してみる

シルバーウィークも終わりました。皆さんは何処かに遊びに行ってみたでしょうか。

さて、今日は以前から気になっていたFabricについて、調べてみたことを書いてみます。
思っていたよりも使えるツールだな、と感じ、弊社でも導入してみようかと思っています。

Fabricとは何ぞや?

公式の概要では以下のように記述されています。

  • コマンドライン 経由で 任意の Python 関数 を実行するツール
  • SSH経由で 簡単に かつ Python風に シェルコマンドを実行

簡単に言えば、SSHでログインしたサーバ上でのシェルコマンドを手元のPythonから実行できるようになるライブラリの事、ですね。
弊社でもある程度、サーバ上での仕事をシェルスクリプトでコントロール(自動化)していますが、色々な問題点が出てきています。

  • サーバにSSHでログインする所までは自動化出来ていない部分があり、操作ミスを起こす可能性がある
  • SSHログインまでを自動化させたスクリプトもある事はあるが、シェルスクリプト自体のメンテナンスが面倒

シェルスクリプトも極めれば色々と使えるのですが、特に私は極めていない部類に入ってしまうので、なかなかメンテナンスが難しいですね(^^;
FabricのようにPythonの関数チックにリモート実行のためのコマンドが使えるのであれば、そちらを試してみたくなるってもんです。

Fabricのインストール

という訳で早速使ってみましょう。

その前にまずはインストールから。pipが入っていれば以下のコマンドから簡単にFabricのインストールが出来ます。

$ pip install fabric

(注意)
Windows環境のみ、Microsoft Visual C++ Compiler for Python 2.7が必要となりますので、ダウンロード&インストールを事前にしておきましょう。

Fabric基本編

Fabricをどのように使うか、ついてはFabricチュートリアルの和訳ページが役に立つと思います。

下記のようなサンプルのファイルを作ってみます。ファイル名はfabfile.pyとして下さい。

from fabric.api import *


def samplecommand():
    env.host_string = xxx.xxx.xxx.xxxx
    env.user = 'user'
    env.password = 'password'
    run('ls -l')

簡単に、リモートサーバ上で「ls -l」をするスクリプトです。
これを実行してみましょう。

$ fab samplecommand
[xxx.xxx.xxx.xxx] run: ls -l
[xxx.xxx.xxx.xxx] out: total 0
[xxx.xxx.xxx.xxx] out:

ディレクトリ内に特にファイルを作成していなかったので何もリストされませんでしたが…一応リモートサーバ上でコマンドを実行する事が出来ました。

上記の例では自PC→リモートサーバでのシェルコマンド実行、という形でしたが、下記参考URLの記事に従えば、多段での実行が可能となります。
チューリング不完全
Stack Overflow

多段での実行、と言うのは「自PC→リモートサーバ1→リモートサーバ2」のパターンですね。
自PCからリモートサーバ2への直接のアクセスは出来ません(リモートサーバ2での作業を行うためにまずリモートサーバ1にログインする必要がある)。

この状況でFabricが使えるとなると作業性が格段に向上します。

fabric応用編

ここまでで、結構便利に使えそうだな、という印象を持ちました。が、もう一つ便利に使えそうな技があります。

以前、Vagrantを使ってFuelPHP開発環境を構築というエントリでVagrantを少し使ってみたことがあります。

その時はVagrant、VirtualBoxを用いて仮想マシンが出来た~、良かった良かった!と言った所で終わっていました。
「折を見てVagrantfileのカスタマイズを行いプロビジョニング自動化を進めたいですね」なんて書いていたのですが…結局は色々と自動化スクリプトを書くのに時間が取れませんでしたorz

その際の大きな問題としては「rubyスクリプトに慣れていない」という事ですね。
更に言えば「Vagrantファイルを修正するためだけにrubyを学習するにはコストがかかりすぎて手が出ない」という問題もありました。
そんな折、いつもチェックしていたblogの昔のエントリでVagrant Fabricで簡単プロビジョニングと言うものを見つけました。

このエントリに沿ってVagrant Fabric Pluginをインストールすれば、FabricスクリプトをVagrantfileで使えるようになります。
これで懸案事項だった仮想サーバのプロビジョニングの自動化に大きな一歩となりそうです。

まとめ

いかがだったでしょうか?
冒頭でも書いたのですが、このFabricというツールの存在には依然から気にはなっていたのですが、なかなか試してみよう!という気にはなりませんでした。
(他の仕事が忙しかった、という言い訳もあります)

では何故、今回「試してみよう」という気になったのかと言いますと…
あぐりログサーバ、ログBOXのメンテナンスにかかる手間を自動化により削減したい、という目的があったためです。

これまでは、どちらかと言うと「あぐりログの新機能の開発」に弊社エンジニアのリソースを割り振っていました。
現在はログBOXの量産化を進めていて、これまでよりもサービスの規模が拡大していきます。
規模が拡大した際に必要なのはサービスに関する保守作業を出来るだけ人の手を掛けずに自動化させる事です。
(限られたリソースを最大限活用したいですからね)
今までが上半身の強化という感じでしたが、今回はいわば足腰の強化を狙った、と言えますね。

自動化の一環として、Fabricを試しに使ってみたのですが、私が当初思っていたよりも「使える」という手ごたえを感じました。
近いうちに本格的導入と行きたい所ですね。

それではまた!