Python学習【365日チャレンジ!】244日目のマスターU(@Udemy11)です。
この間、血を吸いすぎてうまく飛べない蚊が超低空飛行で飛んでいるのを見かけたので、片手で握りつぶすように捕まえると、結構な血が手についてしまいました。
マダニが血を吸いまくって巨大化するのにもびっくりですが、血を吸いすぎてその重みでうまく飛べない蚊にもびっくりしちゃいます。
それだけ血を吸われていても気づかない人(私?)にもびっくりですよね。。。
それでは今日もPython学習を始めましょう。
昨日の復習
昨日は、Vagrantfileの設定にしたがって、VMを立ち上げたVMの動作を確認しました。
仮想環境を構築して、サーバーにインストールするシステムやツールを自動的にインストールしてくれるのがVagrantの特徴ですが、それぞれのサーバーの初期設定をコードに指定しておくだけで、自動的に使える状態にしてくれるVagrantは非常に便利ですよね。
構築したサーバーにアクセスしたり、サーバーのシャットダウンや起動、削除などのコマンドを学習しました。
詳細については、こちらの記事をごらんください。
今日は、構築した仮想環境で、Fabric
を使ってサーバーを操作してみます。
Fabric
Fabricは、Webアプリの起動・停止、デプロイ(使える状態にすること)などをFabricサーバからスクリプトを実行して複数のサーバに行うことのできるツールです。
今回は、main
サーバーからserver1
、server2
にssh
で接続して処理を行いたいと思います。
fabfile.py
最初に簡単なホストタイプを取得するコードを書いて実行してみますが、昨日立ち上げた3つのサーバーが起動していなければうまく作動しないので、vagrant status
ですべてのサーバーがrunninng
の状態になっているか確認しましょう。
稼働していなければ、vagrant up
でサーバーを起動します。
次に、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
があることを確認します。
ファイルが存在することが確認できたら、次はfabfile.py
を実行します。
host_type
main
サーバーで、fab -H root@172.16.200.101 host_type
を実行して、ホストのタイプを出力します。
コマンドを実行すると、パスワードをたずねてくるので、設定した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.passwords
でserver1
とserver2
のパスワードroot
を指定します。
コードの追加が完了したら、main
サーバーに接続した状態のターミナルからfab host_type
を実行します。
ホストとパスワードが保存されているので、パスワードを入れなくてもコマンドが実行されます。
まとめ
実際に、ネットワークに仮想環境を構築して操作しているわけではないので、ちょっと分かりづらいところがあるかもしれませんね。
ただ、Macの中に仮想環境を構築してサーバーを立てて操作しているとはいえ、コマンドを叩いてきちんと動作しているのが確認できるので、ちょっとはプログラマーっぽくなってきた感じがします。
具体的に触れるものじゃなく、デジタルデータの中で処理がされているので、なかなか具体的にイメージするのが難しいのですが、このようなことが理解できるプログラマーの人は、イメージがきちんと頭の中で出来てるんだと思います。
数をこなせばなれてくると思うので、繰り返しいろいろと試してみたいと思います。
それでは明日もGood Python!