SoftwareDesign 12月号でAnsible特集を組まれていたこと。これをもとに
- Ansible AWXというRed Hat Ansible TowerのOSS版があることを知る
- docker-composeで気軽に動く環境までととのっていた
このことからAnsible本格的にやろうかなぁという気持が高まりました。
現在
ちなみに現在はMitamaeで手元の環境を構築している。歴史的な背景から一部Mac固有の部分をBoxenで管理している。
2000年あたりからpuppetを利用しつづけていて、その背景もあってBoxenと融合しながら動く状態をMacでは構築していた。
仕事ではウノウ/Zynga時代はPuppet、それ以降はChefを利用することが多い経験があります。
Ansibleの魅力
Ansibleはまったくさわったことがないわけではなく、何度か利用したことがあります。
SSHを利用してエージェントなどを導入せずに稼動するのは、PuppetやChefからすると、とても魅力です。
また、RedHatに買収されたことによってAnsible存在そのものがなくなる心配やサポートも強化されました。
Ansible AWXもさわった感じだと、企業利用としては良い印象です。
企業内で利用する固有の処理や環境を使いまわしたり、共有して利用しつづけるという資産の積み上げと活用という意味では、AnsibleやAWXは現時点で非常に良い選択肢です。
Ansibleのここが悪いと思っているところ
過去にも何度かAnsibleをさわった時にあった悪い印象を思いだしてみます。
それはAnsible Galaxyなどで公開されているものの質がPuppetやChefに比べて悪いことです。
PuppetとやChefを利用している感覚からいうと、大抵の利用するものや、やりたいことは、公開されているものをダウンロードしてきて、設定ファイルやパラメータを与えればできあがります。
しかし、Ansibleはそもそも単純な利用しか想定されてないとか多くを占めました。
シンプルだからそれ以上のことは自分で書いて利用すれば良いという話なのだろうけど、その時間が無駄だから公開されてるのを探しているわけです。
「コミュニティがメンテして利用者が多いから、ある程度の質が担保されていて、安心して利用できる。」
これを期待しているのだけれども、結局自分で多くの処理を書くことになり、動作の検証などに多くの時間を取られました。
後発であることから公開されているものが少ないとうことも当初はありましたが、今はとても改善されているようでした。
個人の資産をAnsibleに移してみて辞めた
そんなこんなで、試しにBoxen(Puppet)とMitamaeでやっていることをどんどんAnsibleに移植してみました。
半分ぐらい移植しているときに、ふと感じたことをきっかけにしてAnsibleを利用するのを辞めました。
その決定的な理由が「遅い」ということです。
PuppetやChefを動作しているRubyと比較してPythonが遅いということではなく、現在ほとんどの処理をMitamaeでやっているのでmrubyで生成されたバイナリ(Mitamae)で処理するのと比べて遅いということです。
体感的に倍以上の時間をAnsibleだとかかりました。チューニングすればもっと早くなるとは思います。
ですが、これがAnsibleをまた辞める決定的な理由です。
環境構築のプロビジョニングは何度も実施されて稼動し、拡張されていくものだからこそ、処理スピードは生産性に直結します。
またYAMLになんでもかんでも記述しなければならないことから、コードで環境をコントロールできる感覚がありません。
Ansibleの制約の中で窮屈に環境をコード化しなければならない感覚を覚えました。
一方でMitamaeはRubyで書けば大体動きます。Rubyでツールを書いてMitameのDSLを動かせば良いだけです。
もちろん、設定ファイルを想定したものも記述できましすし、雑に上から処理を記述していくだけでも動きます。
やはり個人で利用するにはMitamaeは現時点で最高にフィットしているというのを実感できました。
Ansibleはダメなのか?
となると基本的にはMitamaeを採用すれば良いのか?という話になってきそうですが、考えるに、仕事で利用するならAnsibleを選択するケースが多いと思っています。
AWXとの親和性で、特定の時間にやクラスターにプロビジョンしたり、企業利用で複雑なケースにそのまま耐えられるからです。
Mitamaeで構築してしまうと、こういった部分はなんらかの方法で何かを構築しなければなりません。
また、自由度が高すぎて、再利用性のあるものを書くのを多くの人に求めるのはAnsibleよりハードルが高そうです。
様々なサーバが組織ごとにあって、協調して再利用性のあるものを活用していく方針であればAnsibleを推薦するでしょう。
ですが、公開されていものがバグってたり、現時点では再利用性あるように書く/書ける人が多いのか?疑問があります。
一方で、再利用性が高すぎるPuppetやChefのものを見ると、設定をしてプロビジョンしてみて、バグや、思わぬ挙動をしたときに調べようとすると、かなり複雑なロジックを理解しなければならないというのがあります。一見なにやってるんだろこれ?というのは結構あります。
最近のWEB開発だと事情が違う
最近だとコンテナ化が進み、本番環境でもコンテナで稼動し、開発環境でもコンテナで稼動してたりします。
こんな環境だとPupept, Chef, Ansible, Mitamaeの出番はコンテナビルド時だったりします。
こういうケースだと仕事でもMitamaeを採用しているのですが、毎回思うのは「処理がはやいわー」ということです。
ビルド時間が早いのは、やはり開発スピードに直結しているなぁと感じます。