今日からすぐに使えるデプロイ・システム管理ツール ansible 入門¶
タイトルおよび本文の大部分を shiumachi先生の記事 から拝借しまし た。大変感謝しております。fabric素敵ですよね。
ansibleのインストール¶
% easy_install ansible
たったこれだけです。
試してみる(1): yumコマンドをansibleから実行¶
ここでは以下のようなサーバー設定を例に取ります。
サーバ名: ec2-XXX.ap-northeast-1.compute.amazonaws.com
ユーザ名: ec2-user
公開鍵などは .ssh/config で済んでいるものとします。
Ansibleを使う場合、まず適当なディレクトリを作成し、適当なファイルを作成 してください。.ymlという拡張子をつけるのがおすすめです。今回はyum.ymlにします。
次に、以下の内容を書き込みます。YAML形式ですので、インデントには注意してください。
---
- hosts: all
user: ec2-user
sudo: yes
tasks:
- name: yumでgitをインストールする
yum: name=git state=latest
「え?」と思ったでしょうが、本当にこれでおしまいです。
次に実行したい対象のホストを書きます。今回は名前をhosts.txtにしました。
ec2-XXX.ap-northeast-1.compute.amazonaws.com ansible_connection=ssh
ホスト名の後の ansible_connection=ssh で接続方式をsshにします。標準は pythonのsshライブラリであるparamikoです。なお、コマンドラインから -u でユーザー名を指定したり、 --private-key= で鍵を指定したりもできます。
あとは、以下のコマンドを実行します。
% ansible-playbook yum.yml -i hosts.txt
たったこれだけで、リモートサーバーでyum install gitを実行できます。
非常に簡単です!
なお、EC2でしたら、ansibleのレポジトリにあるec2.pyというのを使うと、 hosts.txtを書く必要がなくなりますし、instance typeで実行対象を選択でき たりします。
試してみる(2): ansible の価値を体感する¶
複数ホストに対して同時に実行¶
hosts.txtに一行追加してください。ほんとうにそれだけです。 なお、 -f で同時に実行するホスト数を制御できます。標準は5です。
複数コマンドを順番に実行¶
例えば、ユーザー 'hoge' を作成したいとします。
その場合は、以下のようなファイルを作成します。これを adduser.yml とします。
---
- hosts: all
user: root
tasks:
- name: ユーザーを追加
user: name=hoge
次に、以下のファイルを作成します。これをall.ymlとします。
---
- include: adduser.yml
- include: yum.yml
あとは、このall.ymlを実行します。
% ansible-playbook all.yml -i hosts
実行の順番を変えるには all.yml での順番を変えるだけです。
たったこれだけのファイルで、「git をインストールする」「ユーザ hoge を 作成する」の2つの作業を実行できるのです!
やっぱりシェルスクリプトの方がいいよ¶
とか、過去に作ったシェルスクリプトがいっぱいあるよ、と人はこうすれば流 用できます。
---
- hosts: all
user: root
tasks:
- name: シェルスクリプトを実行
script: hoge.sh
hoge.shはローカルに置いてください。リモートホストにコピーする必要はあり ません。パスはymlファイルからの相対パスでもいいですし、絶対パスでも構い ません。
まとめ¶
良い点ばっかり書いてきましたが、もっと複雑なことを書こうとするとfabric を使って、pythonで書いたほうがいいかもしれません。特になにか情報を取っ て標準出力に出したい、というだけであればfabricの方がお手軽です。
しかし今回は、shiumachi先生におんぶに抱っこな記事で本当に申し訳ありません。
Comments
comments powered by Disqus