Vagrant×Ansibleで開発環境を作っているみなさんは、 どんなふうにそれを実現していますか?
きっといくつかのやり方、考え方があると思います。
例えば、ご自身のPCにAnsibleをインストールしてVagrantの仮想環境にプロビジョニングしているとか。
Vagrantで立てた仮想環境にAnsibleを入れて実行するとか。
本ブログでは下記3つのVagrant×Ansibleのやり方に注目し、
そのメリット・デメリットについて自分なりにまとめます。
- ホストにAnsibleをインストールして利用する
- ゲストにAnsibleをインストールして利用する
- Ansible実行用のゲストを作って利用する
1. ホストにAnsibleをインストールして利用する
概要
1番よくあるやり方だと思う。
ご自身のPCにAnsibleを入れてVagrantで立ち上げたゲストにプロビジョニングを行う。
メリット
なんといっても直感的でシンプル。
3.との比較になるが、Ansibleを実行する環境を別途用意する必要がないのでホストのリソースにも優しい。
また、2.との比較でゲストに無駄なものが入らない点でよい。
デメリット
ただ、そもそもwimdowsユーザはホストにAnsibleをインストールすることはできない。
つまり、複数人での開発をしていて、人によって端末が異なる場合には向いていない。
個人の端末の設定などにも大きく依存するため、チーム開発向きでないといえる。
2. ゲストにAnsibleをインストールして利用する
概要
Vagrantで立ち上げたゲストの中にAnsibleをインストールし、自身へプロビジョニングするやりかた。
この方式はshin1x1さんもおすすめしている。
Vagrant + Ansible で開発環境を作るなら ansible_local プロビジョナがいい! - Shin x Hatena Blogメリット
(詳しくは上のブログを読むといいと思う。)
1.のデメリットで述べた、端末への依存度をなくすことができる。
vagrantの新機能であるansible_localも利用できるのでプロビジョニングが楽だ。
3.と比べてAnsible実行環境を用意しなくて済む。
デメリット
メリットだけみると1.の問題点を解決していて最高のようにみえる。
しかし、ゲストに本来インストールされるべきものでないものがはいる点は忘れてはいけない。
Ansibleを使ってプロダクション環境にデプロイするユーザにとっては大きな問題だと思う。
開発環境とプロダクション環境での差分が広がってしまう。
また、Ansibleと並行してserverspecを使ってる人も多いと思うが、
そうなると今度はゲスト側にRubyもいれるのか?など様々な疑問が湧いてくる。
3. Ansible実行用のゲストを作って利用する
概要
Ansible実行用のゲストをVagrantで立ち上げて、開発用のゲストへプロビジョニングにする。
メリット
2.のデメリットで述べた、ゲストへの不要なもののインストールを防ぐことが可能。
例えばserverspecでRubyが必要な場合もAnsible実行用のゲストに入れればいい。
必要なものをインストールしたAnsible実行用のイメージファイルをチーム内で共有すれば端末依存もセットアップの手間も省ける。
デメリット
なんといっても、ゲストを二つは立ちあげる必要があること。
これは少し面倒だ。
まとめ
この見解は正直VagrantやAnsibleの使いみち、用途によってだいぶ変わると思う。
なので絶対な評価ではないと思うが、私のいままでの経験上はこのような評価となったので参考にしてもらえればと思う。