近年デジタルサービスや業務のデジタル化が拡大するなかで処理するデータ量は増大し続けています。そのため、安定的にかつ効率的なITインフラの整備を行うことが求められています。インフラの管理方法が人手で行われていたものから、より効率的で信頼性の高いインフラのコード化へと変化しつつあります。
そこでこの記事ではインフラのコード化Infrastructure as Code (IaC)について概念やメリット・デメリット、おすすめツールから実践例などを解説します。

千葉県出身。落花生はあまり好きじゃない。魚が好き(千葉は漁業も盛んなのです)。 高校卒業後小売業に6年間従事、2023年よりSESインフラエンジニアとしてシステム開発・運用保守業務に携わりながら勉強中。 知識の幅を増やすため2024年より副業でライター活動を開始。 バックエンド・フロントエンド両方興味があるので幅広く知っていきたいと考えています。 座右の銘:【鉄は熱いうちに打て】
インフラのコード化とは
Infrastructure as Codeとは直訳で『コードとしてのインフラ』となりますが、ここで言うInfrastructureとはOS・ミドルウェアのことを指しています。このインフラのコード化とは何なのか解説していきます。
インフラのコード化の概要
目的としてはITインフラ部分に対して課題となっている開発における限りあるコストと時間の確保が目的であり、今後更に需要が広がるIT業界のインフラにおいて必須の知識と技術となるでしょう。
Infrastructure as Code(Iac)の定義
IaC(Infrastructure as Code)とはサーバーやネットワーク、ストレージといったITインフラの構成をコード化することで、ITインフラの構成や管理を自動化する手法をいいます。
インフラのコード化のメリット
IaCを導入していくことでコストと時間の確保に繋がりますが、具体的にはどのような嬉しいことがあるかご紹介します。
メリットの概要
IaC導入のメリットには以下のようなことが挙げられます。
- インフラの柔軟性とスケーラビリティの向上
- インフラの再現性と信頼性の向上
- リソースの効率的な管理とコスト削減
以上についてそれぞれ詳しく解説します。
インフラの柔軟性とスケーラビリティの向上
サービスが成長しインフラの拡大が課題になった際、コード化することによって変更する部分のみ編集を行いテストなどを行えば良いことから柔軟に拡張させることができ、ビジネスの成長や変化において素早く対応することが可能となります。
インフラの再現性と信頼性の向上
Webやアプリケーションの開発でも行われることがあるように、コードを複製して開発環境やステージング、本番環境などに全く同じ環境を用意することが可能です。このことから非常に正確で一貫性のある環境の構築が可能となります。
また、人手で行っていた構成や設定の自動化をすることになるため、入力ミスや誤った実行といったヒューマンエラーを防ぐことができます。
リソースの効率的な管理とコスト削減
IaCを導入した場合、インフラの構成をコード化するためGitなどといったバージョン管理ツールを導入することでいつ・どこで・誰が・どのように変更したのかを明確にすることができます。そのため、今回の変更においてどこを変更すれば良いか明確になり、時間とコストの削減に繋げることができます。
このように、IaC化することでさまざまなメリットがあり、保守と開発の効率化になることがわかります。
インフラのコード化におすすめのツール
次にIaC化するためのお勧めのツールを一部ご紹介しています。それぞれカバーできる範囲が違う部分があるため各環境について最適なツール選びの際、参考にして頂けますと幸いです。
Terraform
概要
Terraform(テラフォーム)はアメリカのHashiCorp社が開発したオープンソースツールであり、HCL(HashiCorp Configuration Language)と呼ばれる独自の言語を使用しています。また、JSONやYAMLと似た記述方法であるため読みやすく保守しやすいといった特徴を持っています。
再現性の高さと再利用性
コード化して構成管理を行うため誰が何度実行しても同じインフラの構築が可能です。このため保守運用の属人化の解消ができます。また、モジュール化しクラウドとオンプレミス両方でコード管理が行えるため、複数のプラットフォームに対してインフラの共通化が可能であることから再利用性もあります。
使い慣れたツールでのコード管理が可能
コードの管理にGitOpsやDevOps、CI/CDなどと連携することが可能であるため、新しいツールの導入の際に課題となる学習コストが低いことも特徴です。
チーム間でのコラボレーションによるミスの低減
上記のような管理ツールを使えることからチーム内でコードレビューやポリシーチェックが可能になりオペレーションミスの低減が期待できます。
AWS Cloud Formation
概要
AWS Cloud FormationはAWS(Amazon Web Services)が提供するサービスの1つです。AWSアカウント作成が必須ですがプロビジョニング(必要なものを準備することを指しITインフラの調達や設定などを意味します)やサーバー設定の自動化・構成管理サービスで、AWS環境などをテンプレート化し複数の環境構築において時間やコスト削減が可能です。
テンプレート作成とオペレーションミスの低減
JSONやYAMLなどでフォーマットがあるため必要な情報を記述しテンプレートとして使用します。テンプレート作成にはクイックスタート、サンプルテンプレート&テンプレートスニペット、オリジナルテンプレートを作成する全部で3つの方法があります。クイックテンプレートは簡便性が高いですが柔軟性がありません。そして、オリジナルテンプレートの作成は導入ハードルが高いものの柔軟性があります。
長所ばかりではないものの、テンプレートを作成してしまえば環境構築も複製するだけなのでミスがなく時間とコストの削減が可能です。
保守管理の簡便性とランニングコストの削減
AWSサービスの1つであるためAWSコンソールからサービスをどのように使用しているかがわかります。また変更履歴やバージョン管理、リソースの削除と作成が簡単に行えるため、不必要だと感じたらすぐに削除することができランニングコストを抑えることができます。
Ansible
概要
Ansible(アンシブル)とは元々は2012年にAnsible社から開発されたIaCツールです。2015年にAnsible社がRed Hat社に買収されRed Hat Ansible Automation Platformとしてブランド化されオープンソースツールとして提供されています。
導入ハードルの低さ
Ansibleでは構成管理ツールのエージェントと呼ばれる専用のソフトウェアを管理対象のIT機器にインストールする必要がありません。10台、100台といった複数の対象機器が存在した場合に、各機器にインストールする作業コストがかからないため、これだけでも大きなコスト削減になります。
また、構成管理をPlaybookと呼ばれる定義ファイルを編集しますが、YAML形式であるため高度なプログラミングスキルも必要ありません。これらのことから導入ハードルは低いと言えるでしょう。
管理対象の広さ
構成管理ツールでは主にサーバーに対して導入しますが、Ansibleでは仮想環境やネットワーク機器、ストレージに対して管理する機能があります。そのため、Ansibleに対応した機器が多いほど導入に向いています。
拡張による細かい設定
Ansibleには有料ではありますがAnsible Towerという拡張ソフトウェアがあります。拡張することで下記が可能となります。
- 権限管理
- ジョブスケジューリング
- GUIによる制御
費用についてはプロジェクトによって導入するかしないか分かれるかと思いますが、導入することでより細かい調整が可能となります。
【公式サイト】AWS Infrastructure as Code (IaC) とは何ですか?
Chef
概要
Chef(シェフ)はアメリカのChef社(旧Opscode社)が開発しているオープンソースソフトウェアです。次に紹介するPuppetと並んで人気のあるサーバー管理ツールで国内外問わず採用事例が増加しており、Ruby言語をベースとしています。このため他と比べるとエラー時などに多少Rubyのプログラミングスキルを求められる場面があります。
また、シェフ(料理人)という名前から意識しているのかコード化された構成管理情報をレシピ、その集合体をクックブックと定義しており、コミュニティによって様々なクックブックが公開され利用することが可能です。
Chefを利用するには1台のサーバー内でクックブックを作成管理や実行など完結することができるスタンドアロン構成とクックブックをサーバーで集中管理し、クライアントはクックブックをダウンロードするクライアント・サーバ構成の2通りがあります。
スケーラビリティの高さ
Chefを利用するには対象機器に対してソフトウェアをダウンロードする必要性がありますが、最初に1台で構成の設定を行い雛形を作っておくことで他のサーバーに自動でセットアップできるようになります。このため、小規模から始めて徐々に規模を広げることができるため拡張性が高いのが特徴です。
効率性の向上
インフラの構成を1度自動化すると環境構築の際毎回同じ作業を行う、ということがなくなりコストと時間をか削減することができます。そして、レシピについても細かい設定を行うにはRubyや独自の言語の知識が求められますが、コミュニティに公開されているレシピを用いることで一部分の変更を行うだけで済むため構築の効率性を向上させることが可能です。
世代管理とサービスレベルの向上
構築時に利用したレシピを用いることで実質的に運用環境のクローンを作成することが可能です。このため、バージョンアップで変更を重ねてエラーが起きてしまった際に、レシピや過去のエラーが起きていなかったレシピのバージョンにロールバックすることができます。数分から数時間以内でシステム全体の再構築ができるためサービスレベルを高めることができます。
Puppet
概要
Puppet(パペット)は2005年に開発されChefにも影響を与えました。Rubyをベースに作られているオープンソースツールであり、小規模向けには無料で利用できるオープンソース、中から大規模向けには有償のPuppet Enterpriseが存在しています。
利用する際はクライアント・サーバ型とスタンドアロン型の2種類があり、クライアント・サーバ型ではPuppet Agent(クライアント) と Puppet Server(サーバ)の2種類のソフトウェアが必要です。Puppet Agentのインストールの際にPuppetも同時にインストールされます。
わかりやすい構築定義
Puppetではインフラ環境を定義する際に、コマンドやスクリプトなどの命令を記述せずに自動で命令を行った結果の状態=求めているあるべき状態を記述するため、実行前の状態やコマンドを意識することなく構築を行うことができます。これによってチーム内情報の共有が行いやすく、高いメンテナンス性・再利用性を実現できます。
追加リソースの豊富さ
Puppetでは構成管理を行う対象をリソースと定義しますが、リソースには file(ファイル、ディレクイトリ、シンボリックリンク)、group(グループ)、service(実行されるサービス)、package(ソフトウェアパッケージ)、user(システムユーザ)、といった様々なタイプが存在しているため学習コストがかかりますが、その分Puppet Forgeには5500以上のリソースモジュールが展開されており組み合わ焦ることで自由にカスタムすることが可能です。
セキュリティとコンプライアンスの遵守
Puppetでセキュリティやコンプライアンスの設定を行うことで各サーバーと管理・運用者に対してポリシーを遵守させることが可能です。もし違反を検知すると各責任者への通知・報告とポリシー違に対して自動で修正を行います。
オーケストレーション機能による高い効率性
有償のPuppet EnterpriseではMCollective とアプリケーションオーケストレーションの2つのオーケストレーション機能があり複雑なシステムの管理を自動化できます。
MCollectiveはPuppetで管理するサーバーすべてを監視し変更を適用します。このため、緊急性の高いセキュリティパッチの適用など範囲が広い場合に非常に高い作業効率性を発揮します。
アプリケーションオーケストレーションではWeb3層アーキテクチャ(ユーザインターフェースとなるWebサーバ層(プレゼンテーション層)、アプリケーション処理となるAPPサーバ層(アプリケーション層)データ処理や保存更新するDBサーバ層(データ層))のような複数のサーバーで構成された1つのアプリケーションに対して変更の適用を行います。そのため構築や変更時にサーバーごとに適用順序を指定したい場合に便利です。
状態の可視化と自動修正によるサービスレベルの向上
Puppet Enterpriseでは設定したインフラの予期せぬ変更やエラーなどをリアルタイムで把握することが可能で、こうした問題に対して自動的に修正が行われ管理者へ通知されます。自動修正と変更や問題が発生した履歴から潜んでいた問題を早期発見と対処を行うことでサービスレベルの向上を実現できます。
インフラのコード化の実践例
IaC化する際に利用できるツールには様々なものがありそれぞれ特徴があることがおわかりいただけたかと思います。次に具体的な実践例を元に理解を深めていきましょう。
プロビジョンニング
プロビジョニングとは必要なPCやサーバーなどを準備や設定を行い使えるようにするプロセスを指します。ストレージのサイズや方式、CPUメモリなどのリソースについて適切に配置する重要な工程です。
デプロイとも似ていますが、明確な違いがあります。プロビジョニングは基本的にOSの基礎的なライブラリやツールのインストール、ネットワーク設定を行うのに対してデプロイは主にアプリケーションソフトウェアのインストールを行います。
まず初めにIaCでは以下2点について注意が必要です。
- インフラをコード化するには開発中に既存環境へ影響を与えないようにすること
- 採用したツールの範囲外となる部分を知っておくこと
そして、既存環境に導入する際に手元にある情報を元に0から作るということもできますが、多くは既存環境に合わせたインポートツール(Terraformer、Azure Terrafyなど)を利用することになります。こうして十分にどのツールを利用するか検討して計画的にツールの選定からインストールなどを行っていきます。
構成管理
構成管理を自動で行うためには最初に今までのサーバーや環境についてコード化する必要があります。AnsibleやChef、Puppetなどツールによって方法は様々ですが、コード化を行うことで一貫性のある環境作成ができ、誰が何度行っても同じ結果になる冪(べき)等性が実現できます。それほど学習コストも高くないため、コードに慣れていない場合でも比較的ハードルが低い作業です。しかし、今まで利用していた環境をコード化する作業自体はどうしても大変です。そのため外注やコミュニティを利用することも一つの手です。
コンテナ化
コンテナ化とはOS上に独立したアプリケーションを実行できるようにすることを言います。構成管理をコード化して定義すると、KubernetesやDockerといったコンテナオーケストレーションツールを利用することが可能であるため、ステージング環境の確認や変更履歴といったものを管理しやすくチーム内での認識のズレやドキュメント管理コストを減らすことができます。
自動化
構築やテストの自動化を意味するCI/CDを行うためにツールのJenkins、GitLab CI/CDなどを使用します。
たとえば、Gitで変更を本番環境に反映させた場合に本番ブランチにマージするだけで自動的に構築までを自動で行えるようになります。このようにIaCツールを単体で利用するよりCI/CDツールを併せて導入することでIaC化のメリットを増大させることができます。
こうした自動化について弊社Jiteraは得意としています。詳しい内容は以下のURLを参考に是非一度ご相談ください。
【株式会社Jitera】AIでパパっと開発!できるのは「Jitera」だけ!システム・アプリ開発ならお任せください。
モニタニングとログ
PrometheusやGrafana、ELK StackといったモニタリングツールをIaCツールと組み合わせることでデータを自動でグラフ表示し状況の把握やエラー時の解析作業軽減などをを行います。解析作業などのコストを減らすことでサービスレベル向上に繋がります。
インフラのコード化のまとめ
インフラのコード化においてどのIaCツールを導入するか、また単体で利用するのか構成管理ツールやCI/DCツールも併せて導入するのかなど様々な選択肢があることがわかったかと思います。そしてIaC化が今後更に求められる必須の技術であり、導入した場合にコストや時間の削減であったり属人化の防止、サービスレベルの向上など大きな恩恵があることは想像に難しくないと思います。
どのツールを使うとしても最初の既存のインフラをコード化するのには大きなコストと費用がかかってしまうことは確かです。悩む部分が多いかと思われますが、その際はぜひ一度株式会社Jiteraにお問い合わせください。経験豊富な社員が要望や相談から最適な提案を致します。