サーバの状態管理に構成管理ツールをもっと活用した方がいいんじゃないか

最近、サーバの状態管理に対する世間の関心が高いように思うのだが、状態管理をちゃんとやっている所とやっていない所の差がつらい時がある。 そこで、いわゆるProvisioning Toolchainに従い、考えてみる。

(Provisioning Toolchainについては、インフラ系技術の流れ - Gosuke Miyashitaを見てください)

Serverspec at July Tech Festa 2013より引用

まず、Bootstrappingで言えばDocker。Dockerfileからコンテナをビルドできるし、できたコンテナはリポジトリで管理できる。状態管理としては素晴らしい。Vagrantあたりも手軽に同様のことができる。

次に、Configuration。Chef、Puppet、Ansibleあたりが有名。 私は現在のプロジェクトでAnsibelを利用しており、その恩恵を十分に受けている。

で、Orchestrationでは、Capistranoとか。私は、AnsibleをOrchestrationでも使っている。Ansible便利。もっと頑張れば、Consul・Serfとか組み合わせてもいいかもしれない。

あとは、Herokuに見られるような、Gitを利用したデプロイとかもいい。Pushするだけでデプロイできちゃうみたいな。

でも、上記のようなプロビジョニングをできてない人もたくさんいるはず。 そんな時は、せめてサーバ上にあるファイルをGitなりSVNなりでバージョン管理すればいいのにと思う。

サーバの状態管理を意識していない所は、そもそも、サーバにあるファイルを構成管理できていないとかよくある。

GitにしろSVNにしろ、ファイルの追加・更新→コミット→アップデートを組み合わせれば、最初に書いたようなプロビジョニングのようなことは普通にできる。サーバまたいで同期とればOrchestration風になるし。

Provisioning Toolも大事だが、その前に構成管理をきちんと行うことも非常に大事。