IaC(Infrastructure as Code)とは?

IaC(Infrastructure as Code)は、組織がプロビジョニング手法を自動化し、クラウドを効率的に拡張させることを可能にすることで、コストと時間を節約します。

IaC

IaCにより、組織はクラウド環境で変更と設定をより効率的に制御できます。IaCはDevOpsプラクティスを提供し、開発者と運用担当者が仮想マシンのデプロイ、それらを囲む仮想ネットワーク、および内部のアプリケーションについてより緊密に連携することを可能にします。

命令実行型 vs 宣言型

IaCを活用する上で重要な選択肢の一つに、環境への変更を命令型の自動化で実行するか、宣言型の自動化で実行するかという点があります。ほとんどのIaCは本質的に宣言型です。命令型と宣言型の違いは、プログラムが「どのように」動作するべきかを指示するのか、プログラムが「何を」達成すべきかを定義するのか、という点にあります。

インフラストラクチャに命令型の自動化された変更を加えるには、CLI(Command Line Interface)が用いられることがあります。CLIは、スクリプトを通じて、まずコンテナ内、次にVM(Virtual Machine)そして仮想プライベートクラウドの順にクラウドに変更を適用します。これは詳細なチェックリストのように動作しますが、複数のマシンに展開した後に構成を変更する場合、手順とスクリプトを再作成する必要があります。

宣言的な自動化アプローチでは、まず目標となる状態を定義します。たとえば、CLIを使用してVMの詳細な設定手順を記述するのではなく、ドメインが割り当てられたVMが必要である、と定義するだけで、残りの処理は自動化ツールが実行します。宣言的なアプローチでは、自動化ツールが達成すべき最終的な状態をより簡単に定義できます。

可変 vs 不変

設定ドリフトは、インフラストラクチャのあらゆる部分の構成において大きな課題となります。これは、可変的なインフラストラクチャが用いられている場合に発生します。可変とは、変更される可能性があることを意味します。インフラストラクチャの一部が変更されると、他の部分との整合性が失われる可能性があります。インフラストラクチャ全体で一貫した構成が適用されていることは、セキュリティ上非常に重要です。

導入後は、不変のインフラストラクチャを変更することはできません。変更が必要な場合は、元の構成定義に対して修正が行われます。変更の準備が整うと、対象となる全てのコンポーネントは一貫性を持って更新されます。ハッカーは1つのドアが開いたままになっているだけで侵入できるため、セキュリティの観点からは一貫性が不可欠です。すべてのドアを同じように閉じることにより、ハッカーの作業は困難になります。

DevOps

アプリケーションの開発、テスト、本番環境へのデプロイにおいて、開発者と運用担当者の間で手待ちが発生するケースがしばしば見られます。ネットワークとVMの構成をコード化されたシステムを通じて管理することで、よりスムーズで迅速なデプロイが可能になります。開発者は、コードに適用されるのと同じレベルの安定性を備えた自動化されたリクエストを通じて、コンテナまたはVMを要求できます。これにより、バージョン管理が改善され、変更の追跡が容易になります。

関連記事