ファブリック - SSH 経由で Linux 管理タスクとアプリケーション展開を自動化します
リモート マシンの管理とアプリケーションの展開に関しては、いくつかのコマンド ライン ツールが存在しますが、その多くには詳細なドキュメントが不足しているという共通の問題があります。
このガイドでは、ファブリックを使用してサーバーのグループの管理を改善する方法を紹介し、開始する手順について説明します。

ファブリックは、Python ライブラリであり、複数のマシンでの SSH コマンドの実行やアプリケーションの展開などのシステム管理タスクを実行するための強力なコマンド ライン ツールです。
こちらもお読みください: シェル スクリプトを使用して Linux システム メンテナンス タスクを自動化する
Python の実践的な知識があるとファブリックを使用するときに役立ちますが、必ずしも必要ではない場合もあります。
他の選択肢ではなくファブリックを選択すべき理由:
- シンプルさ
- 十分に文書化されている
- すでに Python を使用している場合は、別の言語を学ぶ必要はありません。
- インストールと使用が簡単です。
- 動作が速いです。
- 並列リモート実行をサポートします。
Linux にファブリック オートメーション ツールをインストールする方法
ファブリックの重要な特徴は、管理する必要があるリモート マシンには標準の OpenSSH サーバーがインストールされているだけでよいということです。開始する前に、リモート サーバーの管理元のサーバーに特定の要件をインストールするだけで済みます。
要件:
- 開発ヘッダーを備えた Python 2.5 以降
- Python-setuptools および pip (オプションですが推奨) gcc
ファブリックは、pip を使用して簡単にインストールできます (強く推奨) が、デフォルトのパッケージ マネージャー apt-get を選択して、通常は ファブリックと呼ばれるファブリック パッケージをインストールすることもできます。パイソン生地またはパイソン生地です。
RHEL/CentOS ベースのディストリビューションの場合、ファブリック パッケージをインストールするには、EPEL リポジトリがシステムにインストールされ、有効になっている必要があります。
# yum install fabric [On RedHat based systems] # dnf install fabric [On Fedora 22+ versions]
Debian とその派生版 (Ubuntu や Mint など) の場合、apt-get を実行するだけでファブリック パッケージをインストールできます。示されているように:
# apt-get install fabric
ファブリックの開発バージョンをインストールする場合は、pip を使用して最新の master ブランチを取得できます。
# yum install python-pip [On RedHat based systems] # dnf install python-pip [On Fedora 22+ versions] # apt-get install python-pip [On Debian based systems]
pip が正常にインストールされたら、次のように pip を使用してファブリックの最新バージョンを取得できます。
# pip install fabric
ファブリックを使用して Linux 管理タスクを自動化する方法
それでは、ファブリックの使用方法を始めましょう。インストール プロセス中に、fab
という Python スクリプトがパス内のディレクトリに追加されました。 fab スクリプトは、ファブリックを使用するときのすべての作業を実行します。
ローカル Linux マシンでのコマンドの実行
慣例により、お気に入りのエディターを使用して、fabfile.py
という Python ファイルを作成することから始める必要があります。このファイルには必要に応じて別の名前を付けることができますが、次のようにファイル パスを指定する必要があることに注意してください。
# fabric --fabfile /path/to/the/file.py
Fabric は fabfile.py
を使用してタスクを実行します。 fabfile は、Fabric ツールを実行するディレクトリと同じディレクトリに存在する必要があります。
例 1: まず、基本的な Hello World
を作成しましょう。
# vi fabfile.py
これらのコード行をファイルに追加します。
def hello(): print('Hello world, Tecmint community')
ファイルを保存し、以下のコマンドを実行します。
# fab hello

次に、ローカル マシンで uptime コマンドを実行するための fabfile.py の例を見てみましょう。
例 2: 次のように、新しい fabfile.py ファイルを開きます。
# vi fabfile.py
そして、次のコード行をファイルに貼り付けます。
#! /usr/bin/env python from fabric.api import local def uptime(): local('uptime')
次に、ファイルを保存し、次のコマンドを実行します。
# fab uptime

リモート Linux マシンでコマンドを実行してタスクを自動化する
ファブリック API は、Python の env
として知られる連想配列に相当する構成ディクショナリを使用します。このディクショナリには、ファブリックの動作を制御する値が格納されます。
env.hosts
は、ファブリック タスクを実行するサーバーのリストです。ネットワークが 192.168.0.0 で、fabfile を使用してホスト 192.168.0.2 と 192.168.0.6 を管理したい場合では、env.hosts を次のように構成できます。
#!/usr/bin/env python from fabric.api import env env.hosts = [ '192.168.0.2', '192.168.0.6' ]
上記のコード行は、ファブリック タスクを実行するホストを指定するだけで、それ以上のことは行いません。したがって、いくつかのタスクを定義できます。ファブリックは、リモート マシンと対話するために使用できる一連の関数を提供します。
多くの関数がありますが、最もよく使用されるのは次のとおりです。
- 実行 – リモート マシン上でシェル コマンドを実行します。
- ローカル – ローカル マシンでコマンドを実行します。
- sudo – root 権限を使用してリモート マシン上でシェル コマンドを実行します。
- 取得 – リモート マシンから 1 つ以上のファイルをダウンロードします。
- Put – 1 つ以上のファイルをリモート マシンにアップロードします。
例 3: 複数のマシンでメッセージをエコーするには、以下のような fabfile.py
を作成します。
#!/usr/bin/env python from fabric.api import env, run env.hosts = ['192.168.0.2','192.168.0.6'] def echo(): run("echo -n 'Hello, you are tuned to Tecmint ' ")
タスクを実行するには、次のコマンドを実行します。
# fab echo

例 4: 以前に作成した fabfile.py
を改善して、アップタイムを実行できます。 > コマンドをローカル マシン上で実行すると、uptime コマンドが実行され、次のように複数のマシン上で df コマンドを使用してディスク使用量もチェックされます。
#!/usr/bin/env python from fabric.api import env, run env.hosts = ['192.168.0.2','192.168.0.6'] def uptime(): run('uptime') def disk_space(): run('df -h')
ファイルを保存し、次のコマンドを実行します。
# fab uptime # fab disk_space

リモート Linux サーバーに LAMP スタックを自動的に展開する
例 4: LAMP (Linux、Apache、MySQL/MariaDB、PHP) サーバーをデプロイする例を見てみましょう。リモート Linux サーバー。
root 権限を使用して LAMP をリモートでインストールできるようにする関数を作成します。
RHEL/CentOS および Fedora の場合
#!/usr/bin/env python from fabric.api import env, run env.hosts = ['192.168.0.2','192.168.0.6'] def deploy_lamp(): run ("yum install -y httpd mariadb-server php php-mysql")
Debian/Ubuntu および Linux Mint の場合
#!/usr/bin/env python from fabric.api import env, run env.hosts = ['192.168.0.2','192.168.0.6'] def deploy_lamp(): sudo("apt-get install -q apache2 mysql-server libapache2-mod-php5 php5-mysql")
ファイルを保存し、次のコマンドを実行します。
# fab deploy_lamp
注: 出力が大きいため、この例のスクリーンキャスト (アニメーション GIF) を作成することはできません。
Fabric とその機能、上記の例を使用して、Linux サーバー管理タスクを自動化できるようになりました。
ファブリックで使用するいくつかの便利なオプション
- fab –help を実行すると、ヘルプ情報と使用可能なコマンドライン オプションの長いリストが表示されます。
- 重要なオプションは –fabfile=PATH で、fabfile.py 以外にインポートする別の Python モジュール ファイルを指定するのに役立ちます。
- リモート ホストに接続するときに使用するユーザー名を指定するには、–user=USER オプションを使用します。
- 認証や sudo にパスワードを使用するには、–password=PASSWORD オプションを使用します。
- コマンド NAME に関する詳細情報を出力するには、–display=NAME オプションを使用します。
- 形式を表示するには、–list オプションを使用します。選択肢: short、normal、nested の場合は、–list-format=FORMAT オプションを使用します。
- 使用可能なコマンドのリストを出力して終了するには、–list オプションを含めます。
- –config=PATH オプションを使用して、使用する構成ファイルの場所を指定できます。
- 色付きのエラー出力を表示するには、–colorize-errors を使用します。
- プログラムのバージョン番号を表示して終了するには、–version オプションを使用します。
まとめ
Fabric は強力なツールであり、十分に文書化されており、初心者でも簡単に使用できます。ドキュメント全体を読んで、さらに理解を深めることができます。追加すべき情報がある場合、またはインストール中や使用中にエラーが発生した場合は、コメントを残していただければ、修正する方法を見つけます。
参考: ファブリックのドキュメント