Terraform 構成の作成
組織向けにサービス カタログ ソリューションをキュレートする場合、Terraform 構成(構成)を作成できます。ユーザーは、これを Terraform を使用してデプロイします。構成を作成したら、カタログに割り当てることでユーザーと共有できます。
このガイドでは、Cloud Build を使用して最新バージョンの Terraform Docker イメージで Terraform コマンドを実行し、Cloud Storage を使用してモジュールや状態ファイルなどの Terraform リソースを保存して管理します。
Terraform の使用に関するリソースとガイドについては、 Google Cloudで Terraform を使用するをご覧ください。
始める前に
次の Identity and Access Management(IAM)ロールが必要です。
- サービス カタログが有効になっている Google Cloud プロジェクトに関連付けられているGoogle Cloud 組織のカタログ管理者またはカタログ マネージャー。このロールが付与されていない場合は、組織管理者に連絡してアクセス権をリクエストしてください。
- ソリューションを作成する Google Cloud プロジェクトに対する Storage Admin。Terraform 構成が別のプロジェクトにある場合は、Terraform 構成を含むプロジェクトの Storage 管理者ロールも必要です。
- ソリューションを作成する Google Cloud プロジェクトの Cloud Build 編集者。
独自のサービス アカウントを使用する場合は、使用するサービス アカウントを含む Google Cloud プロジェクトに対するサービス アカウント ユーザーのロールも必要です。
これらのロールを付与されていない場合は、組織の管理者に連絡してアクセス権をリクエストしてください。
独自のサービス アカウントを使用する場合は、サービス アカウントに次の IAM ロールが必要です。
- ソリューションを作成する Google Cloud プロジェクトに対する Storage Admin。Terraform 構成が別のプロジェクトにある場合、サービス アカウントには、Terraform 構成を含むプロジェクトのストレージ オブジェクト閲覧者ロールも必要です。
- ソリューションを作成するGoogle Cloud プロジェクトに対する ログ書き込みロール。
これらのロールを付与されていない場合は、組織の管理者に連絡してアクセス権をリクエストしてください。
構成を作成するプロジェクトで Cloud Build を設定します。
-
Cloud Build API を有効にします(まだ有効になっていない場合)。
API を有効にすると、次のステップで使用する Cloud Build サービス アカウントが自動的に作成されます。API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を通じてこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を通じてこの権限を取得できます。ロールを付与する方法を確認する。 - [Cloud Build] ページに移動します。
- 左側のパネルで [設定] を選択します。
- [サービス アカウントのメールアドレス] セクションに記載されているサービス アカウントを使用します。
- 独自のサービス アカウントを使用していない場合は、サービス アカウントに次の IAM ロールを付与します。ロールを付与する手順については、Cloud Build サービス アカウントのアクセス権を構成するをご覧ください。
- プロジェクト編集者(
roles/editor) - Storage 管理者(
roles/storage.admin)
- プロジェクト編集者(
-
Cloud Storage への構成ファイルのアップロード
サービス カタログの Terraform 構成ファイルは、Cloud Storage を使用して管理します。
Cloud Storage バケットを作成する
Cloud Storage を設定するには、組織に対してサービス カタログを有効にしたのと同じプロジェクト内でバケットを作成します。
- Google Cloud コンソールで、Cloud Storage の [バケット] ページに移動します。
- [ 作成] をクリックします。
- [バケットの作成] ページでユーザーのバケット情報を入力します。次のステップに進むには、[続行] をクリックします。
- [始める] セクションで、次の操作を行います。
-
[データの保存場所の選択] セクションで、次の操作を行います。
- ロケーション タイプを選択してください。
- [ロケーション タイプ] プルダウン メニューから、バケットのデータが永続的に保存されるロケーションを選択します。
- ロケーション タイプとして [デュアルリージョン] を選択した場合は、関連するチェックボックスを使用してターボ レプリケーションを有効にすることもできます。
- クロスバケット レプリケーションを設定するには、[Storage Transfer Service 経由でクロスバケット レプリケーションを追加する] を選択し、次の手順を実施します。
クロスバケット レプリケーションを設定する
- [バケット] メニューで、バケットを選択します。
[レプリケーション設定] セクションで、[構成] をクリックして、レプリケーション ジョブの設定を構成します。
[クロスバケット レプリケーションを構成する] ペインが表示されます。
- オブジェクト名の接頭辞で複製するオブジェクトをフィルタするには、オブジェクトを追加または除外する接頭辞を入力し、 [接頭辞を追加] をクリックします。
- 複製されたオブジェクトのストレージ クラスを設定するには、[ストレージ クラス] メニューからストレージ クラスを選択します。この手順をスキップすると、複製されたオブジェクトはデフォルトで宛先バケットのストレージ クラスを使用します。
- [完了] をクリックします。
-
[データの保存場所を選択する] セクションで、次の操作を行います。
- バケットのデフォルトのストレージ クラスを選択するか、バケットデータのストレージ クラスを自動的に管理する Autoclass を選択します。
- 階層名前空間を有効にするには、[データ量が多いワークロード向けにストレージを最適化] セクションで、[このバケットで階層的な名前空間を有効にする] を選択します。
- [オブジェクトへのアクセスを制御する方法を選択する] セクションで、バケットに公開アクセスの防止を適用するかどうかを選択し、バケットのオブジェクトに使用するアクセス制御方法を選択します。
-
[オブジェクト データを保護する方法を選択する] セクションで、次の操作を行います。
- [データ保護] で、バケットに設定するオプションを選択します。
- 削除(復元可能)を有効にするには、[削除(復元可能)ポリシー(データ復元用)] チェックボックスをオンにして、削除後にオブジェクトを保持する日数を指定します。
- オブジェクトのバージョニングを設定するには、[オブジェクトのバージョニング(バージョン管理用)] チェックボックスをオンにして、オブジェクトあたりの最大バージョン数と、非現行バージョンの有効期限が切れるまでの日数を指定します。
- オブジェクトとバケットで保持ポリシーを有効にするには、[保持(コンプライアンス用)] チェックボックスをオンにして、次の操作を行います。
- オブジェクト保持ロックを有効にするには、[オブジェクト保持を有効にする] チェックボックスをオンにします。
- バケットロックを有効にするには、[バケット保持ポリシーを設定] チェックボックスをオンにして、保持期間の単位と期間を選択します。
- オブジェクト データの暗号化方法を選択するには、[データ暗号化] セクション()を開き、データ暗号化方法を選択します。
- [データ保護] で、バケットに設定するオプションを選択します。
- [作成] をクリックします。
オブジェクトのバージョニングの有効化
Terraform の構成の削除や上書きを防ぐには、バケットのオブジェクトのバージョニングを使用する必要があります。オブジェクトのバージョニングを有効にするには、オブジェクトのバージョニングの使用に関する Cloud Storage のドキュメントをご覧ください。
バケットへのアクセスを許可する
組織内のユーザーが構成をデプロイする場合、Cloud Build サービス アカウントにバケットの読み取りアクセス権が必要です。バケットが、ユーザーが構成をデプロイするのと同じ Google Cloud プロジェクトに保存されている場合、サービス アカウントにはすでにこのアクセス権が付与されています。
ユーザーが別のGoogle Cloud プロジェクトに構成をデプロイする場合は、次のいずれかの方法でバケットへのアクセス権を付与します。
ユーザーの Cloud Build サービス アカウント、またはユーザーが Terraform 構成をデプロイする Google Cloud リソース(プロジェクト、フォルダ、組織など)に、Storage オブジェクト閲覧者(
roles/storage.objectViewer)ロールを付与します。アクセス制御リスト(ACL)を使用して、バケットへのアクセスを管理します。
バケットへのアクセスの管理についての詳細は、Cloud Storage のアクセス制御の概要をご覧ください。
Terraform モジュールの作成とアップロード
Cloud Storage バケットを設定したら、すべての構成ファイルのコンテナである Terraform モジュールを作成してアップロードする必要があります。サービス カタログはモジュールを使用して JSON スキーマ ファイルを自動的に生成し、構成の変数を定義します。
現在のディレクトリの外部にあるモジュールを呼び出す場合は、相対パスの代わりにリモートパスを使用します。たとえば、source = "../../" ではなく source = "GoogleCloudPlatform/cloud-run/google" を使用します。
一般的な Google Cloud ユースケースのモジュールについては、 Google Cloud用の Terraform ブループリントとモジュールをご覧ください。
次のコードサンプルは、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 構成をサービス カタログソリューションとして作成するには:
Google Cloud コンソールでサービス カタログ管理者の [ソリューション] ページに移動します。
[ソリューション] ページに移動Google Cloud プロジェクトを選択するには、[選択] をクリックします。
[ソリューションを作成] をクリックします。プルダウン リストで、[Terraform 構成を作成] を選択します。
Terraform 構成の名前、説明、タグラインを入力します。タグラインとは、ユーザーがサービス カタログをブラウジングするときに表示されるソリューションの簡単な説明です。
[Terraform 構成へのリンク] に、Terraform モジュールの zip ファイルを含む Cloud Storage バケットへのリンクを指定します(
gs://my-terraform-bucket/my-zip-file.zipなど)。必要に応じて、ソリューションのアイコンをアップロードします。アイコンの推奨サイズは 80×80 ピクセルです。
必要に応じて、サポートリンクとクリエイターの連絡先情報を入力します。
必要に応じて、ソリューションのドキュメントへのリンクを追加します。
ソリューションのデプロイに使用する Terraform のバージョンを選択します。
必要に応じて、[独自のサービス アカウントを選択または入力する] の横にあるチェックボックスをオンにして、独自のサービス アカウントを指定できます。サービス アカウントがソリューションを作成する Google Cloud プロジェクトと同じ場所にある場合は、[現在のプロジェクトからサービス アカウントを選択] を選択し、プルダウン メニューからサービス アカウントを選択します。サービス アカウントがソリューションとは異なる Google Cloud プロジェクトにある場合は、[プロジェクトのサービス アカウントのメールアドレスを入力する] を選択し、サービス アカウントのメールアドレスを入力します。
[作成] をクリックします。
ソリューションが作成され、サービス カタログ管理者の [ソリューション] ページに表示されます。
次のスクリーンショットは、Terraform 設定の作成方法を示しています。
次のステップ
- Terraform 構成をカタログに割り当てて、組織内のユーザーがソリューションにアクセスしてデプロイできるようにする。
- 最新の Terraform 構成の詳細でソリューションを更新する。