DXを進めるうえでクラウドサービスの活用やDevOpsの考え方が普及した昨今、ITインフラ環境の構築にもスピードや自動化が求められるようになりました。そこで注目されているのがInfrastructure as Codeという手法です。Infrastructure as Codeとはインフラの構成や設定をコード化して管理・構築の自動化を行うことを指し、さまざまなメリットをもたらします。しかし導入するには課題も存在するため、まずは正しい知識を得てポイントを押さえることが重要です。本記事ではIaCの概要やメリット、実現するためのツールや注意点などについて詳しく解説します。
目次
Infrastructure as Codeとは
Infrastructure as Code(以下、IaC)とは、直訳すると「コードとしてのインフラ」という意味で、サーバーやネットワークをはじめとするITインフラの構成や設定をコード化して管理・構築の自動化を行うことを指します。たとえばサーバーの構築なら、OSやミドルウェアのインストールや設定、ネットワークの設定、アカウント作成などの作業が必要です。従来はこれらの作業を手動で行っていましたが、システムが大規模になったり複雑になったりするほど作業量は増え、時間やコスト、作業上のミスなどが課題となっていました。
これらの課題を解決するアプローチとなるのがIaCです。インフラの構成や設定に関する情報をコードとして記述し、専用のソフトウェアによって指定した作業を自動的に実行することで、ミスなくスムーズに構築・管理することが可能となります。インフラの管理負荷を軽減するIaCは、DXを支える要素としても注目を集めているのです。
Infrastructure as Codeのメリット
IaCによってもたらされる具体的なメリットについて解説します。
作業の効率化
コードを記述してインフラ環境の構築・管理業務を自動化することで、手作業で行うよりも工数を削減できるため作業効率が上がります。また一度記述したコードは再利用可能なため、同じ構成のサーバーを複数台用意する必要がある場合に、ゼロから何度も構築する手間が省けます。今まで手作業で行っていた工数を削減することで、人件費の削減や人材の有効活用にもつながるでしょう。
人的ミスの削減
人の手による作業はどうしてもミスが発生する可能性がありますが、IaCではコードに基づいて自動的に実行されるため人的ミスを削減できます。複数のテスト環境を用意する場合や、同じ構成をユーザーごとに用意しなければならない場合など、同じ環境の構築が繰り返し必要な場面で冪等性を保つためにIaCは非常に有効です。IaCなら人的ミスを心配する必要もなく、環境全体の一貫性が保たれるため品質向上も期待できます。
管理・メンテナンス業務の負荷削減
従来のインフラ管理とは違い、IaCならGitなどのツールでインフラを構成するコードのバージョン管理ができます。コードの変更履歴や過去に実施した作業の確認ができ、大規模な環境でも管理・メンテナンスがしやすくなることがメリットです。
IaCを実現するツール
IaCを実現するためのツールや技術は目的によってさまざまですが、特に重要なのが構成管理ツールです。構成管理ツールはインフラの設定をコードとして記述し、指定した作業を自動化します。それぞれのツールによって対応する管理対象やコードの書き方、アプローチ方法は異なります。以下に代表的なツールを紹介します。
Ansible
Ansibleは手続き型の構成管理ツールです。手続き型とはインフラを構築していく手順をコードとして記述していく方式を指します。構成手順をplaybookと呼ばれるファイルに簡易なデータ記述言語であるYAMLで記述します。Ansibleの特徴は、シンプルでプログラミングの知識がなくても設定ファイルを扱いやすいことです。
Terraform
Terraformは宣言型の構成管理ツールです。宣言型とはインフラを構成するリソースのあるべき状態をコードとして記述する方式を指します。現在の状態から宣言されたあるべき状態への差分を埋めるよう処理が行われることが特徴です。Terraformはhclという独自言語でtfファイルにリソースの状態を宣言し、その状態に基づいて自動的に処理が行われます。
AWS CloudFormation
AWS CloudFormationはAWS公式の構成管理ツールです。AWSを使用している場合はほとんどのユースケースに対応できます。ただしAWS以外の環境には対応していないため、マルチクラウドで使用したい場合は適しません。同様にAzureではAzure Resource Manager、GCPではDeployment Managerというそれぞれのプラットフォームのみ対応の構成管理ツールが提供されています。
Infrastructure as Codeの課題と注意点
IaCにはメリットが多いですが、実現するためには課題も存在します。心がけるべき注意点についても併せて解説します。
知識やスキルの習得
IaCを実現するために前章で紹介したような特定のツールを導入する場合、ツールの使用方法や記述するコードの知識を習得しなければなりません。また、属人化を防ぐためにはチーム全員が基本的な知識を持つ状態が望ましいです。ずっと従来のインフラ運用に関わってきたメンバーからすると、IaCは開発・運用に使用する言語が異なり、むしろソフトウェア開発に近い考え方となるので戸惑う場合も多いかもしれません。導入時にはそれなりの学習コストを覚悟する必要があります。
費用対効果
IaC導入にあたり、もっとも時間がかかるのはコード化する作業です。たとえば汎用性のない構成をコード化するのに多くの時間と人材を費やしたところで、その後の効果は見込めないでしょう。一方コード化に時間がかかったとしても、再利用可能で繰り返し必要とされるものであれば、保守・運用コストや品質面などで初期投資コストを回収できると考えられます。費用対効果を想定し、そもそもIaCを導入すべきシステムなのかをよく検討してから取り組むべきです。
スモールスタートを心がける
IaCを実現するには一気にすべてのシステムに取り掛かるのではなく、小さな範囲から始めるべきです。現在本番稼働しているシステムすべてをIaC化しようとすると、インフラのアーキテクチャから運用まで大きな変更が必要な場合があります。ハードルが高いうえ、トラブルが起きた場合の業務への影響も大きいでしょう。そもそも前述した費用対効果の面から必ずしもIaC化するのが相応しくない場合もあるので、新規開発するシステムなどから部分的に適用していくことがおすすめです。
まとめ
IaCは比較的新しい考え方ですが、DevOpsなど開発にスピードを求められる昨今のIT環境下では今後欠かせないものとなっていくでしょう。実現するには課題や注意点も存在しますが、活用できればインフラ管理業務の負荷を大きく軽減できます。もし自社へ導入する際にコスト面やリソース面で不安がある場合、専門業者に依頼して支援やコンサルティングを受けることもおすすめです。