インフラ構築の今昔
ここ1、2年でにわかに注目されるようになってきたIT業界のトレンドに、Infrastructure as Codeというものがあります。「インフラストラクチャをコードとして表す」とはどういうことなのでしょうか。
ここでのインフラストラクチャ(以下インフラ)とは、OSやミドルウェアといったシステムの基盤となるものです。従来どおりのインフラの構築は、まず設計書を書いておき、その都度人が手動で行っていました。たとえば、
- OSとしてUbuntuをインストール
- OSのユーザとそのパスワードを作成
- ミドルウェアとしてDBMSのMySQLをインストール
- DBMSのユーザとそのパスワードを作成
と書かれた設計書に沿って、順番にコマンドを打っていきます。1台のサーバーマシンに対してならまだしも、何十台何百台に対して行うのは一苦労です。そして、何分人の手による作業ですから、当然ミスも発生しやすいのです。
ソフトウェアの強みをインフラにも
Infrastructure as Codeでは、この設計書をコード、つまりプログラムの処理を記述したソースコードとして表します。先ほどの、UbuntuやMySQLをインストールするといった処理や、そこで設定するユーザ名・パスワードの値といったパラメータを、後述の「インフラ構成管理ツール」によって決められた言語で記述します。そしてこのコードを実行すると、記述された処理がそのまま実行されます。つまり一度書いてしまうと、あとは実行するだけで、そのとおりのインフラの環境が整えられるのです。これによってミスは減り、大量のサーバーマシンにも実行コマンドひとつで同じ環境が整えられるようになります。
設計書のコード化にはほかにも、
- インフラの構成をバーション管理できる
- 条件分岐や繰り返し、変数を含めた、動的な設計書として運用できる
といったメリットがあります。ソフトウェア領域の柔軟さを、インフラの領域に取り入れることができるのです。
インフラ構成管理ツールとは
さまざまな恩恵があるInfrastructure as Codeですが、その実現には、先ほどちらっと出てきたインフラ構成管理ツール(以下構成管理ツール)が必要です。
構成管理ツールの役割はおもに、設計書の記述に使う言語の定義と、インフラ構築のコードを実行するためのしくみの提供、の2つです。
構成管理ツールには現在いくつか種類があり、有名なものだと、Puppet、Chef、Ansibleが挙げられます。それぞれのツールで採用している言語はどれも異なっています。また構築コードは、構成管理ツールを入れたマシンとインフラを実際に構築するマシンを接続したうえで、後者のマシン上で実行します。この実行周りのしくみも、ツールによって違いがあります。
構成管理ツールの長短と、Ansibleを選ぶ理由
構成管理ツールの、言語面の違いについてもう少し詳しく見ていきましょう。
設計書を記述する言語として、PuppetとChefはプログラミング言語Rubyをベースにした独自言語を採用しています。複雑な(プラグラマブルな)処理が書きやすい反面、使いこなすにはRubyを勉強する必要があります。
AnsibleはYAMLという、本来はデータを記述するための言語を採用しています。YAMLはとてもシンプルな言語で、書きやすく/あとで読みやすい設計書が作れます。ただシンプルな反面、複雑な処理は比較的苦手です。
言語面からみると、Ansibleは構成管理ツール初心者にはぴったりのツールと言えます。
はじめようInfrastructure as Code
Ansibleの入門書『Ansible構成管理入門』では、Ansibleを手元の環境で動かすための環境作りから始め、簡単な設計書の書き方、複雑な処理を行う設計書の作り方などを丹念に解説していきます。
Infrastructure as Codeへの第一歩として、本書を片手にAnsibleに入門してみてはいかがでしょうか。