ansibleを使ってみるその2

EC2で試してみる

http://www.capsunlock.net/2012/10/using-ansible-for-ec2.html

を参考にします。

export AWS_ACCESS_KEY_ID=aws_accesskey_id
export AWS_SECRET_ACCESS_KEY=aws_secret_key
export ANSIBLE_HOSTS=$(pwd)/plugins/inventory/ec2.py
export ANSIBLE_SSH_ARGS="-o ForwardAgent=yes"

pip install でbotoを入れてから、ec2.py --listと実行します。 ec2.pyは ここ にあります。

そうすると、こんな感じのが出てきます。

{
  "ap-northeast-1": [
    "ec2-54-XXX-XX-64.ap-northeast-1.compute.amazonaws.com"
  ],
  "ap-northeast-1b": [
    "ec2-54-XXX-XX-64.ap-northeast-1.compute.amazonaws.com"
  ],
  "i-49a76f4b": [
    "ec2-54-XXX-XX-64.ap-northeast-1.compute.amazonaws.com"
  ],
  "key_ansible": [
    "ec2-54-XXX-XX-64.ap-northeast-1.compute.amazonaws.com"
  ],
  "security_group_quick-start-1": [
    "ec2-54-XXX-XX-64.ap-northeast-1.compute.amazonaws.com"
  ],
  "tag_Name_": [
    "ec2-54-XXX-XX-64.ap-northeast-1.compute.amazonaws.com"
  ],
  "type_t1_micro": [
    "ec2-54-XXX-XX-64.ap-northeast-1.compute.amazonaws.com"
  ]
}

確認したら、これをANSIBLE_HOSTSで指定しておきます。こうすることにより、 ec2のinstanceを常に参照できます。

% export ANSIBLE_HOSTS=`pwd`/ec2.py

キャッシュするので、毎回読みに行くわけでは無さそうです。

ssh-add /path-to/my-ec2-keypair してから、-m pingとか打ってみましょう。

% ansible type_t1_micro -u root -m ping
ec2-54-XXX-XX-64.ap-northeast-1.compute.amazonaws.com | success >> {
    "changed": false,
    "ping": "pong"
}

"pong"と返ってきたら成功です。あ、一回sshで入ってknown_hotsに登録する必 要はあるかもしれません。

実際に使ってみよう

ということで、ec2を使う準備ができたので、playbookを作って見ました。

このレポジトリにおいたので、参考にしてください。

https://bitbucket.org/r_rudi/ansible-test

ただ、いろいろ試していて、実際には使っていないファイルとかもそのままに なっちゃってます…

解説

つっても、たいしたことはしてません。

  • sphinx/python.yml でsphinxを入れる

  • sphinx/apache.yml でapacheを入れる

    • この時、変数をindex.htmlに挿入する

  • sphinx/initialize.yml はこの両方を実行する

という動作を行うplaybookをsphinxディレクトリに入れてあります。

で、これを実行する start.yml というファイルを用意してあります。これだけ 引用すると、こんな感じです。

# 実行するには ansible-playbook start.yml
---
- hosts: type_t1_micro
  user: root
- include: sphinx/initialize.yml
  vars:
    hoge: hhh   # hogeだけ上書き

includeでsphinx/initialize.ymlを読み込んでおり、その中で使う変数 hoge だけを上書きしています。sphinx/apache.ymlを見ると、 title 変数も定義さ れてますが、これはそのまま使われます。

つまり、sphinxディレクトリだけ他所から持ってきて、includeして必要な varsだけ上書きする、という感じで使えます。cookbookの使い回しと同じよう な感じですね。

ちなみに、OSやディストリビューション依存の変数については前回を参照して ください。

まとめ

chefのいいところは、「Community Cookbook」による再利用性の高さとコミュ ニティの存在と思っています。残念ながらansibleのコミュニティはそこまで大 きくありませんが、再利用の機能は揃っているため、逆に言えば共有する仕組 みが整えば、すごく広がる可能性はあります。開発MLもかなり活発なので、今 後の展開が楽しみですね。

個人的には対象ホストへのrubyの入れ方で悩むより、対象ホストへの要求があ んまりないansibleを使ったほうが(個人で使う分には)楽なんじゃないのかなぁ、 とか思ったり。あと、設定ファイル配布とservice restartを行うtaskを分離し ておけば、別々に手動で実行させたりとかも簡単にできるので「構築はchefで、 運用はfabricで」とかにならなくてすむかもしれないなぁ、と思ったりしてい ます。

ただ、chef-soloの範囲と言われている20台を超えた時にどれぐらいchef serverと違うのかは(chef serverを使ったことがないので)分かりません。 chef serverは検索とかできますしね。

と、書いてきましたがどこまで使えるかはまだよく分かってません。感覚的に はfabric + cuisine = ansible という感じが近く、Chefに対して明確な優位性 があるかどうかは他の人にも使ってもらって感想を聞きたい感じです。

Comments

comments powered by Disqus