「Chef! Chef!」と叫ばれる昨今、そのChefに挫折した皆様、いかがお過ごしでしょうか?
Chefに挫折中のid:k1LoWです。
Ansibleいいよ。Ansible。
Chefに挫折したからといってプロビジョニングツールへの憧れは消えるわけもなく、時間を見つけてはいろいろいじっていた時、
同僚からの「Ansibleというツールが良さげらしい」という情報をそのまま鵜呑みにし、PHP Matsuri 2013を通じて使ってみて今に至っています。
Ansibleいいよ。Ansible。
AnsibleはPython製のプロビジョニングツールです。ChefやPuppetと同じ領域のツールですね。
ちなみに、呼び方は、日本語英語的に「あんしぼぉ」です。「あんじぼぉ」でも「あんそぉぼぉ」でもありません。PHP Matsuri 2013でVagrantのMitchell Hashimotoさんに直接聞けたので間違いありません(自分の耳が正しければ)。
なお、ひらがな書きなのはPHP Matsuri 2013に参加したからです。
Ansibleの特徴
Ansibleは、Chefのような「サーバ-クライアント型」ではなく、Capistranoのような「Push型(sshでがんばる型)」のツールです。多分これがもっとも大きな特徴ではないでしょうか?
あと、Ansibleの個人的に特筆すべき特徴として、以下のようなものがあります。
デプロイ環境にアプリケーションに不要なものを(ほとんど)入れる必要がない
「本番環境に不要なものを入れたらダメ」「いや、不要じゃないです!これこれこういう理由で・・・」と説明する必要がないですね。
「ほとんど」と書いている理由は、AnsibleのModuleによってはPythonのライブラリを入れる必要があったりするからです。
そもそもデプロイ環境に事前にログインする必要がない(状態にまで持っていける)
--ask-pass
オプションとか--ask-sudo-pass
オプションとか、うれしいですよねー。
Rubyがいらない(Pythonはいるけど)
そういえばCakePHPに傾倒したのも当時のRailsに挫折したからでした。
自分はRubyと相性が悪いのかもしれないです。
CentOS環境にもセットアップしやすい
yumっていいですよねー。
そして、
ちょうど先日7月19日に開催された「はじめるDevOps」でのnaoyaさんの資料をご覧ください
....Ansible..だと..!?
@naoya_ito さんがAnsibleの話をしたので俺とdevil's pieは勝ち組
— k1LoW (@k1LoW) 2013, 7月 19
と、勝手に盛り上がっています。来るかもしれませんよ?(特にChef挫折組に)
Ansibleは実際どんな感じなのか?
というわけで、簡単なサンプル(というか個人的な練習)として、
2010年から細々とメンテして使ってきているさくらVPSの初期セットアップ用のシェルスクリプトを、AnsibleのPlaybookとして書き換えてみました。
shell/
がもともとのシェルスクリプト、ansible/
がAnsibleのPlaybookです。ディレクトリはフラットになっています。
ファイル名は微妙に対応関係にありません。
想定している使い方はREADME.mdに書いています。
冪等性はどこいった?
Ansible全体は冪等性を保つように作られています。が、当然それを外れることができます。
action: command yum -y update
とかはちょっとまずいコードです。まあ、もともとのコードの意義が初期セットアップだったので。。。^^
なぜcopyやtemplateを使わない?
そういうあなたはAnsibleについてよくご存知のようです。
本来、
- name: config apache
action: |
raw cat <<EOF > /etc/httpd/conf.d/virtualhosts.conf
NameVirtualHost *:80
NameVirtualHost *:443
<VirtualHost *:80>
DocumentRoot /var/www/html
<Directory "/var/www/html/">
Options -Indexes FollowSymLinks
AllowOverride All
DirectoryIndex index.html index.htm index.php
</Directory>
</VirtualHost>
EOF
みたいな設定は
- name: config apache
action: file src=/local/file/to/virtualhosts.conf dest=/etc/httpd/conf.d/virtualhosts.conf
と書けます。こちらが推奨される書き方だと思います(当然といえば当然ですが、ファイルの転送やテンプレートファイルを用いた書き変えが可能です)。
ではなぜ、わざわざ1Playbookを1ファイルで書いているのか?
このツールための布石です(どこまで1ファイルでできるか実験)。
まとめ
Ansibleいいよ。Ansible。
でもChefも使いこなしたい!あと、挫折癖をなくしたい!