はじめまして。ITサービス&エンジニアリング事業本部(以下、ITS&E)ITソーシング事業部の眞有 和輝です。私は現在、お客様のAmazon Web Services(以下、AWS)環境の運用・保守業務を担当しており、日々の業務を通じて得た知見や気づきを、このNSSOLブログを通じて皆さまにお伝えできればと思います。これからよろしくお願いします。
さて、近年クラウド環境の構築・運用において広く浸透してきたのが、Infrastructure as Code(以下、IaC)という手法です。私自身、業務を通じてIaCに触れる機会が増えており、その便利さや重要性を日々実感しています。とはいえ、これからIaCを学ぼうとしている方や、「名前は聞いたことあるけど、実際に何をするのかよくわからない」という方も多いのではないでしょうか。
そこで、本記事では、IaCに馴染みのない方に向けて、基本的な考え方やメリットについて、わかりやすく紹介していきます。
IaCとは、サーバやネットワーク、ストレージなどのインフラ環境を、プログラムコードとして記述・管理する手法のことを指します。例えば、次のようなコードを書くことで、EC2インスタンスを自動的に立ち上げることができます。
このコードを実行すれば、いつ・誰が・どこで実行しても、まったく同じインフラ環境が再現できるのがIaCの大きなメリットです。
このIaCという考え方が広く普及し始めた背景には、近年のクラウドコンピューティングの台頭があります。AWSやAzureといったクラウドの登場により、インフラは物理的なハードウェアから、オンデマンドで自由に作成・破棄できるリソースへと変わりました。サーバ構築やネットワーク設定もすべてAPIで実行可能です。クラウドAPIが標準になる中で、インフラをソフトウェアのように扱うのは当然の流れであり、こうした背景により、IaCが登場しました。
IaCを利用せず、手動構築でも一時的な環境なら問題ありません。しかし実際の業務において、複数人のチームで開発する場合や、何度も同じ環境を作る必要がある場合には、次のような課題が発生します。
セキュリティグループのポート番号を間違える、必要なパラメータを設定し忘れるなど、手作業ではどうしても入力ミスが発生します。開発環境ではうまく動いていたアプリケーションが、本番環境では動かない。その原因は、インフラの設定が微妙に異なっていたせいだった、というのは“あるある”の一つかもしれません。
手動構築では、作業の多くが担当者の知識や経験に依存しやすくなります。手順書が整備されていない、あの人に聞かないと分からないといった属人化が起こると、他のメンバーが構築を再現するのは困難です。こうした属人化は、メンバーの異動等で突然問題化し、インフラの保守性を損なうリスクにつながります。
シェルスクリプトやPythonスクリプトなどである程度自動化しているという方もいるかもしれません。スクリプトによる構築も自動化の一種ですが、IaCとは似て非なるものです。スクリプトは「この手順をこの順番で実行してください」という命令の集合です。一方で、IaCは、「こういう状態にしてください」と最終的な構成状態をコードで宣言するアプローチです。
この違いにより、スクリプトには次のような課題が残ります。
スクリプトで処理を実行しても、その結果どうなったかを管理しないため、再実行すると、既に存在するリソースを再作成してしまうなど、意図しない変更が起きる可能性もあります。
スクリプトは何度実行しても同じ結果になるとは限らず、既存の設定を上書きしたり、重複を生んだりすることがあります。これは環境を安定して保つ上で大きな障害になります。
※冪等性(べきとうせい)とは、ある操作を一度行っても複数回行っても、結果が同じになる性質を指します。
手動構築やスクリプトによる構築の課題に対して、IaCは次のような解決手段になり得ます。こちらも順に解説していきます。
構成がコード化されていれば、設定の打ち間違いや作業漏れといったヒューマンエラーのリスクは激減します。また、一度書いたコードは何度でも繰り返し使えるため、環境構築にかかる時間も大幅に短縮されます。
IaCで書かれたコードは、Gitなどのバージョン管理ツールで扱えるため、「いつ・誰が・何を変更したか」が明確に残ります。これはチームで開発・運用する際の透明性と信頼性を大きく向上させます。
IaCのコードは再利用可能なテンプレートとして管理できるため、プロジェクト間での使い回しやナレッジの共有がしやすくなります。また、「標準構成」として組織全体でのガイドライン化やルール整備も容易になります。
IaCは、インフラのあるべき姿をコードで定義するため、次のようなメリットがあります。
スクリプトのように手順通りに動くかどうかではなく、最終的にこうなっていてほしいというゴールに自動で近づけてくれるのが特徴です。
横にスクロールできます
IaCを実践するには、専用ツールを使ってインフラをコードで定義・管理する必要があります。現在、さまざまなIaCツールが存在していますが、それぞれ得意分野や特徴が異なるため、自分の用途に合ったものを選ぶことが重要です。ここでは、代表的な4つのIaCツールを紹介します。
Terraformは、HashiCorpが開発したオープンソースのIaCツールで、現在最も広く使われているツールの1つです。
特徴は「宣言型」の記述スタイルで、HCL(HashiCorp Configuration Language)という独自の言語を使用しますが、読みやすさを重視した設計になっており、初心者にも比較的習得しやすいツールです。また、TerraformはAWS、Azure、Google Cloudなど複数のクラウドサービスに対応しており、マルチクラウド環境でのインフラ管理にも強みがあります。構成の再利用性が高く、モジュールを使って共通パーツを使い回せるのも大きな魅力です。
なお、HashiCorpは2025年3月にIBMによる買収完了が発表されています。
Ansibleは、Red Hatが開発・提供する構成管理ツールです。Terraformが主にEC2を立ち上げるなどのインフラの構築を得意とするのに対し、Ansibleはパッケージインストールや設定ファイルの配置などの構築済みのサーバの設定・管理が得意です。記述はYAML形式で、比較的読みやすく初心者にも理解しやすい構文です。さらに、エージェントレスであるため、管理対象のサーバに専用のソフトウェアをインストールする必要がなく、SSH経由(WindowsはWinRM)で操作できる点も魅力です。
Ansibleはインフラ構築よりも設定管理に向いており、Terraformと併用されることも多くあります。
AWS CDK(Cloud Development Kit)は、AWSが公式に提供するIaCツールです。TypeScript、Python、Java、C#などの一般的なプログラミング言語でインフラを記述できます。AWS専用のツールであるため、他クラウド(AzureやGoogle Cloud)では使えませんが、AWSに特化している分、AWSの最新機能への追随が早く、公式サポートも充実しているのが強みです。
Pulumiは、比較的新しいIaCツールで、AWS CDK同様にTypeScript、Python、Go、C#などの言語に対応しています。かつTerraformと同様にAWS、Azure、Google Cloudなど複数のクラウドサービスに対応していることが強みです。一方で、Terraformに比べると利用事例やドキュメント、特に日本語の情報が少なく、学習コストが高くなることもあります。
今回のブログでは、クラウドインフラ管理の現場で注目されているIaC(Infrastructure as Code)について、初心者向けに基本的な考え方・メリット・代表的なツールについてご紹介しました。本記事が、IaCに対する理解のきっかけとなれば幸いです。
ちなみにNSSOLではAWS包括的技術支援サービスを提供しています。AWSへの移行でお悩み等ございましたら、ぜひ本サービスもご活用ください。その他、AWSをはじめマルチクラウド化に関するご相談全般はこちらからお気軽にお声がけください。また、お客様の更なるAWS利活用をご支援するべく、コスト最適化とIT統制に関するアドバイスをまとめたダウンロード資料を公開中です。ご興味ある方はぜひこちらの「AWSのガバナンス強化と、コスト最適化のポイント」もご確認ください!
最後に、クラウドリフトの先、クラウドシフトについてご検討中のお客様へは、クラウドネイティブ化を包括的に支援する新サービス「CloudHarbor(クラウド・ハーバー)」も提供しております。クラウド移行に留まらず、クラウドネイティブ化にもご興味ある方はぜひCloudHarborカタログも併せてご覧ください。それでは、また次回もお楽しみに!