本文介绍了如何使用 Terraform 完成虚拟机映像的配置并提交以进行部署。
确定如何创建部署包
我们建议您使用 Producer Portal 的引导式配置选项直接在 Google Cloud 控制台中创建部署软件包。
引导式配置选项支持简单的虚拟机产品,例如具有基本防火墙规则的单虚拟机部署,但不支持一些复杂的功能,例如具有多个虚拟机和非计算资源的部署。如果您需要引导式配置不支持的功能,则可以使用手动配置选项创建部署软件包,或通过向其添加额外功能来自定义现有部署软件包。
在引导式配置和手动配置之间切换
如果您使用 Producer Portal 的引导式配置选项,并且稍后想要切换到手动配置部署软件包,请点击转到手动配置。
完成引导式配置
如需使用 Google Cloud 控制台完成配置并提交简单的部署软件包,请完成以下步骤:
在 Producer Portal 中,前往部署包部分。
在 Terraform 配置下,点击标记为 Cloud Storage 存储分区的输入字段旁边的浏览。
如果您已创建 Cloud Storage 存储桶,请在此处选择该存储分区。
如果您没有 Cloud Storage 存储桶,请点击标记为创建新存储桶的图标。创建新存储桶时,您需要执行以下操作:
为存储桶选择名称。
指定存储桶在其中存储数据的一个或多个区域。
指定数据的存储类别。
确定要将哪一级别的粒度应用于存储桶数据的 Identity and Access Management (IAM) 权限。
配置可选的高级设置,例如加密或数据保留政策。
确保您已为 Cloud Storage 存储桶启用对象版本控制。
如需保存存储桶设置并继续配置部署包,请点击配置。
在选择机器类型下,您必须为虚拟机产品指定默认可用区、最小机器类型和默认机器类型,以及其启动磁盘的大小和类型。
在指定操作系统下,您必须指定虚拟机映像使用的操作系统的名称和版本,以及虚拟机映像的版本号。
(可选)在设置虚拟机访问权限下,您可以指定网站和管理员网址,以及用户名和密码,供用户在部署后用于访问虚拟机。
(可选)在配置网络下,您可以指定 IP 转发的设置并配置防火墙规则。
(可选)在定义后续步骤下,您可以为产品的用户提供说明,指导他们开始使用您的产品。 他们部署您的产品后,将可以看到这些说明。
完成上述步骤后,点击生成以创建部署包。
如果以后需要对部署包进行其他更改,您可以点击修改以进行更改,然后点击生成应用这些更改重新生成部署包。
在 Producer Portal 中验证部署包。
在 Cloud Marketplace 对您的部署包进行验证并成功完成后,点击发布以开始测试您的部署包。
完成手动配置
本部分介绍了如何使用手动配置选项创建部署包并提交部署包以供审核。
指定是使用默认 Terraform 模块还是自定义 Terraform 模块
您可以选择客户在部署您的产品时是使用默认 Terraform 模块还是自定义 Terraform 模块。
如果您选择使用默认的 Terraform 模块,Google Cloud 会为您的客户提供自动生成的 Terraform 代码,以便他们部署您的产品。
如果您选择使用自定义 Terraform 模块,则必须向客户提供您自己的 Terraform 模板。您可以选择以客户可以使用命令行界面 (CLI) 部署的形式提供这些模板,也可以提供额外的元数据,以便客户直接从 Cloud Marketplace 部署模块。
如需指定客户应使用默认 Terraform 模块还是自定义 Terraform 模块,以及(对于自定义 Terraform 模块)您希望客户如何部署该模块,请完成以下步骤:
在 Producer Portal 中,前往部署包部分。
在 Terraform 配置下,选择 Type(类型)下的 Default(默认)、Custom (CLI deployment)(自定义 [CLI 部署])或 Custom (UI deployment)(自定义 [界面部署])。
自定义 Terraform 模块的要求
如果您选择使用自定义 Terraform 模块,则自定义模块必须满足以下要求:
您的自定义模块必须包含一个模块,Cloud Marketplace 可以使用该模块来验证其是否符合要求。如需了解详情,请参阅测试模块是否通过验证。
您的模块必须包含一个名为
project_id
的变量,用于存储客户用于部署模块的项目 ID。您必须将对图片名称的引用指定为 Terraform 变量,格式为
projects/PROJECT_NAME/global/images/IMAGE_NAME
。default
的值必须设置为虚拟机映像的名称,以便在发布虚拟机产品时,将 Cloud Marketplace 拥有的映像副本替换到模块中。您的模块不得依赖于未与其打包的外部模块。
您的模块只能使用以下已获批准的提供程序:
archive
cloud-init
dns
google
google-beta
http
null
random
time
tls
如需查看符合这些要求的自定义模块示例,请参阅自定义 Terraform 模块示例。
针对界面部署的自定义 Terraform 模块的其他要求
如果您的自定义模块支持界面部署,则必须满足以下额外要求:
您的模块必须包含一个名为
goog_cm_deployment_name
的变量。Cloud Marketplace 会使用此变量在客户的部署页面中为其部署命名。您应使用此变量,以避免一个项目中的多个部署之间发生资源命名冲突。如需查看示例,请参阅自定义 Terraform 模块示例中的goog_cm_deployment_name
。在文件
metadata.display.yaml
中,您必须将ET_GCE_DISK_IMAGE
指定为所有图片变量的xGoogleProperty
类型。如需查看示例,请参阅自定义 Terraform 模块示例中的metadata.display.yaml
。如果您的商品包含多虚拟机映像或支持多 CPU 架构的映像,您必须添加
enumValueLabels
,以便客户可以选择要使用的虚拟机映像。如需查看示例,请参阅自定义 Terraform 模块示例。您的模块不得依赖于对 Terraform 预配程序的支持。
自定义 Terraform 模块的其他步骤
如果您选择使用自定义 Terraform 模块,则必须完成以下额外步骤,才能配置虚拟机映像以进行部署:
在 Producer Portal 中,前往部署包部分。
在 Terraform 配置下,点击“映像变量”下方的添加变量。
如需启用产品的 Terraform 部署,您必须启用 Marketplace 自有映像的使用。当客户部署您的产品时,Cloud Marketplace 会使用您在此处添加的变量来切换 Marketplace 拥有的虚拟机映像版本。
在图片变量文本字段中,输入变量的名称,例如“image”。
在自定义 Terraform 模块中,将您在上一步中创建的变量的默认值设置为产品的虚拟机映像的名称,格式为
projects/YOUR_PROJECT/global/images/YOUR_IMAGE
。在指定 GCS 对象位置下,点击浏览。
如果您已创建 Cloud Storage 存储桶,请在此处选择该存储分区。
如果您没有 Cloud Storage 存储桶,请点击标记为创建新存储桶的图标。创建新存储桶时,您需要执行以下操作:
为存储桶选择名称。
指定存储桶在其中存储数据的一个或多个区域。
指定数据的存储类别。
确定应用于存储桶数据的Identity and Access Management (IAM) 权限的粒度级别。
配置可选的高级设置,例如加密或数据保留政策。
确保您的 Cloud Storage 存储桶已启用对象版本控制。
如需保存存储桶设置并继续配置部署包,请点击配置。
在必需的角色下,指定您的客户必须具备哪些 IAM 角色才能部署您的产品。
(仅限界面部署)为自定义 Terraform 模块创建元数据
为了让自定义模块支持界面部署,您必须创建并添加元数据,以便 Cloud Marketplace 使用这些元数据正确解析您的模块并将其呈现给客户的界面中。
如需创建和添加此元数据,您可以使用开源 CFT CLI 工具。如需使用 CFT 创建自定义模块并向其添加元数据,请完成以下步骤:
安装 CFT CLI 工具。如需了解详情,请参阅 CFT CLI 文档。 我们建议您将
VERSION
的值指定为latest
,并将PLATFORM
设置为以下某个值:linux
windows
darwin
运行以下命令:
cft blueprint metadata -p TF_PACKAGE_PATH -q -d --nested=false
在上一个命令中,
-p
标志为 Terraform 软件包提供了路径,-q
标志无需远程代码库的信息即可生成元数据,-d
标志会生成metadata.display.yaml
文件,--nested=false
标志会为根模块生成元数据,并跳过modules/
文件夹中的所有模块。
完成上述步骤后,CFT CLI 工具会生成两个新文件:metadata.yaml
和 metadata.display.yaml
。
自定义自定义 Terraform 模块的元数据
Cloud Marketplace 使用 metadata.display.yaml
文件自定义客户用于通过界面部署您的产品的表单。如果您想自定义此表单,可以在创建元数据后更改 metadata.display.yaml
中字段的值。如需详细了解可用的自定义选项,请参阅开源 BlueprintUI 文档,或查看 BlueprintUI 架构。
我们建议您使用扩展程序 GooglePropertyExtensions
来更改元数据。借助 GooglePropertyExtensions
,您可以使用 Google Cloud 专用验证,例如强制要求客户只能选择其项目中已存在的 Virtual Private Cloud (VPC) 网络。如需查看示例,请参阅自定义 Terraform 模块示例。
验证自定义模块的元数据
如需验证自定义模块的元数据,请运行以下命令:
cft blueprint metadata -p TF_PACKAGE_PATH -v
在上一个命令中,-p
标志为 Terraform 软件包提供了路径,-v
标志则根据 BlueprintMetadata
架构验证所提供路径下的所有元数据文件。
测试您的模块是否通过了验证
如果以下命令成功运行,则表示您的自定义模块通过了验证:
terraform plan -var project_id=YOUR_PROJECT -var-file marketplace_test.tfvars
在上一个命令中,marketplace_test.tfvars
是一个 Terraform 变量文件,仅供 Cloud Marketplace 使用,仅用于对此模块进行验证。如果您的模板声明了没有默认值的任何变量,并且您未为这些变量设置值,则命令将无法成功运行。为确保命令成功运行,您可以创建 marketplace_test.tfvars
文件,为模板声明的变量设置值。如需查看 marketplace_test.tfvars
文件示例,请参阅自定义 Terraform 模块示例。
(可选)(仅限 CLI 部署)添加测试模块
可选:如果您的自定义模块支持 CLI 部署,您可以选择添加名为 examples/marketplace_test
的文件夹。如果您的产品需要包含单独的测试模块来验证其功能,您可能需要执行此操作。如果您添加此文件夹,则必须成功运行以下命令,才能使模块通过验证:
terraform -chdir=examples/marketplace_test plan -var project_id=YOUR_PROJECT
验证和测试您的部署
创建并配置部署包后,您必须先对其进行验证和测试,然后 Cloud Marketplace 团队才能审核并批准该部署包。
在 Producer Portal 中,前往部署包部分。
点击验证。验证过程最多需要两个小时才能完成,您可以在验证期间退出屏幕。
验证成功完成后,点击部署预览以测试您的部署。
后续步骤
成功验证和测试部署后,您可以点击发布,提交整个产品以供审核并在 Cloud Marketplace 上发布。有关详情,请参阅提交商品。