Terraform 構成の作成

組織向けにサービス カタログ ソリューションをキュレートする場合、Terraform 構成(構成)を作成できます。ユーザーは、これを Terraform を使用してデプロイします。構成を作成したら、 カタログに割り当てることでユーザーと共有できます。

このガイドでは、Cloud Build を使用して Terraform Docker イメージの最新バージョンで Terraform コマンドを実行し、Cloud Storage を使用してモジュールや状態ファイルなどの Terraform リソースを保存して管理します。

Terraform の使用に関するリソースとガイドについては、 で Terraform を使用する Google Cloudをご覧ください。

始める前に

Cloud Storage への構成ファイルのアップロード

サービス カタログの Terraform 構成ファイルは、Cloud Storage を使用して管理します。

Cloud Storage バケットを作成する

Cloud Storage を設定するには、組織に対してサービス カタログを有効にしたのと同じプロジェクト内でバケットを作成します。

  1. コンソールで Cloud Storage の Google Cloud [バケット] ページに移動します。

    [バケット] に移動

  2. [ [Create]] をクリックします。
  3. [バケットの作成] ページでユーザーのバケット情報を入力します。次のステップに進むには、[続行] をクリックします。
    1. [始める] セクションで、次の操作を行います。
    2. [データの保存場所の選択] セクションで、次の操作を行います。
      1. ロケーション タイプを選択してください。
      2. [Location type] プルダウン メニューから、バケットのデータが永続的に保存されるロケーションを選択します。
      3. クロスバケット レプリケーションを設定するには、 [Storage Transfer Service 経由でクロスバケット レプリケーションを追加する] を選択し、 次の手順を実施します:

        クロスバケット レプリケーションを設定する

        1. [バケット] メニューで、バケットを選択します。
        2. [レプリケーション設定] セクションで、[構成] をクリックして、レプリケーション ジョブの設定を構成します。

          [**クロスバケット レプリケーションを構成する**] ペインが表示されます。

          • オブジェクト名の接頭辞で複製するオブジェクトをフィルタするには、 オブジェクトを追加または除外する接頭辞を入力し、 [接頭辞を追加] をクリックします。
          • 複製されたオブジェクトのストレージ クラスを設定するには、 [Storage class] メニューからストレージ クラスを選択します。 この手順をスキップすると、複製されたオブジェクトはデフォルトで宛先バケットのストレージ クラスを使用します。
          • [完了] をクリックします。
    3. [データの保存場所を選択する] セクションで、次の操作を行います。
      1. バケットのデフォルトのストレージ クラスを選択するか、バケットデータのストレージ クラスを自動的に管理するAutoclassを選択します。
      2. 階層名前空間を有効にするには、 [データ量が多いワークロード向けにストレージを最適化] セクションで、 [このバケットで階層的な名前空間を有効にする] を選択します。
    4. In the [オブジェクトへのアクセスを制御する方法を選択する] セクションで、バケットに 公開アクセスの防止 を適用するかどうかを選択し、バケットのオブジェクトに使用する アクセス制御方法 を選択します。
    5. [オブジェクト データを保護する方法を選択する] セクションで、次の操作を行います。
      • [**データ保護**] で、バケットに設定するオプションを選択します。
        • 削除(復元可能)を有効にするには、 [削除(復元可能)ポリシー(データ復旧用)] チェックボックスをオンにして、 削除後にオブジェクトを保持する日数を指定します。
        • オブジェクトのバージョニングを設定するには、 [オブジェクトのバージョニング(バージョン管理用)] チェックボックスをオンにして、 オブジェクトごとの最大バージョン数と、非現行バージョンが期限切れになるまでの日数を指定します。
        • オブジェクトとバケットで保持ポリシーを有効にするには、[保持(コンプライアンス用)] チェックボックスをオンにして、次の操作を行います。
          • [オブジェクト保持ロック]を有効にするには、 [オブジェクト保持を有効にする]チェックボックスをオンにします。
          • [Bucket Lock] を有効にするには、[バケット保持ポリシーを設定する] チェックボックスをオンにして、保持期間の単位と保持期間を選択します。
      • オブジェクト データの暗号化方法を選択するには、 [データ暗号化] セクション()を開き、 [データの暗号化] 方法を選択します
  4. [作成] をクリックします。

オブジェクトのバージョニングの有効化

Terraform の構成の削除や上書きを防ぐには、バケットのオブジェクトのバージョニングを使用する必要があります。オブジェクトのバージョニングを有効にするには、オブジェクトのバージョニングの使用に関する Cloud Storage のドキュメントをご覧ください。

バケットへのアクセスを許可する

組織内のユーザーが構成をデプロイする場合、Cloud Build サービス アカウントにバケットの読み取りアクセス権が必要です。ユーザーが構成をデプロイするのと同じ Google Cloud プロジェクトにバケットが保存されている場合、 サービス アカウントにはすでにこのアクセス権があります。

ユーザーが別の Google Cloud プロジェクトで構成をデプロイする場合は、次のいずれかの 方法を使用してバケットへのアクセスを許可します。

  • ストレージ オブジェクト閲覧者roles/storage.objectViewer)ロールをユーザーの Cloud Build サービス アカウントまたは Terraform 構成をデプロイする Google Cloud リソース(プロジェクト、フォルダまたは組織)に付与します。

  • アクセス制御リスト(ACL)を使用して、 バケットへのアクセスを管理します。

バケットへのアクセスの管理についての詳細は、Cloud Storage のアクセス制御の概要をご覧ください。

Terraform モジュールの作成とアップロード

Cloud Storage バケットを設定したら、すべての構成ファイルのコンテナである Terraform モジュールを作成してアップロードする必要があります。サービス カタログはモジュールを使用して JSON スキーマ ファイルを自動的に生成し、構成の変数を定義します。

現在のディレクトリの外部にあるモジュールを呼び出す場合は、相対パスの代わりにリモートパスを使用します。たとえば、source = "../../" ではなく source = "GoogleCloudPlatform/cloud-run/google" を使用します。

一般的なユースケースのモジュールについては、 の Terraform ブループリントとモジュールをご覧ください。 Google Cloud Google Cloud

次のコードサンプルは、Terraform 構成ファイル main.tf を示しています。


variable "machine_type" {
  type    = string
  default = "n1-standard-1"
}

variable "zone" {
  type    = string
  default = "us-central1-a"
}

variable "deployment_identifier" {
  description = "The unique name for your instance"
  type        = string
}

resource "google_compute_instance" "default" {
  name         = "vm-${var.deployment_identifier}"
  machine_type = var.machine_type
  zone         = var.zone

  boot_disk {
    device_name = "boot"
    auto_delete = true
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  network_interface {
    network = "default"
    access_config {
      // Ephemeral IP
    }
  }
}

モジュールを作成したら、ファイルを ZIP ファイルに圧縮します。モジュールが ZIP ファイルのルートに保存されていることを確認します。

Terraform ファイルを圧縮するときにモジュールが適切に保存されるようにするには、次のコマンドを実行します。 none zip solution.zip file1.tf file2.tf file3.tf

続いて、zip ファイルをバケットにアップロードします。zip ファイルをアップロードする手順については、Cloud Storage のドキュメントにある オブジェクトのアップロードをご覧ください。

サービス カタログでの構成の作成

Terraform モジュールを使用して Cloud Storage バケットを設定したら、バケットを含むサービス カタログソリューションを作成します。

Terraform 構成をサービス カタログソリューションとして作成するには:

  1. コンソールでサービス カタログ管理者の [Solutions] ページ に移動します。 Google Cloud
    [ソリューション] ページに移動

  2. プロジェクトを選択するには、[Select] をクリックします。 Google Cloud

  3. [ソリューションを作成] をクリックします。プルダウン リストで、[Terraform 構成の作成] を選択します。

  4. Terraform 構成の名前、説明、タグラインを入力します。タグラインとは、ユーザーがサービス カタログをブラウジングするときに表示されるソリューションの簡単な説明です。

  5. [Terraform 構成へのリンク] に、Terraform モジュールの zip ファイルを含む Cloud Storage バケットへのリンクを指定します(gs://my-terraform-bucket/my-zip-file.zip など)。

  6. 必要に応じて、ソリューションのアイコンをアップロードします。アイコンの推奨サイズは 80×80 ピクセルです。

  7. 必要に応じて、サポートリンクとクリエイターの連絡先情報を入力します。

  8. 必要に応じて、ソリューションのドキュメントへのリンクを追加します。

  9. ソリューションのデプロイに使用する Terraform のバージョンを選択します。

  10. 必要に応じて、[独自のサービス アカウントを選択または入力する] の横にあるチェックボックスをオンにして、独自のサービス アカウントを指定できます。サービス アカウントがソリューションを作成するプロジェクトと同じプロジェクトにある場合は、[現在のプロジェクトからサービス アカウントを選択する] を選択し、プルダウン メニューからサービス アカウントを選択します。 Google Cloud サービス アカウントがソリューションとは異なるプロジェクトにある場合は、 [プロジェクトのサービス アカウントのメールアドレスを入力する] を選択し、 サービス アカウントのメールアドレスを入力します。 Google Cloud

  11. [作成] をクリックします。

ソリューションが作成され、サービス カタログ管理者の [ソリューション] ページに表示されます。

次のスクリーンショットは、Terraform 設定の作成方法を示しています。

Terraform 構成を作成する

次のステップ