创建 Terraform 配置

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

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

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

准备工作

  • 您必须拥有以下已经与您分享解决方案 (IAM) 角色

    • 已启用 Service Catalog 的 Google Cloud 项目的 Catalog Admin (roles/cloudprivatecatalogproducer.admin) Catalog Manager (roles/cloudprivatecatalogproducer.manager)。
    • 在其中启用了 Service Catalog 的项目的 Storage Admin (roles/storage.admin)。
    • 要在其中创建解决方案的项目的 Cloud Build Editor (roles/cloudbuild.builds.editor)。

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

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

    1. 启用 Cloud Build API。

      启用 API

      启用 API 后,系统会自动创建您在下一步中使用的 Cloud Build 服务帐号。

    2. 向服务帐号授予以下 IAM 角色:

      如需了解如何授予角色的步骤,请参阅配置 Cloud Build 服务帐号的访问权限

将配置文件上传到 Cloud Storage

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

创建 Cloud Storage 存储桶

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

  1. 在 Cloud Console 中,转到 Cloud Storage 浏览器页面。

    转到浏览器

  2. 点击创建存储分区
  3. 创建存储分区页面上,输入您的存储分区信息。要转到下一步,请点击继续
    • 指定存储分区的名称中,输入符合存储分区命名要求的名称。
    • 对于选择数据存储位置,执行以下操作:
      • 选择位置类型选项。
      • 选择位置选项。
    • 对于为数据选择一个默认存储类别,请选择一个存储类别
    • 对于选择如何控制对象的访问权限,请选择访问权限控制选项。
    • 对于高级设置(可选),请指定加密方法保留政策存储分区标签
  4. 点击创建

启用对象版本控制

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

授予对存储桶的访问权限

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

如果您的用户要在其他 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 用例的模块,请参阅 Cloud Foundation Toolkit

以下代码示例展示了 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-9"
    }
  }

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

创建模块后,将文件压缩为 zip 文件。确保模块存储在 zip 文件的根目录下。

为了确保在压缩 Terraform 文件时正确存储模块,请运行以下命令:zip solution.zip file1.tf file2.tf file3.tf

然后,将 zip 文件上传到您的存储分区。如需了解上传 zip 文件的步骤,请参阅有关上传对象的 Cloud Storage 文档。

在 Service Catalog 中创建配置

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

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

  1. 转到 Cloud Console 中的 Service Catalog Admin 解决方案页面
    转到“解决方案”页面

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

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

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

创建 Terraform 配置

后续步骤