ソフトウェア開発の世界では常に変化があり、効率的なリモートサーバー管理が重要です。システム管理者、ソフトウェアエンジニア、またはソフトウェア開発者である場合でも、リモートサーバー上でLinuxコマンドを実行できることは一般的なタスクです。
ここで、Fabricが登場します。これは、SSHを介してリモートでLinuxコマンドを実行するために設計された高レベルのPythonライブラリであり、リモートシステムを管理する必要がある人々にとって不可欠なツールとなっています。
Fabricとは何か?
Fabricは、リモートサーバー上でシェルコマンドを実行するプロセスを簡略化する多目的なPythonライブラリです。最初はJeff Forcierによって開発され、後にオープンソースプロジェクトとなりました。
それはリモートシステムとの作業のための高レベルでPython風のインターフェースを提供し、タスクの自動化、コードのデプロイ、および複数のサーバー間での設定の管理を容易にします。
Fabricを使用する理由は?
リモートコマンドの実行ニーズにFabricを選択する数々の説得力のある理由があります:
- Pythonicアプローチ – FabricはPythonの哲学に従い、開発者やシステム管理者が既に馴染みのある言語でスクリプトを書くことを容易にします。
- SSHとParamiko – FabricはParamikoライブラリに依存しており、安全かつ信頼性のある方法でリモートでコマンドを実行するSSH接続を処理します。
- タスクベースのワークフロー – Fabricはリモートコマンドの実行に対してタスク指向のアプローチを奨励しています。タスクを定義し、基本的にはPython関数であるタスクをFabricがリモートサーバーで実行することを担当します。
- 使用例 – Fabricは、アプリケーションのデプロイ、サーバーの構成管理、システムメンテナンスタスクの実行など、幅広い用途に適した多目的ツールです。
このガイドでは、Fabricを使用してサーバー管理を強化する手順と始め方について説明します。
LinuxでFabricオートメーションツールをインストールする方法
fabricの重要な特性の1つは、管理するリモートマシンが標準のOpenSSHサーバーがインストールされているだけで済むことです。
サーバー上でリモートサーバーを管理するために必要な要件のみをインストールする必要があります。
要件:
- Python 2.5+ with the development headers
- Python-setuptools and pip (optional, but preferred) gcc
Fabricは、pipパッケージマネージャーを使用して簡単にインストールできますが、yum、dnf、またはapt/apt-getなどのデフォルトのパッケージマネージャーを選択してfabricパッケージをインストールすることをお勧めします。通常、fabricまたはpython-fabricと呼ばれます。
RHELシステムでFabricをインストールする
上記のテキストを日本語に翻訳します。
RHELベースのディストリビューション(例えばCentOS Stream、Rocky Linux、AlmaLinux)では、fabricパッケージをインストールするために、EPELリポジトリをシステムにインストールし、有効化する必要があります。
sudo dnf install epel-release sudo dnf install fabric
DebianシステムでのFabricのインストール
Debianベースのディストリビューション(例えばUbuntu、Linux Mint)のユーザーは、aptを使ってfabricパッケージをインストールできます。以下のように実行します。
sudo apt install fabric
PiPを使用したFabricのインストール
システムのリポジトリからfabricが利用できない場合は、pipを使ってインストールできます。以下のように実行します。
sudo yum install python3-pip [On RedHat based systems] sudo dnf install python3-pip [On Fedora 22+ versions] sudo apt install python3-pip [On Debian based systems]
pipが正常にインストールされたら、pipを使ってfabricの最新バージョンを取得できます。以下のように実行します。
pip3 install fabric
Fabricを使用してLinux管理タスクを自動化する方法
Fabricの使用方法を説明します。インストールプロセスの一環として、'fab'
というPythonスクリプトがシステムのPATHにあるディレクトリに追加されます。'fab'
スクリプトは、Fabricを使用する際のすべてのタスクを処理します。
Linuxコマンドをローカルで実行する
慣例に従い、お気に入りのテキストエディタを使用してfabfile.py
というPythonファイルを作成する必要があります。このファイルには別の名前を付けることができますが、次のようにファイルパスを指定する必要があります:
fab --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

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

LinuxコマンドをSSH経由でリモートで実行する
Fabric APIは、Fabricの動作を制御する値を格納するPythonの連想配列に相当するenv
と呼ばれる構成ディクショナリを使用します。
env.hosts
は、Fabric タスクを実行したいサーバーのリストです。ネットワークが 192.168.0.0 で、192.168.0.2 と 192.168.0.6 のホストを fabfile で管理したい場合、env.hosts を以下のように設定できます:
#!/usr/bin/env python from fabric.api import env env.hosts = [ '192.168.0.2', '192.168.0.6' ]
上記のコード行は、Fabric タスクを実行するホストを指定するだけで、それ以上の操作は行いません。そのため、いくつかのタスクを定義できます。Fabric は、リモートマシンと対話するために使用できる関数のセットを提供します。
多くの関数がありますが、最も一般的に使用されるものは次のとおりです:
- run – リモートマシンでシェルコマンドを実行します。
- local – ローカルマシンでコマンドを実行します。
- sudo – リモートマシンでシェルコマンドを実行し、ルート権限です。
- Get – リモートマシンから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コマンドをローカルマシンで実行し、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: リモートLinuxサーバーにLAMP(Linux、Apache、MySQL/MariaDB、PHP)サーバーをデプロイする例を見てみましょう。
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-php php-mysql")
ファイルを保存し、次のコマンドを実行します:
# fab deploy_lamp
注:出力が大きいため、この例のスクリーンキャスト(アニメーションgif)を作成することはできません。
あなたは今、Fabricとその上記の機能と例を使用してLinuxサーバー管理タスクを自動化できるようになりました…
Fabricの便利なオプション
- 役立つ情報と利用可能なコマンドラインオプションの長いリストを表示するには、
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は、SSH経由でリモートコマンドの実行を簡素化する強力なPythonライブラリであり、ユーザーフレンドリーなPython的なアプローチを提供します。複雑なタスクを簡略化し、システム管理を自動化する機能により、システム管理者、開発者、およびDevOpsプロフェッショナルにとって貴重なツールとなります。
単一のサーバーを管理しているか、大規模な展開を調整している場合でも、Fabricを使用すると、効率的かつ効果的に作業を行うことができます。
Source:
https://www.tecmint.com/automating-linux-system-administration-tasks/