このエントリーをはてなブックマークに追加

今日からすぐに使えるデプロイ・システム管理ツール 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先生におんぶに抱っこな記事で本当に申し訳ありません。