はじめに
本連載では、インフラの構成をコードで管理するための便利なツールを使って、インフラを構築するための手順をご紹介します。今回は、Vagrantというツールを使って、ローカルマシンに仮想環境でWebアプリケーションの開発環境を作って、開発チーム内で統一した開発環境を構築する方法について説明します。
対象読者
本記事は、次の方を対象にしています。
- コードを使ってインフラの構成管理をしたい人
- ネットワークやLinuxの基礎知識がある人
- Webシステムの開発環境を構築したことがある人
なぜ、コードでインフラの構成管理をするの?
業務アプリケーション開発者のみなさんは、前任者が作った既存システムにバグがあり、それを修正することき、「設計書の内容と、ソースコードの中身が違う!?!」というシーンに出くわすことはありませんか? Excelの設計書とソースコードを交互ににらめっこしながら、関係者に仕様を再確認しつつ、コードを修正する作業は、あまり楽しい仕事ではないでしょう。
実はインフラ構築の現場でも、同じようなことが起こっています。本番稼働しているインフラの設計書やサーバのパラメータシートが、実際の設定値と異なって、いざ環境を構成変更しようとしたときにうまく動かないことがよくあります。
一般的なインフラ構築の場合、環境構築手順を作成してインストールやセットアップを行います。しかし台数が多くなると、人間が手作業で行うのは限界があります。そこで、インフラ構築するときは手順書をもとに構築するのではなく、「コードに書かれたとおりの内容を自動で設定する」しくみを導入すれば、だれがそのプログラムを実行しても「同じ状態」のインフラ環境が構築できます。
また、本番運用中に構成変更があったときに、サーバの状態をきちんと管理しておかないと、インフラ全体がブラックボックス化してしまい、たちまち手に負えなくなります。コードで管理してさえいれば、アプリケーション開発におけるソースコードの管理とおなじように、Gitなどのバージョン管理ソフトで履歴を管理することが可能になります。
このように、インフラの構成をコードで管理していくことは「Infrastructure as Code」と呼ばれています。
コードによるインフラ構築が求められる背景
ここで、コードによるインフラ構築が広く行われている背景について整理しておきます。従来のオンプレミス環境におけるインフラ構築は、ハードウエアを自社で調達し、その保守期限が切れるまで使うため、一度構築したものを、手入れしながら長く使うというのが一般的なやりかたでした。そのため、OS/ミドルウエアのバージョンアップだけでなく、本番運用時のトラフィックに合わせてパフォーマンスチューニングなどを行い、さまざまなインフラ構成要素を変更しながら運用管理をしていました。そのため、インフラの構成管理の負荷が増大してきました。つまり、「常に変化するインフラ」でした。
しかしながら、クラウドシステムの登場で、インフラ構築の手法が大きく変わってきました。クラウドは仮想環境をもとにしていますので、インフラ構築から物理的な制約がなくなります。そのため、これまでのオンプレミスでは難しかった、サーバやネットワークを簡単に構築したり、一旦構築したものをすぐに破棄したり出来るようになりました。そのため、一度構築したインフラは変更を加えることなく破棄して、新しいものを構築してしまえばよく、これまで負荷の大きかったインフラの変更履歴を管理する必要がなくなりました。
このようなインフラは「Immutable Infrastructure(不変のインフラ)」と呼ばれています。そして、インフラの変更履歴を管理するのではなく、動作している「インフラの状態」を管理する必要性が出てきました。
このような背景から、インフラの状態を適切に管理できる「構成管理ツール」が広く使われるようになりました