• 2024/03/01 掲載

Infrastructure as Code(IaC)とは何か?TerraformやAWSなどでどう構築すべきか

  • icon-mail
  • icon-print
  • icon-hatena
  • icon-line
  • icon-close-snsbtns
1
会員になると、いいね!でマイページに保存できます。
企業のDX(デジタルトランスフォーメーション)では、ビジネス環境の激しい変化に対して、柔軟かつ迅速に対応できるITシステムが求められます。それを実現するために生まれた考え方が「Infrastructure as Code(IaC:アイエーシー、コードとしてのインフラストラクチャ)」です。ここではIaCについて、基礎から、IaC活用のメリット・デメリット、それを実現するツール(Terraform、AnsibleServerspecなど)のほか、Amazon Web Services(AWS)の「AWS CloudFormation」やMicrosoft Azureの「Azure Resource Manager(ARM)」など、クラウドサービスでのIaCなどもわかりやすく解説します。
photo
IaCとは何か? 構築・設定・試験・Code管理では何が用いられるのかを具体的に解説する

Infrastructure as Code(IaC)とは何か

 Infrastructure as Code(IaC)とは、その名のとおり、「Infrastructure(インフラ)」をプログラムと同じように「Code(コード)として扱う」ということです。すなわち、ITインフラをコードで構築・管理することです。これだけでは、なかなかイメージしにくいと思うので具体例を挙げながら説明しましょう。

 そもそもインフラとは何でしょうか。わかりやすくリアルな世界でいうと、道路や信号などで構成される「交通インフラ」、発電所・送電装置などで構成される「電力インフラ」がイメージできるでしょう。

 これらはスムーズに車や人が行き来できたり、安定して電力を供給するといった何らかのサービスやモノを提供する基盤となる「設備」です。

 同様にITシステムでも、サービスを提供するための「設備」が必要となります。たとえば、サーバやストレージ、ネットワークなどがそうでしょう。ITシステムでは、これらの設備に加えて、サーバ上で動作するソフトウェアのインストールや各種の設定は当然必要になります(信号機も正しく設定しないと使えないのと同じことです)。

 このようにITシステムの設定管理も、従来は物理的な設備(ハードウェア)に紐づいて行われていたのですが、ここで大きな変化が訪れます。それがクラウド(注)の台頭です。

注:この記事でのクラウドはパブリッククラウドを意味しています。

クラウドによるITインフラの変革

 かつては物理的な機器1台を論理的にも1つの機器として扱う時代でした。それが物理的な機器1台を論理的に分割して複数の機器として扱う「仮想化」の時代を経て、物理的な設備はサービス提供者が所有し論理的に必要な設備のリソースを借りて利用する「クラウド」の時代を迎えました。

画像
時代とともに変革してきたシステムインフラ

 この変革で重要なポイントは、ITシステムのインフラが物理的な設備に囚われず、論理的(抽象的)に扱えるようになったことです。すなわち、クラウドという巨大なリソースが「インフラ」になったのです。

 一方、抽象化が進むとその管理は複雑化していきます。たとえば、複数のクラウドを組み合わせるマルチクラウド、オンプレとクラウドを組み合わせるハイブリッドクラウドも当たり前の時代になりました。

 こうなると、システムがどういう構成にあるのかわからない、システムの運用管理状況が把握できない、システムの設定を行うためのドキュメントが存在していない、再構築のための手順書がない、特定のクラウド環境と同じ環境をほかのクラウドで再現するのが難しい、これらの設定を手動でやっていると時間がかかるといった問題が起きます。

 こうした課題を解決するべく生まれたのが、コードでインフラの設定を管理するIaCです。特定のコードを実行するだけで同一環境を簡単に再現したり、適切なポリシーを遵守したITサービスを提供したり、その管理コストを低減したりすることができるのです。

ビジネス環境の変化に合わせるIaC導入のメリット

 次にIaCの導入に向けて期待できるメリットと気を付けるべきポイントを見ていきましょう。

 IaCには以下のようなメリットがあります。

  • 運用負荷の軽減
  • デプロイの高速化
  • (主に運用)コスト削減
  • デプロイなどに伴う作業ミスの軽減
  • リソースの全体管理効率化
  • DevOpsやCI/CDへの対応

 従来、何かしらのアプリケーションを用意する際、そのアプリケーションにはどれだけのITリソースが必要になるのかを見極める「プロビジョニング」という工程があり、これは時間とコストがかかる作業でした。

 前述のように、現在は物理的な機器単位ではなく、クラウドの時代に入り、必要なリソースの変化の問題は解消されましたが、クラウドにかかるコンポーネントの数は増え、日常的に提供されるアプリケーションの数も増加しているため、管理負荷はさらに拡大しています。

 その点、IaCを利用することで、各種デプロイ作業が自動化でき、これによりコスト削減や運用負荷が軽減されるほか、拡大するITインフラのニーズに応えることができるようになり、手作業によるミスなどを防ぐことも可能になります。

 さらに昨今は開発と運用が連携する「DevOps/プラットフォーム・エンジニアリング」やシステム運用の継続性を担保する「CI/CD」のような考え方も生まれてきており、こうした新しいシステムテクノロジーの活用にもつながっていきます。

 このようにIaCはコストと納期、そして品質に大きなメリットがあり、ビジネスのスピードに合わせてすぐにシステムを作ったり壊したり、作り直したりできます。昨今の変化を求められるDX環境において、非常に魅力的なものと言っていいのではないでしょうか。

導入におけるデメリット(弱点と注意点)

 上述したとおり、IaCの導入はメリットが大きいものの、弱点もあります。それはずばり初期導入コストです。IaCを導入するためには、後述するさまざまなツールを導入する必要があるため、初期投資コストが増える上に、チーム全員が使いこなす必要があり、そのためには学習コストもかさみます。

 よくある話が、IaCは活用したい。最初は〇〇システムに適用したい。ただ、お金はそのシステムの予算しかない。ということです。

 IaCの強みは、冪等性(べきとうせい)があり、繰り返し作業に強く、再利用や応用が利くということなので、単発作業・単一システムでは、初期投資コストも学習コストも回収するのは難しいといえます。

 そのため、IaCを導入するためには、その企業がITシステムに求めるものは何かを深く考え、ITシステム全体のガバナンス的な観点から検討を重ね、戦略的な投資として推進することが望ましいでしょう。

IaCを支えるツール群

 IaCが適用できる範囲はいくつかのフェーズに分けることができます。

 環境そのものを作る「構築」、作った環境を利用用途に合わせて使えるように仕上げる「設定」、作った環境をテストする「試験」、それらのCodeを適切に管理する「コード管理」に大別できます。

画像
IaCによるシステム構築の工程

 それぞれの工程に、さまざまなベンダーやオープンソースソフトウェア(OSS)が存在します。どれを使うか、何と何を組み合わせるかは各社の状況に合わせて判断いただきたいところですが、ここでは例としてメジャーといえるものをいくつか挙げていきます。

構築:AWS CloudFormationやTerraformなど

 最初の構築では、VMwareの仮想環境ならばvRealize Automation、AWS環境ならAWS CloudFormation、Azure環境ならAzure Resource Manager(ARM)、AWSやAzureなど環境に関わらず利用できるものならTerraformが挙げられます。

 環境依存要素が大きいため、利用企業(ITシステムを作る企業)がすでに利用しているプラットフォームに合わせたツールを用いることが多いと思いますが、環境に左右されにくいTerraformであれば、マルチクラウドやハイブリッドクラウドのような使い方もできるので、魅力的かもしれません。

 これらのツールはいずれもサーバやネットワークなど構成情報をテンプレートとして保存し、そのテンプレートを用いて必要なときに、テンプレート化された環境そのものを再現するツールです。

 ここでは実際にAWS CloudFormationで環境構築を行う場合の流れを簡単に書いてみます。

  • テンプレート作成
    JSONやYAMLで必要となるリソースや各種パラメータを定義
    AWSが提供するサンプルテンプレートからの修正も可能

  • プロビジョニング
    AWS WebコンソールやAWS CLIを経由し、AWS CloudFormationに上記テンプレートファイルを指定した上で、スタックの作成(実際の環境を構築)

 このように、事前に定義した内容に基づいてリソースの量に大きく左右されることなく、環境を簡単に構築することができます。

設定:Ansibleなど

 サーバOS・MW(ミドルウェア)の設定においては、独自言語を使ったPuppet、Rubyを使ったChef、YAMLで記述するAnsibleが広く使われています。

 さらにコンテナ化まで進んでいてKubernetesを利用している場合は、CNCF(Cloud Native Computing Foundation)のGraduatedであるHelmを使うことで自動化することが可能となります。

 これらのツールには得意不得意があるので、作る企業が有しているシステムもしくは作ろうとしているシステムのプラットフォームに合わせて、選定する必要があるでしょう。

試験:Serverspecなど

 実際のプロジェクトにおいてはコードが正しければ、出来上がったシステムも正しい。という論理で試験まではCode化しないケースも多いように感じますが、品質を担保する仕組みとして、具備できるならやっておくべきと言えるのではないでしょうか。

 環境をテストする観点は、内部からのテストと外部からのテストに分けられます。「テスト対象のサーバが想定どおりに設定されており、必要なプロセスが動いているか。」などの内部のテストに関してはServerspecを用いて実装することも多いと思います。

 対して、「サーバの外部からブラウザ等を経由して接続し、想定どおりの結果が得られるか。」を確認する場合はInfratasterを用いることもあると思います。

注:Seleniumなどシナリオテストにも対応しているものもありますが、システムインフラの領域を少々超えている感が出てきます。

Code(バージョン)管理:GitHubなど

 今ではGit、GitHub、GitLibが代表格と言えます。もちろん、パブリッククラウドベンダーも自サービス内で利用できるツールを用意しており、AWSではAWS CodeCommit、AzureではAzure Reposがそれにあたります。

プラスαとしての生成AI活用

 2023年は生成AIが非常に大きな話題を呼びました。その能力や活用範囲は皆さんもご存知のとおりです。IaCでも、コードでインフラを管理する分、生成AIも活用しやすくなっています。

 たとえば、GitHub Copilotでコーディングを補助してもらったり、デバッグしてもらったり、雛形を作成してもらったりとIaCの分野にも生成AIのブームが到来していると感じます。

 もしかしたら、IaCの弱点で説明した初期導入コスト、学習コストをこれから大幅に下げてくれるのかもしれません。そうなるとますます新しいチャレンジがしやすくなるので、個人的には楽しみでもあります。

 このように新しいツールや環境のための初期導入コスト、そして学習コストを伴うIaCですが、それによって得られるメリットは捨てがたいのではないでしょうか。

 VUCA(Volatility:変動性・不安定さ、Uncertainty:不確実性・不確定さ、Complexity:複雑性、Ambiguity:曖昧性・不明確さ)とも呼ばれる現代において、フットワーク軽く、さまざまなチャレンジを後押ししてくれるIaCについて、概念から解説させていただきました。

 本稿が読者の皆さんのシステム検討の一助となることを願います。

評価する

いいね!でぜひ著者を応援してください

  • 1

会員になると、いいね!でマイページに保存できます。

共有する

  • 0

  • 0

  • 0

  • 0

  • 6

  • 0

  • icon-mail
  • icon-print
  • icon-hatena
  • icon-line
関連タグ タグをフォローすると最新情報が表示されます
あなたの投稿

    PR

    PR

    PR

処理に失敗しました

人気のタグ

投稿したコメントを
削除しますか?

あなたの投稿コメント編集

機能制限のお知らせ

現在、コメントの違反報告があったため一部機能が利用できなくなっています。

そのため、この機能はご利用いただけません。
詳しくはこちらにお問い合わせください。

通報

このコメントについて、
問題の詳細をお知らせください。

ビジネス+ITルール違反についてはこちらをご覧ください。

通報

報告が完了しました

コメントを投稿することにより自身の基本情報
本メディアサイトに公開されます

必要な会員情報が不足しています。

必要な会員情報をすべてご登録いただくまでは、以下のサービスがご利用いただけません。

  • 記事閲覧数の制限なし

  • [お気に入り]ボタンでの記事取り置き

  • タグフォロー

  • おすすめコンテンツの表示

詳細情報を入力して
会員限定機能を使いこなしましょう!

詳細はこちら 詳細情報の入力へ進む
報告が完了しました

」さんのブロックを解除しますか?

ブロックを解除するとお互いにフォローすることができるようになります。

ブロック

さんはあなたをフォローしたりあなたのコメントにいいねできなくなります。また、さんからの通知は表示されなくなります。

さんをブロックしますか?

ブロック

ブロックが完了しました

ブロック解除

ブロック解除が完了しました

機能制限のお知らせ

現在、コメントの違反報告があったため一部機能が利用できなくなっています。

そのため、この機能はご利用いただけません。
詳しくはこちらにお問い合わせください。

ユーザーをフォローすることにより自身の基本情報
お相手に公開されます