Fabricでサーバーを操作する

Python学習【365日チャレンジ!】244日目のマスターU(@Udemy11)です。

この間、血を吸いすぎてうまく飛べない蚊が超低空飛行で飛んでいるのを見かけたので、片手で握りつぶすように捕まえると、結構な血が手についてしまいました。

マダニが血を吸いまくって巨大化するのにもびっくりですが、血を吸いすぎてその重みでうまく飛べない蚊にもびっくりしちゃいます。

それだけ血を吸われていても気づかない人(私?)にもびっくりですよね。。。

それでは今日もPython学習を始めましょう。

昨日の復習

昨日は、Vagrantfileの設定にしたがって、VMを立ち上げたVMの動作を確認しました。

仮想環境を構築して、サーバーにインストールするシステムやツールを自動的にインストールしてくれるのがVagrantの特徴ですが、それぞれのサーバーの初期設定をコードに指定しておくだけで、自動的に使える状態にしてくれるVagrantは非常に便利ですよね。

構築したサーバーにアクセスしたり、サーバーのシャットダウンや起動、削除などのコマンドを学習しました。

詳細については、こちらの記事をごらんください。

今日は、構築した仮想環境で、Fabricを使ってサーバーを操作してみます。

Fabric

Fabricは、Webアプリの起動・停止、デプロイ(使える状態にすること)などをFabricサーバからスクリプトを実行して複数のサーバに行うことのできるツールです。

Fabricでサーバーを操作する

今回は、mainサーバーからserver1server2sshで接続して処理を行いたいと思います。

fabfile.py

最初に簡単なホストタイプを取得するコードを書いて実行してみますが、昨日立ち上げた3つのサーバーが起動していなければうまく作動しないので、vagrant statusですべてのサーバーがrunninngの状態になっているか確認しましょう。

稼働していなければ、vagrant upでサーバーを起動します。

Fabricでサーバーを操作する

次に、2日前にVagrantfileを使って設定したPycharmのプロジェクトのops > fab_projectフォルダの中にfabfile.pyを作成し、次のコードを書きます。

fabfile.py

from fabric.api import run

def host_type():
    run('uname -s')

このファイルをFabricで実行すれば、ホストのタイプを出力するコマンド(uname -s)が実行されます。

まずは、ローカルに保存しているファイルがきちんとmainサーバーにも反映されているか確認しましょう。

mainサーバーを確認

Vagrantfileで記述していた下記のコードで、ローカルのopsフォルダをmainサーバーの/srv/opsフォルダに同期するように設定しています。

main.vm.synced_folder 'ops/', '/srv/ops'

確認するには、ターミナルからコマンドvagrant ssh mainを実行してmainサーバーに接続します。

接続できれば、cdコマンドでsrvフォルダに移動し、lsコマンドでフォルダ内をチェックして、さらにcdコマンドでフォルダを展開して、fabfile.pyがあることを確認します。

Fabricでサーバーを操作する

ファイルが存在することが確認できたら、次はfabfile.pyを実行します。

host_type

mainサーバーで、fab -H root@172.16.200.101 host_typeを実行して、ホストのタイプを出力します。

Fabricでサーバーを操作する

コマンドを実行すると、パスワードをたずねてくるので、設定したrootを入力すると、関数host_typeで指定したコマンドuname -sが実行され、Linuxと出力されて、プログラムが終了します。

hostとpassword

ホストとそれぞれのパスワードを事前にリストと辞書に入れておくと、短いコマンドで実行可能になります。

from fabric.api import run, env

env.hosts = ['root@172.16.200.101:22', 'root@172.16.200.102:22']
env.passwords = {
    'root@172.16.200.101:22': 'root',
    'root@172.16.200.102:22': 'root',
}

def host_type():
    run('uname -s')

最初にenvを追加でインポートして、env.hostsにホストのIPとポート(22)を指定します。(sshのポートが22)

次に、env.passwordsserver1server2のパスワードrootを指定します。

コードの追加が完了したら、mainサーバーに接続した状態のターミナルからfab host_typeを実行します。

Fabricでサーバーを操作する

ホストとパスワードが保存されているので、パスワードを入れなくてもコマンドが実行されます。

まとめ

実際に、ネットワークに仮想環境を構築して操作しているわけではないので、ちょっと分かりづらいところがあるかもしれませんね。

ただ、Macの中に仮想環境を構築してサーバーを立てて操作しているとはいえ、コマンドを叩いてきちんと動作しているのが確認できるので、ちょっとはプログラマーっぽくなってきた感じがします。

具体的に触れるものじゃなく、デジタルデータの中で処理がされているので、なかなか具体的にイメージするのが難しいのですが、このようなことが理解できるプログラマーの人は、イメージがきちんと頭の中で出来てるんだと思います。

数をこなせばなれてくると思うので、繰り返しいろいろと試してみたいと思います。

それでは明日もGood Python!