Fabric入門の入門

Published: 2016年2月22日 by tomsato

◼︎ 概要

サーバ上で手順化されている作業を自動化してくれるFabricについてまとめます

便利で簡単なので勉強して損は無いかと思います

自分としても使い方などが気になっていたため入門の入門としてまとめます

◼︎ Fabricとは

  • コマンドライン上で任意のPython関数を実行するツール
  • 関数なので1回コマンドを実行するだけで複数のコマンドを実行することができる
  • localホストのサーバへ実行することは勿論、remoteサーバに実行することができる
  • remoteサーバ3台に実行させたい場合、並列で実行することができる

◼︎ インストール方法

参考:fabricインストール(CentOS6.5)

$ sudo yum groupinstall "Development Tools" “Base”
$ sudo yum install zlib-devel tk-devel tcl-devel sqlite-devel ncurses-devel gdbm-devel readline-devel bzip2-devel db4-devel openssl-devel python-setuptools python-devel
$ sudo easy_install pip
$ sudo pip install fabric
$ sudo pip install setuptools --no-use-wheel --upgrade
$ sudo pip uninstall pycrypto
$ sudo pip install PyCrypto==2.3

動作確認

$ fab -V
Fabric 1.10.2
Paramiko 1.16.0

◼︎ 使い方

fabfileを用意する

$ cat fabfile.py
# -*- coding: utf-8 -*-
from fabric.api import *
from fabric.colors import *

def hello():
    # Hello world!を表示させるだけのタスク
    print("Hello world!")

def test_task1():
    # /tmp/testのファイルが何件あるか調べる
    run('ls -l /tmp/test | wc -l')

    # /tmp/testを作成(既に作成済みならタイムスタンプを更新)
    sudo('touch /tmp/test')

    # 完了した旨出力させる
    print(green("test_task1 complete!!"))

def test_task2():
    # /tmp/testを作成(既に作成済みならタイムスタンプを更新)
    sudo('touch /tmp/test')

    # /tmp/testtttttのファイルが作成されているか確認
    if int(run('ls -l /tmp/testttttt 2>/dev/null | wc -l')) != 1:
        # 無かったらエラーを出して終了
        abort(red("/tmp/testttttt file is not exists !!"))

    # 完了した旨出力させる
    print(green("test_task2 complete!!"))

このfileを用意したことで以下のタスクが存在する

$ fab -l
Available commands:

    hello
    test_task1
    test_task2

実際に使ってHellow world!を出力させる

// -I パスワードを最初に入力する
// -H ホストを記述
$ fab -I hello -H localhost
Initial value for env.password:
[localhost] Executing task 'hello'
Hello world!

Done.

コマンドを複数記述したtest_task1を実行させる
test_fab1
順次実行して「test_task1 complete!!」が緑色の文字色で出力されていることを確認

Python形式に書けるのでif文も含めることができる
test_fab2
/tmp/testのファイルを作成したので/tmp/testtttttがないのは当然
abortしたことによってその後の処理は続かない

◼︎ fabfileの書き方

構文など書き方としてはpythonで記述できる
サンプルで出した例を見てもらうとわかる通りrun(‘コマンド’)とsudo(‘rootまたは別ユーザとして実行させるコマンド’)さえ覚えていればほとんど困らない

◼︎ remoteホストに対して実行する

以下のfabfileを用意する

$ cat fabfile.py
# -*- coding: utf-8 -*-
from fabric.api import *
from fabric.colors import *
def test_remote():
    run('ls')

実行する

// -i 秘密鍵の指定
// -u SSHするユーザ名の指定
$ fab -I -H XXX.XXX.XXX.XXX -i ~/.ssh/id_rsa -u user test_remote
Initial value for env.password:
[52.193.114.144] Executing task 'test_remote'
[52.193.114.144] run: ls
[52.193.114.144] out: letsencrypt  mysql_history
[52.193.114.144] out:


Done.
Disconnecting from XXX.XXX.XXX.XXX ... done.

◼︎ 並列で実行する

-P オプションを付与させると並列で実行できる

// XXX.XXX.XXX.XXXとlocalhostに対して実行させる
$ fab -I -P -H XXX.XXX.XXX.XXX,localhost -u user test_remote
 

◼︎ 参考

コメントを書く

※ Emailは公開されません

※ コメントは承認されると下記に表示されます

コメント一覧

最近の投稿

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

Netlify Formsを使ってブログサイトにコメント機能を追加する方法を調べたので紹介 Netlify FormsはNetlifyに標準機能として用意されているフォーム機能 サーバレスなので別途コメント用にサーバを用意する必要がなくHTMLを埋め込むだけで準備できる

TypeScriptの入門の入門チートシート 型の種類や使い方についてまとめていくだけでなく、 TypeScriptについてや必要性などについてもまとめることでこのページでTypeScriptをざっくり理解できる程度の内容を目指す

NetlifyのFormsやSplit Testing、Functionsについて使い方をまとめる FormsはNetlifyに標準機能として用意されているフォーム機能でコメント保存用にサーバを用意する必要がない Split TestingはGitHubのブランチをベースにしたA/Bテストを行うための機能のことで、FunctionsはNetlifyでAWS Lambdaを使うことができる

カテゴリ一覧

タグ一覧