コードのインフラ化をあんまりよくわかっていない。もっと理解を深めたい。 それで、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がないときは、次のよう話があったと思う。
そんな中で、Ansibleが登場した。
というわけで、Ansibleが普及した。
なおAnsibleが登場したに書いてあることは僕の予想です。