2013-10-31

英語で検索しづらいchef vs ロゴがイマイチなansible

■まえがき

構成管理ツールが便利だよねっていう話を数年前から良く聞いていて、僕みたいな別にインフラ専門じゃないエンジニアでも使うようになる時代がやってきました。

個人的な話ですが、主な用途はvagrantへのミドルウェアデプロイです。まっさらなVMに必要なものをインストールしたりするだけで、目的が浅いw(設定ファイルとかはデフォww)


今回はchefとansibleを両方触ってみて、色んな人の記事を見た上で色々比較してみようと思います。
ただ、できることは両方やろうと思えば出来ると思うので、アレが出来ないこれが出来ないっていう比較はマサカリ怖いのであまり書かないようにします。。(わかってないなと思ったらやさしく教えてください><。)

というわけで今回比較すべきはとっつきやすさと運用方針の観点から比べてみたいなと思いました。


■それぞれの特徴比較

下記スライドがわかりやすかった。22ページ目に比較図。


資料から、ざっくりchefとansibleにフォーカスすると

・Chef

- Ruby製
- 各サーバにインストールして利用
- DSLで自由度高い書き方
- Opscodeの共有リポジトリがある

・Ansible

- Python製
- 標準モジュール意外と多い(http://www.ansibleworks.com/docs/modules.html)
- push型:sshできればおk
- 構成がシンプル:YAMLで設定書く
- 共有リポジトリ無い

▼個人的な見解

yamlは特定の言語ってわけじゃないからDSL覚えるよりはるかに楽だった。自由度も構成管理する上では手順かければいいくらいなのでそんなに要らないと思う。
ansibleは公式の共有リポジトリが何故か無かったりする。
けど、gitとかでチームが管理すれば良いかなとか思ったり。
最近だと共有してるyeoman-generatorでvagrantとansibleをテンプレ化してローカル環境構築みたいなのをやったんだけど楽。


■とっつきやすさ


好きな方を選べばいいと思う。

・主な編集ファイル

chef:rubyのDSL(自由度高い)
ansible:yaml(記法さえ分かれば使える)

・ファイル構成

chef:多い。覚えるの大変。
ansible:最小構成で1〜2ファイル。ベストプラクティスがあるけど、いわゆるファイル分割してるだけでわかりやすい。

・手間

chef:実行環境準備はchefのほうが多い。あれもできるよこれもできるよってなるときりがないけど、最初から出来る機能で評価するには面倒くさいというイメージ。
ansible:デフォルトの実行環境1回作ったらsshつながるサーバなら大体動く。やりたいことを実現するまでの過程が超シンプル。これが大事なんじゃないか。



■運用の観点からどちらを選ぶか

大規模運用だったらchef-serverとか高機能なものが用意されてたり、そういう管理がしたい時はchef。
Facebookは大規模な管理向けにchef採用してたりする。

ansibleはplaybookの共有だけで、とりあえずサーバ構築が可能。ベストプラクティスを参考にすれば大規模運用な設定も出来るはず。
yamlだから、複雑なことするときにはちょっとコツが居る。

▼個人的な見解

そんなデカい運用してたらその運用が大変なのでやっぱり簡単な方がいいな。
個人用途なので断然ansibleが楽。インフラ専門ならchefくらい使われてるモノのほうがいいのだろうか。両方出来なくは無いんだろうけど。


■web上での評判

色んな記事から評判で比較してみました。

・chefが辛くてansible使ってみた人
→chefは独自概念が多かったり、対称ホストへのインストールが発生したり面倒なイメージが強い。ドキュメントが豊富なんだけど、使える様になるまでの学習コストが高い。

・chefとansibleを両方使い込んでる人
DSLかyamlかみたいな比較。最終的にはそんな凄いことやらないじゃんってなって、もし複雑なことする場合はモジュール自作してansible使えばいいじゃんという落ち着き方。

・個人ツイートのnaverまとめ
ansibleはpythonな人にオススメ。chefとの比較はやりたい手順を書く方法としてどっちが楽かという問題。

・chef vs ansible談義
色々あったけど、どっちもやろうと思ったことはできるね。

・Ansible使ってみた人の意見

"Chefの場合ですと、knife-soloを利用する事で、Push型に似せた実行が出来るのですが、やはりプラグインを追加でインストールしなくてはならない上に、あくまでPush型ライクな実行ができるだけにとどまっています。"
→ansibleの強みはansibleだけのものじゃないけど導入は面倒


▼個人的な見解

ansible寄りな記事を集めてしまったせいなのか、情報操作してる感がして比較ではなくあくまで参考にして欲しいw

pythonならansible!っていうのも実行環境の問題だと思うんで、python別に書けなくても使える。yamlがなんなのか知らないとだけど、xmlみたいな記述してくだけのものなので勉強するとかそういうものじゃないと思う。

あとDSLだと自由度が高いよ!っていうのもいいとは思うんだけど、やっぱりそこにたどり着くまでが大変だし、そのレシピって結構めんどくさいことやってんなぁと思ってしまう。
ansibleのシンプルに書くことを前提とされてるyaml形式がいいと思うし、もし複雑なことしたいときはモジュール自作っていう手もあるしね。


■まとめ


「今からやるならansible。」だと思う。

ようこそansible教へ!
chefは独自概念が多い。対してansibleはyamlとホスト指定するファイルだけで動いちゃう。本当にシンプル。モジュール一覧見る限りだと、結構なんでも出来る。
思いつくデメリットはansibleは変数出し分けが他に比べてやり辛いかも。ベストプラクティスを参考にしてもちょっとコツが居る。

大規模運用をansibleでやったって事例があれば見たい。bashoとかevernoteとかが使ってるみたいだし大丈夫なのかな?
シンプルなのが好きだし学習コストってトコではansibleでいいんじゃないかと思う。本とか無くてもすぐ使いこなせるし。
よりシンプルで覚えやすく、やりたいことがそれなりに出来て、大規模運用も厭わない。

過去のリソースにそんなにとらわれないならansible。
ちょっと使えるようになるまで時間がかかるけど、やりたいことはなんでも出来て大規模運用でも大丈夫。過去のリソースが豊富な方が嬉しいならchef。
chefはchef屋さんにならないとダメだけど、ansibleはライトユーザーでもぱっと見で使いやすいので、開発環境の導入だったりその延長で本番環境の構築だったりで使うにしてもansibleは便利。

rubyDSL覚えるよりyamlの見方覚えるほうが楽。むしろ覚えなくてもサンプルみたら記法とか気にせず使えちゃうと思う。それくらいシンプル。

yamlだと自由度低いとかになってるけど、あんまり経験がないのでなんかインストールしたり決まった設定ファイル配置したりする程度だったらansibleでおkだと思う。
その他こういう時yaml困るぜ!ってのがあれば教えてください!!

0 件のコメント: