Infrastructure as Code(IaC)は、グラフィカル ユーザー インターフェースやコマンドライン スクリプトの代わりにコードを使用して、ソフトウェア アプリケーション インフラストラクチャをプロビジョニングして管理するプロセスです。
アプリケーション インフラストラクチャのプロビジョニングには通常、仮想マシン、データベース接続、ストレージ、その他のインフラストラクチャ要素の設定と管理が含まれます。このインフラストラクチャを手動で管理するのは時間がかかり、エラーも発生しやすくなります。特に、アプリケーションを大規模に管理する場合はなおさらです。
IaC では、構成ファイルを使用してインフラストラクチャを定義できます。これにより、安全かつ反復可能な方法でインフラストラクチャを構築、変更、管理できます。バージョニング、再利用、共有が可能なリソース構成を定義できます。IaC を使用すると、インフラストラクチャの望ましい状態を指定できます。同じ構成を複数回デプロイして、再現可能な開発環境、テスト環境、本番環境を作成できます。
IaC を使用すると、インフラストラクチャのプロビジョニングと構成をアプリケーション コードと同じように扱うことができます。プロビジョニング構成ロジックをソース管理に保存し、継続的インテグレーションと継続的デプロイ(CI / CD)パイプラインを利用できます。
IaC のメリット
IaC を使用してアプリケーション インフラストラクチャを設定および管理することは、多くの一般的なユースケースでのベスト プラクティスです。Google は IaC を使用してシステムを管理しており、IaC を社内の標準的な慣行として確立しています。
IaC には次の利点があります。
- 要件に基づいてインフラストラクチャを定義し、同じ構成を再利用して複数の環境を一貫して作成できます。
- デプロイ環境やテスト環境など、クラウド リソースの作成と管理を自動化できます。
- インフラストラクチャの変更は、アプリケーションの変更と同じように扱うことができます。たとえば、構成に対する変更をレビューし、検証を自動的に行うことができます。IaC を使用して、変更管理されたプロセスで本番環境の管理を行うことをおすすめします。
- すべての構成変更の履歴を保持できます。変更を監査して元に戻すことができます
- クラウド インフラストラクチャの信頼できる唯一の情報源を確保できます。
Google Cloud の IaC ツール
Google Cloud は多くの IaC ツールと緊密に統合されています。ユースケースに応じて、次のいずれかのツールを選択します。
Terraform
一般に、コードを使用して Google Cloud インフラストラクチャを構成および管理するには、Google Cloud の Terraform プロバイダを使用します。
HashiCorp Terraform は、人が読める形式の構成ファイルにクラウドとオンプレミスのリソースを定義する IaC ツールです。このファイルはバージョニング、再利用、共有が可能です。これにより、一貫したワークフローを使用して、ライフサイクル全体を通じてすべてのインフラストラクチャをプロビジョニングして管理できます。詳細については、Google Cloud での Terraform の概要をご覧ください。
Infrastructure Manager
Terraform 構成のデプロイを自動化する場合は、Infrastructure Manager(Infra Manager)を使用します。
Infra Manager は、Terraform を使用して Google Cloud インフラストラクチャ リソースのデプロイと管理を自動化します。Infra Manager では、Google Cloud へのデプロイをプログラムで実施できるため、Terraform を使用するために別のツールチェーンを Google Cloud で保持する必要はありません。詳細については、Infra Manager の概要をご覧ください。
Terraform Cloud と Terraform Enterprise
組織全体で Terraform を使用して完全な変更管理を行う必要がある場合は、Terraform Cloud または Terraform Enterprise を使用します。
Terraform Cloud は、安定したリモート環境で Terraform を実行し、状態とシークレットを安全に保存する Software as a Service(SaaS)アプリケーションです。また、Terraform Cloud は Terraform CLI と統合され、GitHub、GitLab、Bitbucket などの一般的なバージョン管理システム(VCS)に接続できます。Terraform Cloud ワークスペースを VCS リポジトリに接続すると、新しい commit と変更によって Terraform プランが自動的にトリガーされます。Terraform Cloud で用意されている API を使用して、既存のワークフローに統合することもできます。
Terraform Enterprise では、Terraform Cloud の自己ホスト型ディストリビューションを設定できます。リソース上限がカスタマイズ可能で、セキュリティとコンプライアンスの要件が厳しい組織に最適です。
詳細については、Hashicorp ドキュメントの Terraform エディションのページをご覧ください。
Cloud Development Kit for Terraform
Hashicorp Configuration Language(HCL)ではなく汎用プログラミング言語でインフラストラクチャを生成する場合は、Cloud Development Kit for Terraform(CDKTF)を使用します。
CDKTF を使用すると、プログラミング言語を使用して Terraform を構成し、Google Cloud インフラストラクチャを定義してプロビジョニングできます。また、テストや依存関係の管理などのプロセスで既存のツールチェーンを使用できます。
Pulumi
Pulumi も、プログラミング言語を使用してインフラストラクチャをプロビジョニングする際に使用できるツールです。Pulumi 用の Google Cloud プロバイダを使用すると、TypeScript、Python、Go、C#、Java、YAML などのプログラミング言語でインフラストラクチャ コードを作成できます。
Config Controller と Config Connector
Kubernetes で Google Cloud リソースを管理するには、Config Controller と Config Connector を使用します。
Config Controller と Config Connector を使用すると、Kubernetes ツールを使用して Google Cloud サービスとリソースを構成できます。Config Sync などの GitOps ツールや Kubernetes API を使用できます。また、アドミッション Webhook やオペレーターなどのプラットフォーム エンジニアリング プリミティブを構成して使用できます。
詳細については、Config Controller の概要と Config Connector の概要をご覧ください。
Crossplane
Kubernetes で Google Cloud リソースを管理する場合は、Crossplane も使用できます。
Crossplane は、Kubernetes クラスタを Kubernetes 以外の外部リソースに接続します。これにより、プラットフォーム チームはこれらのリソースを使用するカスタム Kubernetes API を構築できます。Crossplane は、外部リソースの状態を監視して状態を適用する Kubernetes コントローラとして機能します。Kubernetes クラスタに Crossplane がインストールされている場合、ユーザーは Kubernetes とのみ通信します。Crossplane は、Google Cloud などの外部リソースとの通信を管理します。Kubernetes の外部でリソースが変更または削除された場合、Crossplane は変更を元に戻すか、削除されたリソースを再作成します。
詳細については、Crossplane のドキュメントをご覧ください。
Ansible
プロビジョニング、構成管理、アプリケーションのデプロイ、オーケストレーション、その他の IT プロセスを自動化する場合は Ansible を使用します。詳細については、Ansible for Google Cloud をご覧ください。
次のステップ
- Terraform について学習する
- Terraform を使用して Compute Engine で基本的なウェブサーバーを作成する方法を学習する
- Terraform の状態を Cloud Storage バケットに保存する方法を学習する