Terraform 構成の作成

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

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

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

始める前に

  • 次の Identity and Access Management(IAM)ロールを付与されている必要があります。

    • カタログ管理者 または カタログ マネージャー (サービス カタログが有効になっている Google Cloud プロジェクトに関連付けられた Google Cloud 組織の場合)。このロールを付与されていない場合は、組織管理者に連絡してアクセス権をリクエストしてください。
    • ソリューションを作成する プロジェクトの Google Cloud Storage 管理者。Terraform 構成が別のプロジェクトにある場合は、Terraform 構成を含むプロジェクトの Storage 管理者ロールも必要です。
    • Cloud Build 編集者 ソリューションを作成する Google Cloud プロジェクト。

    独自のサービス アカウントを使用する場合は、使用するサービス アカウントを含む Google Cloud プロジェクトの サービス アカウント ユーザー ロールも必要です。

    これらのロールを付与されていない場合は、組織管理者に連絡してアクセス権をリクエストしてください。

  • 独自のサービス アカウントを使用する場合は、サービス アカウントに 次の IAM ロールが必要です。

    これらのロールを付与されていない場合は、組織管理者に連絡してアクセス権をリクエストしてください。

  • 構成を再作成するプロジェクトで次の Cloud Build を設定します。

    1. Cloud Build API を有効にします。

      API を有効にするために必要なロール

      API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限が付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法をご覧ください

      API の有効化

      API を有効にすると、次のステップで使用する Cloud Build サービス アカウントが自動的に作成されます。
    2. Cloud Build ページに移動します。
    3. 左側のパネルで [設定] を選択します。
    4. [サービス アカウントのメールアドレス] セクションに表示されているサービス アカウントを使用します。
    5. 独自のサービス アカウントを使用していない場合は、サービス アカウントに次の IAM ロールを付与します。ロールを付与する手順については、 Cloud Build サービス アカウントのアクセス権の構成をご覧ください。

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

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

Cloud Storage バケットを作成する

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

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

    [バケット] に移動

  2. [ Create] をクリックします。
  3. [バケットの作成] ページでユーザーのバケット情報を入力します。次のステップに進むには、[続行] をクリックします。
    1. [始める] セクションで、次の操作を行います。
      • バケット名の要件を満たす、グローバルに一意の名前を入力します。
      • バケットラベルを追加するには、 [ラベル] セクション()を開き、 [ラベルを追加] をクリックして、keyvalue を指定します。
    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 プロジェクトで構成をデプロイする場合は、次のいずれかの方法を使用してバケットへのアクセスを許可します。

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

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

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

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

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

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

一般的な Google Cloud ユースケースのモジュールについては、 の Terraform ブループリントとモジュールをご覧ください。 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. プロジェクト Google Cloud を選択するには、[Select] をクリックします。

  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 構成を作成する

次のステップ