Infrastructure as Code(IaC)とは?インフラをコードとして管理でき、コスト削減などのメリットも!

Infrastructure as Code(IaC)とは?インフラをコードとして管理でき、コスト削減などのメリットも!

近年、働き方改革や、業務改善が急速に加速しています。その実現方法の一つが「DX(Digital Transformation)」です。英語圏では「Trans」を「X」と略すため、「DX」と呼ばれています。

DXとは、単なるIT化の推進だけでなく、IT技術によって今までにはない付加価値を加えることが重要です。DXによって多くの新たなサービスが生まれてくることが予想され、サーバーなどのインフラも複雑化・増大化することになります。

この記事では、DXを支え、DX構築のためには必須とも言える、Infrastructure as Code(IaC)について解説していきます。IaCがどのようなものか概要をお伝えし、メリット・デメリットを整理します。さらに、実際に導入を検討する際に役立つ、ツール紹介を行います。

インフラ構築を検討・導入されている方のために役立つ情報をお届けしますので、ぜひ参考にしてください。

Infrastructure as Code(IaC)とは何か?

IaC(Infrastructure as Code)とは、サーバーなどのシステムインフラの構築を、コードを用いて行うことです。

サーバー上で、Webサービスやデータ管理などの機能を提供するには、必要なソフトウェアのインストールや、各種設定を行う必要があります。そして、複雑なシステムであればあるほど、インストールするソフトウェアや設定項目の数は増加していきます。

これを人の手で行うと下記のような問題が発生する可能性があります。

  • インフラは更新されているが、手順書が更新されていないため、再構築できない
  • トライアルで入れていたソフトや設定のおかげでたまたま動作している状態で、いつ不具合が発生してもおかしくない
  • 手順書があるものの、見落としてしまい、環境が再現できない
  • そもそも手順が複雑で構築するまでに時間がかかる

これらは、実務担当者にとっては大きな課題ですし、インフラ管理者としても、再構築できない状態になることは避けなければなりません。

アプリケーション

それを解決するのが、「IaC」です。

コードでインフラの設定を記載しておき、それを実行することで、自動的にインストールや各種設定を行います。

IaCを利用することで環境構築作業を自動化できます。一方で、バージョン管理をしていくことも重要です。バージョン管理をする対象は、インフラを構築するコードと、インフラ上で動作するアプリケーションです。

これらのバージョンがIaCによって管理されていることで、環境を一式再現することが容易になり、インフラのバージョンを上げたことで、アプリケーションが動作しないという事態にも対応できるようなります。

IaCのメリット・デメリット

まず、IaCを活用する目的として以下のものがあげられます。

  • 自動化することで、人件費を削減したい
  • 自動化することで、人為的なミスを減らし、担当者の負荷を下げたい
  • インフラの管理コストを削減したい

前提条件として、IaCの導入にあたり、企業側である程度コストや人材面のリソースが確保できていることとします。

そのうえで、IaCを導入するメリットとデメリットについてご紹介します。

IaCのメリット

IaCを導入するメリットの代表的なものを3つ紹介します。

1.コスト(特に人件費)を削減できる

コードでインフラを記述してしまえば、環境の再構築を自動化できます。環境を構築するために、手作業で複数のソフトをインストールしたり、設定内容を変更したりする必要がなく、そこにかかる人件費を削減できます。

また、手順書などのドキュメント整備も簡略化することが可能で、環境構築のための手順書などはある程度必要ですが、設定内容の詳細は、コードやコメント文として記載することが可能です。

これは最初の環境構築時だけでなく、リリース後のメンテナンス時にも役立ちます。

2.人為的なミスを削減し、品質が向上する

ソフトウェアのインストールやサーバーの設定が自動化されているため、人為的ミスを削減できます。IaC環境を構築してしまえば、人手が発生するのは自動化ツールを実行する時だけになります。

大規模なシステムであるほど、サーバーの設定内容は複数のファイルにまたがります。このうち設定ミスが1つあるだけで正常に動作しなくなることもありますが、IaCを導入することでこのようなミスを削減できます。これは、サービスの品質を上げることにもつながります。

3.システムを組み合わせて、求められるサービスを提供できる

これは上記2つに比べると、少し上級テクニックになりますが、IaCを活用する と、 求められるサービスを容易かつ短時間で提供できます。 事前に、構築できるシステムを小さな単位(モジュール)で構成し、 そのモジュールを組み合わせる事で 実現可能です。

例えば、Webサーバーを提供するモジュールと、データベースのモジュール、そしてこの2つを検証するためのモジュールという3つの構成にしておきます。自社で検証する時には、3つのモジュールを使用し、ある顧客にはWebサイトのみ、別の顧客にはWebサイトとデータベースを組み合わせて提供するなどのケースに対応できます。環境を柔軟に構築できることは、提供するサービスが多くなるほど大きなメリットとなるでしょう。

人件費カット

IaCのデメリットと改善策

IaC導入に際し、注意すべきデメリットとその改善策を3つ紹介します。

1.システム構築のためのスキルが必要で、スキル習得及び最初の構築に時間がかかる

IaCを導入する場合、コードで環境を構築していく必要があります。それには、IaCという仕組みに慣れることや、スキルを習得する必要があり、時間がかかります。また、最初のシステムであれば、手順書の内容をコード化する必要があり、その作業にも時間を要します。

そのため、いきなり複雑なシステムから入るのではなく、まずは、簡単なシステムでIaCを導入し、全体像をつかむことをおすすめします。

2.ツールを活用するために基本的な知識が必要

IaCを実現させるツールには複数の種類があり、用途や実現させたい内容によって使い分ける必要があります。そして、どのツールを使用する場合でも、それぞれのツールの特徴を理解し、記述方法やルールなどを学ぶ必要があります。

学習のための時間はどうしても必要ですが、ツールベンダーが開催するセミナーや、IaCの研修などを利用することで、効率よく習得できます。

3.簡単な設定変更でも時間がかかる場合がある

コードで環境を管理しているため、簡単な変更でもコードを修正し、その後ツールを実行し、環境を構築する必要があります。例えば、サーバーのコンソール上で1コマンドを実行したり、1ファイルを変更したりする場合でも、IaCを使用している場合は時間がかかります。

単に手順だけを比較すると時間はかかりますが、その後のメンテナンスコストや、複数の環境を構築する場合を踏まえると、トータルの時間は削減できると言えます。そのため、目先の作業時間にとらわれず、保守・運用なども含めた時間や品質で検討するとよいでしょう。

スキルアップの時間

\文字より動画で学びたいあなたへ/

Udemyで講座を探す >

IaCを支えるツール

IaCを本格的に導入するには、ツールは必要不可欠です。シェルスクリプトで構成を管理することも可能ですが、ツールを使うと利便性が上がります。

例えば、シェルスクリプトで構成を管理していて、インストールの最中に再起動が必要になった場合、再起動後に実行するシェルスクリプトを分ける必要があります。

IaCツールを使えば、どこまで設定していたかを記憶しておけるため、再起動後も設定の続きを行うことができます。

ここからは、よく使用されているツールとその特徴を解説します。

Chef

設定ファイルを「Ruby」の記法で書けるのが大きな特徴で、その設定ファイルを使用して、サーバーの設定が行えます。

また、インフラを集中管理するサーバー内で設定ファイル(「クックブック」や「レシピ」と呼ばれるファイル)を作成・管理し、クライアントであるセットアップ対象のサーバーからダウンロードして使用することで、複数台のクライアントを設定することが可能です。

ChefはOSSプロジェクトとして開発を進めており、コミュニティによって多くの設定ファイルが公開されています。自由に利用できるため、上手く利用することで開発効率を上げる事ができます。

Ansible

2012年から提供されたツールで、後発製品ではありますが、従来のツールにはないメリットがあります。

Ansibleで使用するPlaybookと呼ばれる設定ファイルは、YAML形式で記述されたテキストファイルです。YAML形式とは、インデントによってデータ構造を定義したものです。

ChefであればRubyについて理解が必要ですが、Ansibleでは、学習コストの低いYAML形式の記述方法を理解できれば使用できるため、スモールスタートでIaCを始めるには導入しやすいツールと言えます。

Docker

Dockerは、Docker社が開発した「コンテナ」という概念を管理するソフトウェアで、サーバを起動する方法がシンプルで、かつ起動や処理が速いことが特徴です。

上記の2つと大きく異なるのは、システムを構築するLinuxのディストリビューション(UbuntuやRed Hat、CentOSなどのOS)から管理することができることです。ChefやAnsibleはOS上で動作するソフトウェアなどを自動で構築するものでしたが、Dockerはコンテナと呼ばれる仮想化を発展させた技術を使用することで、別のディストリビューションを動作させることが可能です。

Dockerはコンテナ上で動作するOSや、インストールするソフトウェア、設定なども自動で構築できるため、OSに依存しない環境を構築することが可能です。

ただし、自動構成対象が増えるため、柔軟性や利便性はありますが、その分、学習コストは高くなります。

Dockerについては、「Dockerとは何かを入門者向けに解説!基本コマンドも」で詳しく解説していますので、ご参照ください。

 

今回の記事では、DXにより注目度が高まっているIaCについてお伝えしました。IaCを導入することで、コスト面やシステムの安全性におけるメリットが期待できます。インフラ管理で課題を感じている方は、検討をしてみてはいかがでしょうか。