コードとしてのインフラストラクチャ (IaC) が複雑なインフラストラクチャをどう管理するか

Ian Buchanan Ian Buchanan

要約: コードとしてのインフラストラクチャ (IaC) とは、DevOps ソフトウェア開発からクラウド インフラストラクチャ リソースの管理まで、ベスト プラクティスが適用される IT インフラストラクチャ管理プロセスです。

2000 年代半ばのハードウェア仮想化の普及によって、クラウド インフラストラクチャ ホスティングの新たな機会が生まれました。クラウド ホスティング プロバイダーは、動的なサービスとしてのインフラストラクチャ (IaaS) プラットフォームへのアクセスを提供し始めました。これらのプラットフォームが成長してさらに複雑なインフラストラクチャ資産を提供し始めるにつれて、従来のシステム管理の役割も複雑になりました。複雑なクラウド インフラストラクチャを迅速に構成して、管理する必要性が課題となりました。

コードとしてのインフラストラクチャ (IaC)、またはコードを使用したインフラストラクチャのモデリングというアイデアは、CI/CD の成功によってさらに加速しました。DevOps は、コードを Git リポジトリにコミットしてフィーチャー ブランチとプル リクエスト ワークフローを適用することがどれほど生産的であるかを証明しました。これらのワークフローがソフトウェア開発にもたらした自動化は、クラウド システム管理に生じた新たな複雑さの軽減に役立ちました。

コードとしてのインフラストラクチャとは何か

DevOps ソフトウェア開発からクラウド インフラストラクチャ リソースの管理まで、コードとしてのインフラストラクチャとはベスト プラクティスが適用される IT インフラストラクチャ管理プロセスです。該当するインフラストラクチャ リソースには、仮想マシン、ネットワーク、ロード バランサ、データベース、その他のネットワーク アプリケーションがあります。

iaC は、組織のインフラストラクチャ リソースをテキスト ファイルに成文化する構成管理の一形態です。これらのインフラストラクチャ ファイルは、Git のようなバージョン管理システムにコミットされます。バージョン管理リポジトリは、CI/CD の基本的な依存関係であるフィーチャー ブランチとプル リクエストのワークフローを有効にします。

コードとしてのインフラストラクチャは、クラウド インフラストラクチャ ホスティング プラットフォーム、特に IaaS プラットフォームの増加によって実現されます。IaaS では、リモート API によってクラウド リソースをオンデマンドでプロビジョニングして要求できます。これによって、インフラストラクチャ構成ファイルにコミットされるプロパティのテンプレートを設定できます。IaC の自動化フィーチャーでは、構成ファイルを取得してリモート IaaS API に対して実行できます。

チームがバージョン管理にインフラストラクチャ構成をコミットすると、CI/CD プラクティスをインフラストラクチャの変更に適用できます。インフラストラクチャの更新は DevOps ワークフローに従います。チーム メンバーが構成テキスト ファイルのいずれかを編集した場合は、プル リクエストとコード レビューのワークフローを使用して編集の正確性を監査して検証できます。さらに、コード システムとしての DevOps 対応インフラストラクチャでは、自動インフラストラクチャのデプロイとロールバックが利用されます。

コードとしてのインフラストラクチャが重要な理由

IaC は「環境ドリフト」の問題を解決できるように進化しました。通常、Cloud アプリケーションには、リリース ライフサイクルの段階ごとに個別のデプロイ環境があります。一般的には、開発環境、ステージング環境、本番環境があります。これらの環境は、アプリケーション サーバー、ロード バランサ、データベースなどのネットワーク リソースで構成されます。環境ドリフトは、これらの異なる環境間のインフラストラクチャが同期していないときに発生します。

IaC がなければ、インフラストラクチャ管理は混乱して脆弱なプロセスになる可能性があります。システム管理者はリモート クラウド プロバイダーに手動で接続して、API または Web ダッシュボードを使用して新しいハードウェアとリソースをプロビジョニングします。この手動ワークフローでは、アプリケーション インフラストラクチャの全体像は得られません。管理者は一方の環境に手動で変更を加えて、もう一方の環境ではそのための調整を忘れることがあります。環境ドリフトはこのようにして生じるのです。

環境ドリフトによって、大きなビジネス上の無駄が生じます。ステージング環境または開発環境に対するチームの構築によってバグや障害が発生して、デプロイ時に本番環境が同期していないことが明らかになると、その理由や不足しているものの調査に無駄に時間がかかることになります。

IaC がなければ、手動のインフラストラクチャ管理は時間のかかるプロセスです。環境ドリフト、トラフィックの急増、その他の課題によってインフラストラクチャの変更が必要であると特定されても、システム管理者による対応や調整に想定外の時間がかかることがあります。このために、停止や顧客の不満が生じることがあります。IaC を導入すると、インフラストラクチャは構成の変更に自動で適応して、自動スケーリング フィーチャーによってトラフィックの急増に対応できます。

コードとしてのインフラストラクチャによって、手動システム管理の全体像と可視性がより明らかになります。インフラストラクチャ構成ファイルを中央のバージョン管理リポジトリにコミットすると、すべてのチーム メンバーがインフラストラクチャ データを表示して編集できます。これによって強力な監査機能が有効になります。たとえば、チームが PCI コンプライアンス監査を受ける場合は、インフラストラクチャの特定の部分が SSL 暗号化を使用しているかどうかを把握する必要があります。IaC を使用すると、SSL がどのように構成されているかをすばやく確認してコードを実行し、稼働中のインフラストラクチャが構成ファイルと一致しているかを確認できます。つまり、SSL が有効になっていることを特定します。バージョン管理のコミット履歴は、追加または削除されたときにレビューするログとしても機能します。

コードとしてのインフラストラクチャの仕組み

コードとしてのインフラストラクチャを完成させるには、いくつかの依存関係が必要です。

リモート アクセス型ホスティングまたは IaaS クラウド ホスティング プラットフォーム
最も重要な依存関係は、リモート アクセス型のホスティングです。構成管理ツールは、リモート ホストに接続してそれを変更する必要があります。リモート インフラストラクチャがオンプレミスの場合は、構成管理ツールからアクセス可能にする必要があります。IaaS 対応のクラウド ホスティング プラットフォームは、ユーザーがオンデマンドでインフラストラクチャ リソースを自動で作成、削除、変更できる API を提供します。また、これらの API は構成管理ツールからアクセスして、これらのタスクをさらに自動化できます。一般的な IaaS プラットフォームの例としては、DigitalOcean、Amazon AWS、Microsoft Azure などがあります。

構成管理プラットフォーム
IaC を完成させるための次の要件は、IaaS API に接続して一般的なタスクを自動化するツール スイートです。チームは一連のスクリプトとツールを作成できます。しかし、それには多大な労力や将来の保守が必要になって、投資収益率は低くなるでしょう。Terraform、Ansible、SaltStack、Chef など、この問題を解決できるオープン ソースの構成管理プラットフォームはすでに多数登場しています。

バージョン管理システム
構成管理プラットフォームは、YAML などのマークアップ言語で記述された人間と機械が読み取り可能なテキスト ファイルを使用して、プラットフォームが実行されるタスクとシーケンスを宣言します。これらのテキスト ファイルはアプリケーション コード ファイルのように扱われて、バージョン管理システム リポジトリに格納されます。リポジトリは信頼できる中心的なソースとして機能して、プル リクエストとコード レビューを可能にします。最も一般的なバージョン管理システムは Git です。

これらの依存関係が整備されたので、開発者が新しいアプリケーション サービスをシステムに追加する場合の例のシナリオを考えてみましょう。このシナリオは IaC ワークフローのデモンストレーションに役立ちます。

  1. 開発者は、選択した構成管理プラットフォーム Terraform で YAML 構成テキスト ファイルを編集します。編集では、新しいホスティング サーバーが必要であることを指定します。
  2. 開発者は Git リポジトリ内のフィーチャー ブランチに編集をコミットします。プロジェクトの Git リポジトリは Bitbucket でホストされているため、開発者はプル リクエストを開きます。別のチーム メンバーがプル リクエストをレビューして、インフラストラクチャの新たな変更を認識します。そのチーム メンバーがプル リクエストを承認すると、開発者がコミットをリポジトリのメイン ブランチにマージします。
  3. この時点で、アップデートを実行するには構成プラットフォームが必要です。開発者はアップデートを手動でトリガーできます。チームは Bitbucket を使用しているので Bitbucket Pipelines にもアクセスできて、このステップも Pipelines 内で自動化できます。
  4. 実行時に、Terraform はチームの IaaS とインターフェイスで接続します。Terraform は IaaS API に対して一連のコマンドを実行して、予想されるインフラストラクチャ構成で IaaS を最新の状態に更新します。

結論

生産性の高い構成管理形式である IaC は、クラウド IT インフラストラクチャ管理の自動化に重点を置いています。IaC の導入後は、プロジェクトのインフラストラクチャへの変更に対するある程度の CI/CD の自動化を実現に使用できます。IaC によって、インフラストラクチャの変更に関する対話や透明性に関するさまざまな有益なインサイトを可能にします。IaC には、現代のホスティング企業から広く利用できるホスティング プラットフォームや自動化ツールなど、一連の依存関係が必要になります。