matobaの備忘録

和歌山と東京を往復しつつ活動するエンジニアの記録

Ansibleって結局なんなんや。と思ってた話

コードのインフラ化をあんまりよくわかっていない。もっと理解を深めたい。 それで、Ansibleって結局、何なの?って思ってた。 というか、Ansibleと同じ時期に、vagrant、Docker、docker-compose、fabric、terraformあたりを知ることになり、混乱が加速した。こいつら何が違うんだ!というのが僕の想いだった。

とりあえず、今日はAnsibleが何なのか、という部分の理解がだいぶ進んだ。というわけで、今のところの理解を書いておく。

  • Ansibleは、サーバーの構築を支援してくれる何か。

    • Ansibleは、サーバーを構築するために使えるコマンドを冪等性を考えてモジュール化しようとしている何か。
    • 冪等性というのは、何回実行しても、同じ状態になる性質のこと。1回デプロイしても、2回デプロイしても、同じ状態になる、ということ。
    • Ansibleは、サーバーを構築する時に必要な情報を整理するためのフレームワークも含んでいる何か。
    • Ansibleは、Ansibleの書き方(yml)で書いている構築用のコマンドをシェルで実行していくだけ。
    • Ansibleは、サーバーの状態を定義しないこともできる。Ansibleを使ったから、必ずサーバーが同じ状態になるわけではない。Ansibleが触らないファイルや設定を手作業で修正したら、それはそのまま残る。
    • Ansibleでコード化した後に残るのは、デプロイの時に何をやるか、の流れ。
  • Ansibleは、サーバーそのものの用意はできない。OSのインストールとかもできない。ハードウェアの設定もできない。

    • Ansibleでは、Vagrantのboxのようにサーバーのイメージがあるわけではない。VirtualboxのようにOSイメージがあるわけでもない。Ansibleは、構築(デプロイ)の時にやることを整理する環境とツールが用意されているだけ。イメージは何もない。
    • 例えば、AWSのEC2でアプリケーションサーバーを作る時には、Ansibleの活躍は、AWSのEC2インスタンスを作ってssh接続できるようにしてから。
    • Ansibleがインスタンスを作ることはできない。
    • Ansibleでは、sshで接続した後にやっていく作業を、手順にまとめていくことができる。それがプレイブックと呼ばれる。
  • Ansibleは、インフラエンジニアが、インフラをコード化する時の障壁を軽減する。

    • おそらく、Ansibleがないときは、次のよう話があったと思う。

      • 「インフラの構築をスクリプト化したい」→「シェルスクリプトで書けば?」→「もっとモダンな言語で書きたい」
      • 「インフラの構築をモダンな言語でスクリプト化したい」→「Chefで書くぞお!」→「僕、RubyわからないしChef、よくわからないんですけど。(ChefはRubyライクな書き方をする)
      • 「インフラの構築をモダンな言語でスクリプト化したい」→「僕はfabricでデプロイするぞお!」→「僕、Pythonわからないしfabricもよくわからないんですけど。」
    • そんな中で、Ansibleが登場した。

      • なんかよくわからんけど、ymlっていう優しい書き方をしている。
      • インフラエンジニア的には、PythonでもRubyでもPHPでもないので平和だし、どれを使う会社にいってもスムーズに使えるから、楽。
      • 構築する時に実行可能な各モジュールのインターフェースがymlで記述するフォーマットに統制されていて、考えることが減った。
      • 各モジュールでインフラのコード化をする時に、障壁になる冪等性の考慮をしやすいインターフェースになっている様子。
      • バックグラウンドがPythonコミュニティだからか、ドキュメントがすごく豊富。
      • Ansibleいいじゃん!!

というわけで、Ansibleが普及した。

なおAnsibleが登場したに書いてあることは僕の予想です。