プログラマでありたい

おっさんになっても、プログラマでありつづけたい

何故、Chefなのか?


 AWS界隈で今一番熱いテーマは何でしょうか?色々ありますが、自動化がその1つでしょう。そして、その実現手段としてChefを取り上げる人はかなり多くいると思います。何故、今この動きが出てくるのでしょうか?

AWS登場前と登場後のサーバ構築



 Chefのことを考える前に、AWS登場前と登場後のサーバ構築のプロセスを考えてみます。AWS登場前のオンプレミスサーバの構築の場合、最低でも見積もり⇒発注⇒製造⇒配送⇒設置⇒設定⇒デプロイという工程があると思います。

 これに対して、AWSのアカウントが既にあれば、起動⇒設定⇒デプロイという3ステップでシステムが利用出来る状態になります。

AWSの意義



 前述のことを考えるとAWSには、2つの意義があると言えます。まずクラウドという文脈で、コンピュータリソースを所有から利用へと変化させたことです。次に、コンピュータリソースを物理の制約から解き放ち、必要な時に必要なだけ、かつプログラマブルに扱えるようにしたということです。
 今までのクラウドの普及期では、前者のビジネス的なメリットが強調されてきました。そしてキャズムを超えつつある現在では、後者の点に注目が移りつつあります。インフラ構築の考え方自体が、変化してきているのです。

サーバ納品のリードタイムの話



 オンプレミス時代であれば、発注からサーバの納品までリードタイムは最低でも数週間の時間が必要でした。それがAWSを使うと数分で完了するようになりました。となると、サーバが使えるようになってからの時間が焦点になります。例えAWSを使おうとも、従来と同じように手作業で設定してテストしていれば、基本的にはサーバ設定には同じ時間が掛かります。仮にその時間を1週間とします。オンプレミスのサーバ構築であれば、サーバの納品までの時間が数週間で設定が1週間となります。比率で考えれば、それ程時間が掛かっているようには見えません。しかし、AWSと較べてみるとサーバが準備出来るまで10分程度。それに対してサーバ設定が1週間。非常に時間が掛かっているように見えます。

手作業とサーバ設定の自動化の違い



 では、手動で設定してきたサーバの設定を、Chef等を使って自動化すると早くなるのでしょうか?これは、YesであれNoであります。実際の所、初回で1度だけ構築するサーバであれば、手作業で構築した方が圧倒的に早いです。サーバ設定の自動化は、手作業で設定するものをプログラム化するだけです。ステップは2倍に増えています。(ユニットテストを含めれば、3倍になります。)という点で、1回限りで考えればサーバ設定の自動化はそれほどメリットはありません。
 しかしながら、複数のサーバを構築する場合や、長期間に渡ってサーバを保守運用する場合はどうでしょう?この場合はサーバ設定の自動化はかなりメリットあります。同じ構成の場合、2台目以降はほぼ瞬時に構築できます。また設計書と手作業というゆらぎが発生しやすいものではないので、想定したものが出来ているかという観点のテストも不要です。この点を持って、サーバ設定の自動化はメリットがあります。

AWS上でのサーバ構築の実際



 では実際の所、AWS上でのサーバ構築はどうすれば良いのでしょうか?AWSの管理コンソールで提供されている全ての機能は、APIでも提供されています。つまりプログラムとして環境構築することが可能です。またCloudFormation等の機能を使って、ネットワーク環境やインスタンスを含めてテンプレート化するケースも増えています。
 一方で、立ち上げたインスタンス(サーバ)上のミドル・アプリの構築はどうするのでしょうか?Amazonは基本的には、それに対する解は提供していません。(※)今まで通り手作業で構築しても良いし、chefやpuppetを使ってプログラマブルに行うのも良いです。じゃぁChefを使って全部プログラマブルにやってしまおうというのが、今のムーブメントです。
※AWSのOpsWorksが、Amazonの解なのかもしれませんが。

まとめ



 サーバ構築が自動化の流行の中で、インフラエンジニアの価値はどうなるのでしょうか?私は、2極化すると思います。経験豊富なインフラエンジニアが、Chefを使いこなせばレバレッジが効いて数倍の仕事が出来るようになるでしょう。当然、価値も出てくると思います。一方で、昔ながらの手作業だけを踏襲するのであれば、必要とされるところは今後数十年残るでしょうが、徐々に活躍する範囲は狭くなっていくでしょう。
 ということで、流行に乗ってChefを始めとするサーバ設定の自動化に手を出すべきだと思います。入門Chef Soloなど良書が揃ってきているので、学習コストは今ならそれ程高くありません。また試す環境も、VagrantやAWSを使えば簡単に構築できます。流行ではあるものの、確実に定着する流れだと私は考えています。躊躇なくLet's Try!!


See Also:
サーバ構築・デプロイの自動化の話。或いはChefとCapistranoの素敵な関係
Knife SoloとAmazon EC2で始めるChef Solo
運用視点でChef ServerかChef Solo + Knife Soloのどちらが良いか考えてみた
手動でサーバの設定をすることを禁ずる。入門Chef Solo