コードとしてのインフラストラクチャ (IaC) とは?

コードとしてのインフラストラクチャ (IaC) は、DevOps 手法と記述モデルによるバージョン管理を使用して、ネットワーク、仮想マシン、ロード バランサー、接続トポロジなどのインフラストラクチャを定義および展開します。 同じソース コードから常に同じバイナリが生成されるのと同じように、IaC モデルはデプロイするたびに同じ環境を生成します。

Diagram of infrastructure as code defining the environment in a versioned file.

IaC は重要な DevOps プラクティスであり、継続的デリバリーのコンポーネントです。 IaC を使用すると、DevOps チームは統一されたプラクティスとツールのセットを使用して連携して、アプリケーションとそのサポート インフラストラクチャを迅速かつ確実に大規模に提供できます。

一貫性を確保するために手動構成を回避する

IaC は、リリース パイプラインにおける環境ドリフトの問題を解決するために進化しました。 IaC を使用しない場合、チームは展開環境の設定を個別に維持する必要があります。 時間の経過とともに、各環境は自動的には再現できない独自の構成である「スノーフレーク」になります。 環境間で不一致があると、展開の問題が発生する可能性があります。 インフラストラクチャの管理とメンテナンスには、エラーが発生しやすく追跡が難しい手動プロセスが含まれます。

IaC は手動構成を回避し、JSON などの形式で十分に文書化されたコードを介して望ましい環境の状態を表すことで一貫性を確保します。 IaC を使用したインフラストラクチャのデプロイは反復可能であり、構成ドリフトや依存関係の不足によって発生するランタイムの問題を防止します。 リリース パイプラインは、環境の説明とバージョン構成モデルを実行して、ターゲット環境を構成します。 変更を加える場合、チームはターゲットではなくソースを編集します。

べき等性、つまり特定の操作が常に同じ結果を生み出す能力は、IaC の重要な原則です。 デプロイメント コマンドは、環境の開始状態に関係なく、ターゲット環境を常に同じ構成に設定します。 冪等性は、既存のターゲットを自動的に構成するか、既存のターゲットを破棄して新しい環境を再作成することによって実現されます。

便利なツール

安定したテスト環境を大規模かつ迅速に提供

IaC は、DevOps チームが開発サイクルの初期段階で運用環境に似た環境でアプリケーションをテストするのに役立ちます。 チームは、オンデマンドで複数のテスト環境を確実にプロビジョニングできます。 クラウドは、IaC 定義に基づいて環境を動的にプロビジョニングおよび破棄します。 インフラストラクチャ コード自体を検証およびテストして、一般的な展開の問題を防ぐことができます。

宣言型定義ファイルを使用する

IaC では、可能であれば宣言型定義ファイルを使用する必要があります。 定義ファイルには、環境に必要なコンポーネントと構成が記述されていますが、必ずしもその構成を実現する方法が記述されているわけではありません。 たとえば、このファイルでは必要なサーバーのバージョンと構成が定義されていますが、サーバーのインストールと構成のプロセスは指定されていない場合があります。 この抽象化により、インフラストラクチャ プロバイダーが提供する最適化された技術をより柔軟に使用できるようになります。 宣言型定義は、時間の経過とともに発生する可能性がある、展開スクリプトなどの命令型コードの保守に関する技術的負債を軽減するのにも役立ちます。

宣言型 IaC の標準構文はありません。 IaC を記述するための構文は通常、ターゲット プラットフォームの要件によって異なります。 YAML、JSON、XML などのファイル形式は、さまざまなプラットフォームでサポートされています。

IaC を Azure にデプロイする

Azure は、Azure Resource Managerモデルを通じて IaC のネイティブ サポートを提供します。 チームは、ソリューションの展開に必要なインフラストラクチャを指定する宣言型の ARM または Bicep テンプレートを定義できます。

TerraformAnsibleChefPulumi などのサードパーティ プラットフォームも、自動化されたインフラストラクチャを管理するための IaC をサポートしています。