ファブリック-SSHを介したLinux管理タスクとアプリケーション展開の自動化


リモートマシンの管理とアプリケーションの展開に関しては、いくつかのコマンドラインツールが存在しますが、多くの場合、詳細なドキュメントが不足しているという共通の問題があります。

このガイドでは、ファブリックを使用してサーバーのグループの管理を改善する方法を紹介し、開始する手順について説明します。

FabricはPythonライブラリであり、複数のマシンでのSSHコマンドの実行やアプリケーションの展開などのシステム管理タスクを実行するための強力なコマンドラインツールです。

また読む:シェルスクリプトを使用してLinuxシステムのメンテナンスタスクを自動化する

Pythonの実用的な知識があると、Fabricを使用するときに役立ちますが、必ずしも必要ではない場合があります。

他の選択肢よりも生地を選ぶべき理由:

  1. Simplicity
  2. It is well-documented
  3. You don’t need to learn another language if you’re already a python guy.
  4. Easy to install and use.
  5. It is fast in its operations.
  6. It supports parallel remote execution.

LinuxにFabricAutomationToolをインストールする方法

ファブリックの重要な特徴は、管理する必要のあるリモートマシンには、標準のOpenSSHサーバーをインストールするだけでよいということです。開始する前に、リモートサーバーを管理しているサーバーに特定の要件をインストールするだけで済みます。

  1. Python 2.5+ with the development headers
  2. Python-setuptools and pip (optional, but preferred) gcc

ファブリックはpipを使用して簡単にインストールできます(強くお勧めします)が、デフォルトのパッケージマネージャーyum、dnf、またはapt-getを選択して、通常はファブリックまたはpython-fabricと呼ばれるファブリックパッケージをインストールすることもできます。

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を使用して最新のマスターブランチを取得できます。

# 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管理タスクを自動化する方法

それでは、Fabricの使用方法を始めましょう。インストールプロセス中に、 fab というPythonスクリプトがパスのディレクトリに追加されました。 fabスクリプトは、ファブリックを使用するときにすべての作業を実行します。

慣例により、お気に入りのエディターを使用して fabfile.py というPythonファイルを作成することから始める必要があります。このファイルには必要に応じて別の名前を付けることができますが、ファイルパスを次のように指定する必要があることに注意してください。

# fabric --fabfile /path/to/the/file.py

ファブリックは 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

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

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は、リモートマシンとの対話に使用できる一連の機能を提供します。

多くの機能がありますが、最も一般的に使用されるのは次のとおりです。

  1. run – which runs a shell command on a remote machine.
  2. local – which runs command on the local machine.
  3. sudo – which runs a shell command on a remote machine, with root privileges.
  4. Get – which downloads one or more files from a remote machine.
  5. Put – which uploads one or more files to a remote machine.

例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

例4:リモートLinuxサーバーにLAMP(Linux、Apache、MySQL/MariaDB、PHP)サーバーをデプロイする例を見てみましょう。

ルート権限を使用してLAMPをリモートでインストールできるようにする関数を作成します。

#!/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")
#!/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サーバー管理タスクを自動化できます…

  1. You can run fab –help to view help information and a long list of available command line options.
  2. An important option is –fabfile=PATH that helps you to specify a different python module file to import other then fabfile.py.
  3. To specify a username to use when connecting to remote hosts, use the –user=USER option.
  4. To use password for authentication and/or sudo, use the –password=PASSWORD option.
  5. To print detailed info about command NAME, use –display=NAME option.
  6. To view formats use –list option, choices: short, normal, nested, use the –list-format=FORMAT option.
  7. To print list of possible commands and exit, include the –list option.
  8. You can specify the location of config file to use by using the –config=PATH option.
  9. To display a colored error output, use –colorize-errors.
  10. To view the program’s version number and exit, use the –version option.

概要

ファブリックは強力なツールであり、十分に文書化されており、初心者が簡単に使用できます。完全なドキュメントを読んで、理解を深めることができます。追加する情報がある場合、またはインストールや使用中にエラーが発生した場合は、コメントを残すことができます。それらを修正する方法を見つけます。

参照:ファブリックドキュメント