创建 Terraform 配置

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

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

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

准备工作

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

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

    如果您计划使用自己的服务帐号,还必须拥有包含您计划使用的服务帐号的项目的 Service Account User 角色。 Google Cloud

    如果您不具备这些角色,请联系您的 Organization Administrator 以请求访问权限。

  • 如果您计划使用自己的服务帐号,您的服务帐号必须拥有 以下 IAM 角色

    • 您要在其中创建解决方案的项目的 Storage Admin。 Google Cloud 如果您的 Terraform 配置位于其他项目中,您的服务帐号还必须 拥有包含 Terraform 配置的项目的 Storage Object Viewer 角色。
    • Logs Writer for the Google Cloud 您要在其中创建解决方案的项目。

    如果您不具备这些角色,请联系您的 Organization Administrator 以请求访问权限。

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

    1. 启用 Cloud Build API。

      启用 API 所需的角色

      如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (roles/serviceusage.serviceUsageAdmin),该角色包含 serviceusage.services.enable 权限。了解如何授予角色

      启用 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. 在 Google Cloud 控制台中,前往 Cloud Storage 存储分区 页面。

    进入“存储分区”

  2. 点击 创建
  3. 创建存储桶 页面上,输入您的存储桶信息。要转到下一步 ,请点击继续
    1. 开始使用 部分,执行以下操作:
      • 输入符合 存储桶命名要求的全局唯一的名称。
      • 如需添加 存储桶标签, 请展开 标签 部分 (), 点击 添加标签,并为标签指定 keyvalue
    2. 选择数据存储位置 部分,执行以下操作:
      1. 选择位置类型
      2. 位置类型下拉菜单中选择一个位置,用于永久存储存储桶的数据。
      3. 如需设置 跨存储桶复制,请选择 通过 Storage Transfer Service 添加跨存储桶复制 ,然后 按照以下步骤操作:

        设置跨存储桶复制

        1. 存储桶 菜单中,选择一个存储桶。
        2. 复制设置 部分中, 点击配置 以配置 复制作业的设置。

          系统会显示配置跨存储桶复制 窗格 显示。

          • 如需按对象名称前缀过滤要复制的对象, 请输入要用于包含或排除对象的前缀,然后点击 添加前缀
          • 如需为复制的对象设置存储类别, 请从存储类别菜单中选择一个存储类别。 如果您跳过此步骤,则复制的对象会默认使用 目标存储桶的存储类别。
          • 点击完成
    3. 选择数据存储方式 部分,执行以下操作:
      1. 为存储桶选择默认存储类别,或者选择Autoclass对存储桶数据进行自动存储类别管理。
      2. 如需启用 分层命名空间,请在 针对数据密集型工作负载优化存储 部分中,选择 在此存储桶上启用分层命名空间
    4. 选择如何控制对对象的访问权限 部分中,选择 存储桶是否强制执行禁止公开访问, 然后为存储桶对象选择访问权限控制方法
    5. 选择如何保护对象数据 部分,执行以下操作:
      • 数据保护 下,选择您要为存储桶设置的任何选项。
        • 如需启用 软删除,请点击 软删除政策(用于数据恢复) 复选框, 然后指定您希望在删除对象后保留对象的天数。
        • 如需设置 对象版本控制,请点击 对象版本控制(用于版本控制) 复选框, 然后指定每个对象的最大版本数以及非当前版本过期的天数。
        • 如需在对象和存储分区上启用保留政策,请点击保留(用于合规性) 复选框,然后执行以下操作:
          • 如需启用 对象保留锁定,请点击 启用对象保留 复选框。
          • 如需启用存储桶锁,请点击设置存储桶保留政策 复选框,然后为保留期限选择时间单位和时间长度。
      • 如需选择对象数据的加密方式,请展开 数据加密 部分 (),然后选择 数据加密 方法
  4. 点击创建

启用对象版本控制

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

授予对存储桶的访问权限

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

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

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

  • 使用 访问控制列表 (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. 在控制台中,前往 Service Catalog“管理” 解决方案 页面 。 Google Cloud
    转到“解决方案”页面

  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 配置

后续步骤