Infrastructure as Code(IaC)は、コンピューティング インフラストラクチャを管理およびプロビジョニングする手法です。手動による物理ハードウェアの調整やインタラクティブな構成ツールではなく、構成には機械で読み取り可能な定義ファイルを使用します。デベロッパーがアプリケーション コードを扱うのと同じようにインフラストラクチャのセットアップを扱うことで、ネットワーク、仮想マシン、Kubernetes クラスタ、データベース、ロードバランサのデプロイを迅速かつ確実に自動化できます。最新の DevOps プラクティスのコンポーネントとして機能するため、組織は整合性とスピードを維持しながらスケールできるようになります。
IaC は、コードを通じてプロビジョニング プロセスを自動化することで機能し、クラウド コンソールでの手動設定の必要性を排除します。デベロッパーは最初に、必要なインフラストラクチャの仕様を構成ファイルで定義します。このファイルは、通常はバージョン管理システムに保存されます。その後、Terraform などの自動化ツールがこれらのファイルを処理し、クラウド プロバイダに対して必要な API 呼び出しを行い、実際のリソースを作成、更新、削除します。このワークフローは通常、コード(定義)からバージョン管理、CI / CD パイプライン、そして最終的にプロビジョニングへと続くパスをたどります。

IaC を実装する際は、宣言型と命令型の 2 つのアプローチから選択することが一般的です。主な違いは、最終結果に焦点を当てるか、結果に至るまでのステップに焦点を当てるかです。
アプローチ | 説明 | 例 |
宣言型 | ユーザーは、最終的な状態をどのようにしたいかを定義します。ツールは、その状態を実現するために必要な手順を導き出します。これは、Terraform や Kubernetes といったツールにおける最新かつ標準的な手法です。 | 「8 GB の RAM を搭載した仮想マシンを 3 台作成して。」 |
命令型 | 実行する特定のコマンドやスクリプトを順番にリストすることで、インフラストラクチャを変更する方法を定義します。 | 「スクリプト A を実行してサーバー 1 を起動して。次に、スクリプト B を実行してネットワークを構成して。次に、スクリプト C を実行して...」 |
アプローチ
説明
例
宣言型
ユーザーは、最終的な状態をどのようにしたいかを定義します。ツールは、その状態を実現するために必要な手順を導き出します。これは、Terraform や Kubernetes といったツールにおける最新かつ標準的な手法です。
「8 GB の RAM を搭載した仮想マシンを 3 台作成して。」
命令型
実行する特定のコマンドやスクリプトを順番にリストすることで、インフラストラクチャを変更する方法を定義します。
「スクリプト A を実行してサーバー 1 を起動して。次に、スクリプト B を実行してネットワークを構成して。次に、スクリプト C を実行して...」
インフラストラクチャ定義がコード リポジトリに移行するにつれて、セキュリティ対策もこれらのファイルを保護するように適応する必要があります。「IaC セキュリティ」と「IaC スキャン」は、インフラストラクチャがデプロイされる前に構成ファイルの脆弱性を分析する手法を指します。これは「シフトレフト」セキュリティと呼ばれるコンセプトです。専用のツールがコード パイプラインをスキャンし、一般公開されているストレージ バケットや暗号化されていないデータベースといった構成ミスを検出し、セキュリティ リスクが本番環境に到達するのを防ぎます。
IaC は、一般的なデプロイ パターン(検索拡張生成(RAG)アプリケーションなど)をサポートするだけでなく、複雑な運用デプロイメントにおける課題の解決にも役立ちます。
企業は多くの場合、さまざまな環境でワークロードを実行する必要があります。Terraform などのツールを使用すると、単一の構成ワークフローを使用して、Google Cloud や他のクラウド環境、オンプレミス データセンターにまたがってリソースを同時にデプロイおよび管理できます。これにより、プラットフォームごとに異なる独自のツールを習得する複雑さが軽減されます。
デベロッパーは、新機能をテストするための安全な場所を頻繁に必要とします。IaC を使用すると、本番環境を正確にミラーリングした一時的な「ステージング」環境をスピンアップしてテストを実行できます。テスト完了後は、直ちにその環境を破棄できます。これにより、テストの精度を確保しながら、ステージング サーバーを常時稼働し続けるコストを回避できます。
壊滅的なリージョン停止が発生した場合、手動での復旧には数日を要することがあります。IaC は「Disaster Recovery as Code」を実現し、組織が既存のコード定義を使用して別のリージョンにインフラストラクチャ全体を迅速に再プロビジョニングすることを可能にします。これにより、ダウンタイムを大幅に削減し、ビジネスの継続性を確保できます。
IaC の導入は、IT 運用のモダナイズを図るうえで大きなメリットをもたらします。
速度
自動化により、複雑な環境を数日や数週間ではなく数分でデプロイできます。
整合性
同一のコードで毎回同じ環境がデプロイされるため、IaC では「構成のずれ」(手動によるアドホックな変更によってサーバーに不整合が生じる現象)が解消されます。
コストの節約
週末に開発環境をオフにするなど、使用されていない不要なリソースを簡単にスピンダウンできるため、クラウド支出の管理に役立ちます。
バージョン管理
インフラストラクチャはコードとして定義されるため、インフラストラクチャの変更履歴全体が 1 か所に保存されます。これにより、誰が何を変更したかを簡単に追跡でき、何か問題が発生した場合は以前のバージョンにロールバックできます。
Google Cloud は、初期設計からデプロイ、継続的な管理まで、Infrastructure as Code の取り組みをサポートする包括的なツールセットを提供します。App Design Center は、事前に構築されたリファレンス アーキテクチャを探索、カスタマイズ、構築できる優れた出発点です。これにより、コードを 1 行も記述する前に Google Cloud のベスト プラクティスに基づいてアプリケーション スタックを設計できるため、最初からインフラストラクチャが適切に設計されます。
設計が完了したら、Google Cloud のオープン エコシステムにより、コードとして簡単に実装できます。このプラットフォームでは、Terraform などのオープンソース標準が後付けではなく、主要機能として扱われます。Infrastructure Manager などのサービスを使用すると、Terraform を直接使用して Google Cloud リソースをデプロイ、管理できます。一方、Config Connector を使用すると、Kubernetes を通じて Google Cloud リソースを管理できるため、クラウド インフラストラクチャとコンテナ オーケストレーションのギャップを埋めることができます。
Cloud Resource Manager は、組織、フォルダ、プロジェクトなどの Google Cloud リソース階層をプログラムで管理するサービスとして機能します。多くのチームが IaC を使用して仮想マシンなどのリソースをデプロイしていますが、Cloud Resource Manager ではプロジェクト構造自体をコードとして定義できます。これにより、チームは新しい環境のセットアップを自動化し、一貫した Identity and Access Management(IAM)ポリシーと組織の制約を適用して、最初からインフラストラクチャにガバナンスを組み込むことができます。
IaC の有用な活用方法の一つは、「自分のマシンでは動作したのに、本番環境ではなぜ動作しないのか?」というデベロッパーによくある問題を解決することです。これは、一時的な環境を作成することで解決できます。
このワークフローでは、デベロッパーが pull リクエスト(PR)を開くと、IaC ツールによってアプリの一時的な分離されたコピーが自動的にスピンアップされます。PR がマージされると、環境は自動的に破棄されます。
これを機能させるには、Terraform コードに名前をハードコードすることはできません。変数を使用して、PR ごとに一意のリソースを作成する必要があります。
main.tf(スニペット)
cloudbuild.yaml で、Cloud Build が提供する _PR_NUMBER 置換変数を使用して、PR 番号を Terraform に挿入します。
cloudbuild.yaml(スニペット)
このワークフローにより、IaC は静的なメンテナンス タスクから、レビュー サイクルを加速する動的な生産性向上ツールへと変わります。