フェーズごとの自動化
次に「システム開発の自動化」をもう少し要素分解していきます。自動化と言えど、システム開発のすべてをコンピュータだけが担ってくれるわけではありません。基本的なことですが、システムは大きく「企画・設計」「構築」「テスト」というフェーズを経て世にリリースされ、通常は「更改」を迎えるまで「運用」されます。
「企画・設計」はまだ人間がメインで行います。現在の自動化可能対象は「構築」「テスト」「運用」の3つです。
・構築
1000台ものサーバを自動化せずに構築するには膨大な時間を必要とします。その上、人間が全くのミスなく構築できるかと言えば、それほほぼ不可能です。仮に、1000台中1台だけ設定を間違ったとしても、ミスの発覚、発見に時間がかかります。
しかし、後述する「テスト」「運用」と比較すると頻繁に変更が入るフェーズです。この点が原因で構築の自動化は難しいとして導入されてきませんでした。
・テスト
あらかじめ決められた時間や量に対して、決められた作業を行うのは人間よりもコンピュータの方が得意とする領域です。何をテストするのかは人間が考える必要がありますが、テスト内容さえ決まってしまえば、後はコンピュータに任せた方が確実です。
・運用
一度運用が始まれば、基本的には定型作業が多くなります。(例:日時、週次、月次でのログバックアップなど)運用のルールは人間が考え、実際の運用はコンピュータに。例外、非定型の作業が発生したときだけわれわれエンジニアが対応すればよいのです。
「運用」と「テスト」が自動化向きなのは一度ルールを決めてしまえば変更が入りにくい点にあります。実績も多く現在はさまざまなプロジェクトでこの2つのフェーズは自動化が取り入れられています。
しかし、「構築」は頻繁に変更が入るフェーズです。この点が原因で自動化は難しいとされ導入されてきませんでした。ではその原因がなぜ解消されたかを説明する前に、自動構築ツールがどのようなものか簡単に解説します。
自動構築の概要
自動構築ツールはChef,Puppet,Ansibleなどさまざまなものがあり、使用するプログラミング言語の違いや、それぞれに得意不得意の分野はありますが大元の機能に差はそこまでありません。大体が、ツールに対応したプログラミング言語で記述されたファイルを実行するというものです。
Ansibleを例にとってみてみましょう。Ansibleコマンドは以下の記述で使います
図1:はAnsibleコマンドを用いて/etc/rsyslog.confのファイルのモードを644から664に変更したものです。ですが、この図1を見るだけではサーバを構築するのに膨大な記述が必要だと思われるでしょうし、ファイルのパーミッションの変更だけならわざわざAnsibleコマンドを用いなくてもchmodコマンドだけで十分です。
Ansibleではplaybookというファイルにあらかじめ構築内容を記述し、それを読み込ますという手法が可能です。
図2:playbookファイルの中身
図2のplaybookを実行すると、pingによる疎通とファイルのモード変さらに加えて、httpdをyumでインストールします。hostsの部分をallに変更すれば/etc/ansible/hostsに記述されたサーバすべてが対象になるので、複数台サーバがあっても一括で構築することが可能です。
基本的に自動構築ツールにはこのような構築内容が記述されたファイルを読み込ませ一括で構築します。
それでもまだ構築のために膨大な記述が必要だと思われる方もまだいるでしょうが、いわゆる構築用テンプレートがネット上で公開されているので、ゼロから記述するということはあまりないでしょう。
以上が自動構築ツールの概要ですが、これだけではわざわざ自動構築ツールを使うメリットがありません。
大量のサーバを構築するのにツールを使わなくとも構築スクリプトを記述すれば1000台を同時に構築することは可能だからです。しかし、構築スクリプトなど自動構築ツールを用いない方法には、変更が容易でないという問題点があるのです。