创建 Terraform 配置

为组织选择 Service Catalog 解决方案时,您可以创建 Terraform 配置,您的用户可以使用 Terraform 部署该配置。创建配置后,您可以将其分配给目录,从而与用户共享。

在本指南中,您将使用 Cloud Build 在最新版本的 Terraform Docker 映像中运行 Terraform 命令,并使用 Cloud Storage 存储和管理 Terraform 资源,例如模块和状态文件

如需了解有关使用 Terraform 的资源和指南,请参阅将 Terraform 与 Google Cloud搭配使用

准备工作

  • 您必须拥有以下 Identity and Access Management (IAM) 角色

    • 与已启用 Service Catalog 的项目关联的 Google Cloud 组织的 Catalog Admin Catalog ManagerGoogle Cloud 。如果您没有此角色,请与组织管理员联系以申请访问权限。
    • 您要创建解决方案的 Google Cloud 项目的 Storage Admin 角色。如果您的 Terraform 配置位于其他项目中,您还必须拥有包含 Terraform 配置的项目的 Storage Admin 角色。
    • 要在其中创建解决方案的项目的 Cloud Build Editor。 Google Cloud

    如果您打算使用自己的服务账号,则还必须对包含您打算使用的服务账号的项目具有 Service Account User 角色。 Google Cloud

    如果您不具备这些角色,请联系您的组织管理员以请求访问权限。

  • 如果您打算使用自己的服务账号,则该服务账号必须具有以下 IAM 角色

    • 您要创建解决方案的 Google Cloud 项目的 Storage Admin 角色。如果您的 Terraform 配置位于其他项目中,您的服务账号还必须具有包含 Terraform 配置的项目的 Storage Object Viewer 角色。
    • 您要创建解决方案的Google Cloud 项目的日志记录器

    如果您不具备这些角色,请联系您的组织管理员以请求访问权限。

  • 在您要在其中创建配置的项目中设置 Cloud Build:

    1. Enable the Cloud Build API.

      Enable the API

      启用 API 后,系统会自动创建您在下一步中使用的 Cloud Build 服务账号。
    2. 前往 Cloud Build 页面。
    3. 在左侧面板中,选择设置
    4. 使用服务账号电子邮件地址部分下提供的服务账号。
    5. 如果您不使用自己的服务账号,请向该服务账号授予以下 IAM 角色。如需了解如何授予角色的步骤,请参阅配置 Cloud Build 服务账号的访问权限

将配置文件上传到 Cloud Storage

您可以使用 Cloud Storage 为 Service Catalog 管理 Terraform 配置文件。

创建 Cloud Storage 存储桶

如需设置 Cloud Storage,请在您为组织启用了 Service Catalog 的项目中创建存储桶:

  1. In the Google Cloud console, go to the Cloud Storage Buckets page.

    Go to Buckets page

  2. Click Create bucket.
  3. On the Create a bucket page, enter your bucket information. To go to the next step, click Continue.
    • For Name your bucket, enter a name that meets the bucket naming requirements.
    • For Choose where to store your data, do the following:
      • Select a Location type option.
      • Select a Location option.
    • For Choose a default storage class for your data, select a storage class.
    • For Choose how to control access to objects, select an Access control option.
    • For Advanced settings (optional), specify an encryption method, a retention policy, or bucket labels.
  4. Click Create.

启用对象版本控制

您必须对存储分区使用对象版本控制,以防止 Terraform 配置被删除或覆盖。如需启用对象版本控制,请参阅有关使用对象版本控制的 Cloud Storage 文档。

授予对存储桶的访问权限

当组织中的用户部署配置时,他们的 Cloud Build 服务账号必须拥有存储分区的读取权限。如果您的存储分区存储在用户部署配置的 Google Cloud 项目中,则服务账号已经具有此访问权限。

如果您的用户要在其他 Google Cloud 项目中部署配置,请使用以下任一方法授予对存储分区的访问权限:

  • Storage Object Viewer (roles/storage.objectViewer) 角色授予用户的 Cloud Build 服务账号,或者用户在其中部署 Terraform 配置的资源(例如项目、文件夹或组织)。 Google Cloud

  • 使用访问控制列表 (ACL) 管理对存储分区的访问权限。

如需详细了解如何管理对存储分区的访问权限,请参阅 Cloud Storage 的访问权限控制概览

创建和上传 Terraform 模块

设置 Cloud Storage 存储分区后,您必须创建并上传 Terraform 模块,该模块是您的所有配置文件的容器。Service Catalog 使用该模块自动生成 JSON 架构文件,以定义配置的变量。

调用当前目录之外的模块时,请使用远程路径,而不是相对路径。例如,使用 source = "GoogleCloudPlatform/cloud-run/google" 取代 source = "../../"

如需了解常见 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 文档。

在 Service Catalog 中创建配置

使用 Terraform 模块设置 Cloud Storage 存储分区后,您可以创建一个包含该存储桶的 Service Catalog 解决方案。

如需创建 Terraform 配置作为 Service Catalog 解决方案,请执行以下操作:

  1. 前往 Google Cloud 控制台中的 Service Catalog“管理”解决方案页面
    转到“解决方案”页面

  2. 如需选择 Google Cloud 项目,请点击选择

  3. 点击创建解决方案。在下拉列表中,选择创建 Terraform 配置

  4. 为您的 Terraform 配置输入名称、说明和标语。标语是用户在浏览 Service Catalog 时看到的解决方案简短说明。

  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. 点击创建

解决方案已创建完毕,并显示在 Service Catalog“管理”解决方案页面上。

以下屏幕截图演示了如何创建 Terraform 配置:

创建 Terraform 配置

后续步骤