Fabric – SSH経由でLinuxコマンドの実行とデプロイを自動化する

ソフトウェア開発の世界では常に変化があり、効率的なリモートサーバー管理が重要です。システム管理者、ソフトウェアエンジニア、またはソフトウェア開発者である場合でも、リモートサーバー上で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パッケージマネージャーを使用して簡単にインストールできますが、yumdnf、またはapt/apt-getなどのデフォルトのパッケージマネージャーを選択してfabricパッケージをインストールすることをお勧めします。通常、fabricまたはpython-fabricと呼ばれます。

RHELシステムでFabricをインストールする

上記のテキストを日本語に翻訳します。

RHELベースのディストリビューション(例えばCentOS StreamRocky LinuxAlmaLinux)では、fabricパッケージをインストールするために、EPELリポジトリをシステムにインストールし、有効化する必要があります。

sudo dnf install epel-release
sudo dnf install fabric

DebianシステムでのFabricのインストール

Debianベースのディストリビューション(例えばUbuntuLinux 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
Fabric Tool Usage

次に、fabfile.pyの例を見てみましょう。これはローカルマシンでuptimeコマンドを実行するためのものです。

例2:次のように新しいfabfile.pyファイルを開きます。

# vi fabfile.py

そして、以下のコード行をファイルに貼り付けます。

#!  /usr/bin/env python
from fabric.api import local
def uptime():
  local('uptime')

その後、ファイルを保存し、以下のコマンドを実行します。

# fab uptime
Fabric: Check System Uptime

LinuxコマンドをSSH経由でリモートで実行する

Fabric APIは、Fabricの動作を制御する値を格納するPythonの連想配列に相当するenvと呼ばれる構成ディクショナリを使用します。

env.hosts は、Fabric タスクを実行したいサーバーのリストです。ネットワークが 192.168.0.0 で、192.168.0.2192.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
Fabric: Automate Linux Tasks on Remote Linux

例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
Fabric: Automate Tasks on Multiple Linux Systems

リモート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/