Terraform を使用して Compute Engine リソースをプロビジョニングする

HashiCorp Terraform は、クラウド インフラストラクチャのプロビジョニングと管理に使用できる Infrastructure as Code(IaC)ツールです。Terraform には、クラウド プロバイダや他の API とやり取りできるプロバイダというプラグインが用意されています。Terraform provider for Google Cloud を使用して、Compute Engine などの Google Cloud リソースをプロビジョニングして管理できます。

Terraform の仕組み

Terraform には宣言型で構成指向の構文があり、これを使用して、Google Cloud プロジェクトにプロビジョニングするインフラストラクチャを記述できます。1 つまたは複数の Terraform 構成ファイルで構成を作成し、Terraform CLI を使用して、この構成を Compute Engine リソースに適用できます。

以降のステップでは、Terraform の仕組みについて説明します。

  1. プロビジョニングするインフラストラクチャを Terraform 構成ファイルに記述します。インフラストラクチャのプロビジョニング方法を記述するコードは必要ありません。Terraform がインフラストラクチャをプロビジョニングします。
  2. terraform plan コマンドを実行します。これにより、構成が評価され、実行プランが生成されます。プランを確認し、必要に応じて変更します。
  3. 次に、terraform apply コマンドを実行します。これにより、次のアクションが実行されます。

    1. バックグラウンドで、対応する Compute Engine API を呼び出し、実行プランに基づいてインフラストラクチャをプロビジョニングします。
    2. Terraform 状態ファイルを作成します。これは、構成ファイル内のリソースと実際のインフラストラクチャ内のリソースをマッピングする JSON ファイルです。Terraform は、このファイルを使用してインフラストラクチャの最新状態を記録し、リソースを作成、更新、破棄するタイミングを決定します。
    3. terraform apply を実行すると、Terraform は状態ファイルのマッピングを使用して、既存のインフラストラクチャをコードと比較し、必要に応じて更新を行います。

      • 構成ファイルで定義されたリソース オブジェクトが状態ファイルに存在しない場合、Terraform はリソース オブジェクトを作成します。
      • リソース オブジェクトが状態ファイルに存在し、構成ファイルと構成が異なる場合、Terraform は構成ファイルと一致するようにリソースを更新します。
      • 状態ファイル内のリソース オブジェクトが構成ファイルと一致する場合、Terraform はリソースを変更しません。

Compute Engine の Terraform ベースのガイド

次の表に、Compute Engine の Terraform ベースのすべての入門ガイドとチュートリアルを示します。

ガイド 詳細
Compute Engine インスタンスを作成して起動する 仮想マシン(VM)インスタンスを作成する方法について説明します。
ローカル SSD ディスクを接続した VM を作成する ローカル SSD ディスク ストレージを使用して VM を作成する方法について説明します。
ディスク スナップショットを作成する 標準スナップショットを作成して、ディスクからデータを定期的にバックアップする方法について説明します。
クローンを使用してディスクを複製する 既存のディスクのゾーンディスク クローンを作成する方法について説明します。
同期レプリケートされたディスクを作成して管理する レプリケートされたディスクの作成方法と管理方法について説明します。
Spot VM を作成して使用する Spot VM の作成方法と管理方法について説明します。Spot VM は、Compute Engine の余剰キャパシティを利用する VM インスタンスです。Spot VM は、標準 VM のオンデマンド料金と比べてはるかに低価格で利用できます。
VM に SSH 認証鍵を追加する OS Login を使用する VM インスタンスとメタデータ ベースの SSH 認証鍵を使用する VM に SSH 認証鍵を追加する方法について説明します。
シャットダウン スクリプトの実行 VM インスタンスが停止または再起動する直前にコマンドを実行するシャットダウン スクリプトを作成して実行する方法について説明します。
単一プロジェクトの予約を作成する 単一プロジェクトの予約を作成する方法について説明します。予約は、同じプロジェクト内の VM インスタンスでのみ使用できます。
インスタンス テンプレートを作成する インスタンス テンプレートの作成方法と管理方法について説明します。
スケジュールに基づくスケーリング 既存の MIG のスケーリング スケジュールの作成方法について説明します。スケジュールに基づく自動スケーリングでは、予想される負荷に対する容量を事前にスケジューリングすることで、ワークロードの可用性を向上させることができます。
Persistent Disk ストレージを VM に追加する ブート以外の空のゾーン Persistent Disk ボリュームを作成し、VM にアタッチする方法について説明します。
OS Login を設定する OS Login を設定する方法について説明します。
VM に非ブートディスクをアタッチする 非ブート ゾーンディスクを VM にアタッチする方法について説明します。
ユーザー管理のサービス アカウントを使用する VM を作成する ユーザー管理のサービス アカウントを使用するように構成された VM インスタンスの作成方法について説明します。サービス アカウントは特別なアカウントであり、通常はアプリケーションやコンピューティング ワークロードが承認された API 呼び出しを行うときに使用されます。
永続ディスクのサイズを増やす 永続ディスクのサイズを増やす方法について説明します。
VM で仮想ディスプレイを有効にする VM インスタンスで仮想ディスプレイを有効にする方法について説明します。
単一のゾーンに MIG を作成する 単一ゾーンにマネージド インスタンス グループ(MIG)を作成する方法について説明します。MIG のすべての VM を 1 つのゾーンに配置すると、レイテンシを最小限に抑えることができます。これは、特定のワークロード(バッチ ワークロードなど)に役立ちます。
カスタムホスト名の VM インスタンスを作成する カスタムホスト名の VM インスタンスを作成する方法について説明します。
アプリケーション ベースのヘルスチェックと自動修復を設定する MIG 内の VM を自動修復するようにアプリケーション ベースのヘルスチェックを設定する方法について説明します。
プリエンプティブル VM を使用する MIG を作成する プリエンプティブル VM インスタンスを使用する MIG の作成方法について説明します。プリエンプティブル VM は、ワークロードの中断を許容でき、プリエンプティブル VM による費用削減のメリットを活用する必要がある場合に便利です。
MIG に対して VM の追加または削除を行う MIG に VM の追加または削除を行う方法について説明します。
自動スケーリングが有効な MIG を作成する グループ全体の平均 CPU 使用率に基づいて VM を自動的に追加または削除する自動スケーリング MIG の作成方法について説明します。
ステートフル ディスクを使用して MIG を作成する プリエンプティブル VM インスタンスを使用する MIG の作成方法について説明します。プリエンプティブル VM は、ワークロードの中断を許容でき、プリエンプティブル VM による費用削減のメリットを活用する必要がある場合に便利です。
SQL Server VM インスタンスの作成 Microsoft SQL Server VM インスタンスの作成方法について説明します。SQL Server は、Windows Server といくつかの Linux ディストリビューションで動作するデータベース システムです。Compute Engine では、SQL Server をアプリケーションのバックエンドの一部として、あるいは柔軟な開発、テスト環境として使用できるほか、バックアップや障害復旧のためにオンプレミス環境に追加することもできます。
OS ポリシーの割り当てを作成する OS ポリシーの割り当てを作成する方法について説明します。OS ポリシーを使用すると、Linux と Windows の VM インスタンス全体で一貫したソフトウェア構成を維持できます。
MIG でのステートフル メタデータの構成 MIG でステートフル メタデータを構成する方法について説明します。インスタンス メタデータは、メタデータ サーバーを介してアプリケーションのプロパティを設定し、通信する場合に役立ちます。
MIG でのステートフル永続ディスクの構成 MIG でステートフル永続ディスクを構成する方法について説明します。永続ディスクをステートフルに構成すると、ディスクの状態を維持しながら、VM インスタンスの自動修復と自動更新を利用できます。
MIG 内のステートフル IP アドレスの構成 MIG にステートフル IP アドレスを構成する方法について説明します。MIG でステートフル IP アドレスを構成すると、グループ内の VM インスタンスが自動修復、更新、再作成されるときに、IP アドレスが確実に保持されます。
リージョン MIG 内の VM のターゲット分配形態を設定する VM のターゲット分配形態を設定する方法について説明します。
リージョン内にある複数のゾーンに VM を含む MIG を作成する VM がリージョン内の複数のゾーンに分散する MIG を作成する方法について説明します。アプリケーションの負荷を複数のゾーンに分散することで、ワークロードをゾーン障害から保護できます。
リージョン MIG でプロアクティブな VM 再配布を無効または有効にする リージョン MIG でプロアクティブな VM 再配布を無効または有効にする方法について説明します。リージョン MIG で、リージョン内の特定のゾーンに均等な数の VM インスタンスを維持するには、プロアクティブなインスタンスの再配布を使用します。この構成オプションにより、ゾーンレベルで障害が発生した場合のアプリケーションの可用性が最大化されます。

Compute Engine の Terraform モジュールとブループリント

モジュールとブループリントを使用すると、Google Cloud リソースの大規模なプロビジョニングと管理を自動化できます。モジュールとは、Terraform リソースを論理的に抽象化する、再利用可能な一連の Terraform 構成ファイルのことです。ブループリントは、特定のソリューションを実装および文書化した、モジュールとポリシーのパッケージです。このパッケージはデプロイして再利用できます。

次の表に、Compute Engine に関連するすべてのモジュールとブループリントを示します。

モジュールまたはブループリント 詳細
terraform-google-vm Google Cloud で VM をプロビジョニングするための構成要素として使用できる独自のサブモジュールの集合。
terraform-google-startup-scripts VM に埋め込む有用な起動スクリプトのライブラリを提供します。
terraform-google-container-vm Compute Engine インスタンスにコンテナをデプロイします。

Compute Engine の Terraform リソース

リソースは、Terraform 言語の基本要素です。各リソース ブロックは、仮想ネットワークやコンピューティング インスタンスなど、1 つ以上のインフラストラクチャ オブジェクトを記述します。

次の表に、Compute Engine で使用可能な Terraform リソースを示します。

Terraform リソース データソース

次のステップ