创建 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:
-
启用 Cloud Build API。
启用 API 后,系统会自动创建您在下一步中使用的 Cloud Build 服务帐号。启用 API 所需的角色
如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (
roles/serviceusage.serviceUsageAdmin),该角色包含serviceusage.services.enable权限。了解如何授予角色。 - 前往 Cloud Build 页面。
- 在左侧面板中,选择设置 。
- 使用服务账号电子邮件地址 部分下提供的服务帐号。
- 如果您未使用自己的服务帐号,请向该服务帐号授予以下 IAM 角色。如需了解授予
角色的步骤,请参阅
配置 Cloud Build 服务账号的访问权限。
- Project Editor
(
roles/editor) - Storage Admin
(
roles/storage.admin)
- Project Editor
(
-
将配置文件上传到 Cloud Storage
您可以使用 Cloud Storage 为 Service Catalog 管理 Terraform 配置文件。
创建 Cloud Storage 存储桶
如需设置 Cloud Storage,请在您为组织启用了 Service Catalog 的项目中创建存储桶:
- 在 Google Cloud 控制台中,前往 Cloud Storage 存储分区 页面。
- 点击 创建。
- 在创建存储桶 页面上,输入您的存储桶信息。要转到下一步
,请点击继续。
- 在开始使用 部分,执行以下操作:
-
在选择数据存储位置 部分,执行以下操作:
- 选择位置类型。
- 从位置类型下拉菜单中选择一个位置,用于永久存储存储桶的数据。
- 如需设置 跨存储桶复制,请选择
通过 Storage Transfer Service 添加跨存储桶复制 ,然后
按照以下步骤操作:
设置跨存储桶复制
- 在存储桶 菜单中,选择一个存储桶。
在复制设置 部分中, 点击配置 以配置 复制作业的设置。
系统会显示配置跨存储桶复制 窗格 显示。
- 如需按对象名称前缀过滤要复制的对象, 请输入要用于包含或排除对象的前缀,然后点击 添加前缀。
- 如需为复制的对象设置存储类别, 请从存储类别菜单中选择一个存储类别。 如果您跳过此步骤,则复制的对象会默认使用 目标存储桶的存储类别。
- 点击完成 。
- 在选择数据存储方式 部分,执行以下操作:
- 在选择如何控制对对象的访问权限 部分中,选择 存储桶是否强制执行禁止公开访问, 然后为存储桶对象选择访问权限控制方法。
-
在选择如何保护对象数据 部分,执行以下操作:
- 在数据保护 下,选择您要为存储桶设置的任何选项。
- 如需选择对象数据的加密方式,请展开 数据加密 部分 (),然后选择 数据加密 方法。
- 点击创建 。
启用对象版本控制
您必须对存储分区使用对象版本控制,以防止 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 解决方案,请执行以下操作:
在控制台中,前往 Service Catalog“管理” 解决方案 页面 。 Google Cloud
转到“解决方案”页面如需选择 Google Cloud 项目,请点击选择。
点击创建解决方案 。在下拉列表中,选择创建 Terraform 配置 。
为您的 Terraform 配置输入名称、说明和标语。标语是用户在浏览 Service Catalog 时看到的解决方案简短说明。
在指向 Terraform 配置的链接字段中,提供包含 Terraform 模块的 zip 文件的 Cloud Storage 存储分区的链接,例如
gs://my-terraform-bucket/my-zip-file.zip。(可选)上传解决方案的图标。 建议的图标尺寸为 80 × 80 像素。
(可选)输入创建者的支持链接和联系信息。
(可选)添加关联到解决方案文档的链接。
选择您要用于部署解决方案的 Terraform 版本。
(可选)您可以点击选择或输入自己的服务账号 旁边的复选框,提供自己的服务账号。如果您的 服务帐号位于您要创建解决方案的 Google Cloud 项目中,请选择 从当前项目中选择服务帐号,然后从下拉菜单中选择您的 服务帐号。如果您的服务帐号位于与您的解决方案不同的项目中,请选择 输入任何项目中的服务帐号电子邮件地址,然后输入您的服务帐号的电子邮件地址。 Google Cloud
点击创建 。
解决方案已创建完毕,并显示在 Service Catalog“管理”解决方案页面上。
以下屏幕截图演示了如何创建 Terraform 配置:
后续步骤
- 将 Terraform 配置分配给目录,以便组织中的用户能够访问和部署解决方案。
- 使用最新 Terraform 配置详细信息更新解决方案。