ChefとAnsibleの比較 〜Ansibleはじめました〜
この記事の所要時間:約4分44秒
今まで個人のMacの環境構築には、Brewfileなるものを作成していたが、
同じ目的でAnsibleを使用している例が多く見つかったので、Ansibleに順次移行することにした。
とりあえずドットインストールから入って、簡単にhomebrewのパッケージをインストールするところから始めたが、非常にいい感じ。
ちなみに今までのBrewfileを含むdotfilesはこちら
https://github.com/ikuwow/dotfiles
今回作り始めたansibleのリポジトリはこちら
https://github.com/ikuwow/mac-provision
今までサービスの動いているサーバーをChef管理にしたことはあったり、Chefはそこそこ知ってるつもりなので、
ChefとAnsible構成管理ツールには慣れていたので、簡単に比較してみる。
言語の違い
まずChefのよいところは、基本的にRubyであること。
RubyはWebの人にとっては有名な言語なので扱いやすいという人も多い。
コアもRubyで作られているので、プラグイン等の開発もAnsibleよりハードルが低いかも。
Ansibleはplaybookの記述にYAMLを用い、コアはPythonで作られている。
YAMLなのでBrewfileやRubyのスクリプトに比べたら読みやすさは上。
ただ少し複雑なロジックを入れたい場合はAnsibleのドキュメントを読んで適切な書き方を見つける必要があり、
ここはRubyよりも面倒なところではある。
クライアント側の要件の有無
Ansibleで特徴的なのは、クライアント側(管理される側のサーバー)に何もインストールする必要がないこと。
とにかくSSHが繋がりさえすればOK。ほぼクライアント側にセットアップは必要ない。
サーバーの構成管理導入のハードルがぐぐっと下がる。
Chefの場合は管理される側にchef-clientをインストールする必要があり、
リモートからknifeなりchef serverなりがトリガーしてchef-clientを働かせるという動きになる。
複雑さ
Ansibleは最小構成は非常に簡単。ssh ansible@server1.example.com
で鍵認証ログインできる状態で、
ファイルが2つあればよい。
/hosts:
--- - hosts: server1.example.com sudo: yes - tasks: - name: Install vim - yum: vim
/playbook.yml
server1.example.com ansible_ssh_user=someuser
以下のコマンドでサーバーにplaybook.ymlの内容が適用される。簡単ですね。
$ ansible-playbook -i hosts playbook.yml
対してChefはchefrepoの構成をはじめからきちっと行う必要があり、コマンド郡も多く、knifeなど外部ツールを頻繁に利用する。
管理される側にchef-cliをインストールする必要があるし、chef-serverを建てることが推奨されるため、初期の手間が結構大きい。
使い分けは?
どちらも冪等性が保たれることは変わりない。
最小構成が小さくて済み、クライアント側になにもインストールされる必要がないため、
多くの例にあるようにlocalhostだけを管理すればよいMacのプロビジョニングには最適といえる。
ただちょっと複雑なことをしようとすると非常に面倒になってくる。大規模なものになるほどChefのほうが
柔軟に色々行える印象。
またrecipeがRubyのスクリプトであるChefのほうがゴリ押しもしやすい。bashリソースでシェルスクリプト書きまくるのはこちらのほうがやりやすい。
当面はdotfilesをansibleで置き換える作業をちまちま行って慣れていこうと思う。yamlで見やすく簡単にロジックがかけるのは非常に美しい。
Chefは仕事でサービスの動いているサーバーに対して主に使用することになりそう。まだknife soloを叩いている人なので自鯖でchef server立ててちゃんとした構成にもなれるようにする。
関連記事
記事はありませんでした
- PREV
- モチベ低い大学院生でも院進学で得られたもの
- NEXT
- ブログを移行しました