为 Terraform 部署配置虚拟机映像

本文介绍了如何完成配置并提交 使用 Terraform 进行部署

确定如何创建部署包

我们建议您使用 Producer Portal 的引导式配置选项 直接在 Google Cloud 控制台中创建部署包。

引导式配置选项支持简单的虚拟机产品,例如单虚拟机 但不支持一些复杂的部署, 例如具有多个虚拟机和非计算资源的部署。如果 您需要使用引导式配置不支持的功能,可以使用 创建部署包或 通过添加其他功能来自定义现有软件包。

在引导式配置和手动配置之间切换

如果您使用 Producer Portal 的引导式配置选项,并且稍后想 切换到手动配置部署包,请点击 前往手动配置

完成引导式配置

要使用 Google Cloud 控制台,请完成以下步骤:

  1. 在 Producer Portal 中,前往 Deployment package(部署包)部分。

  2. Terraform configuration(Terraform 配置)下方标有 Cloud Storage 存储分区,点击浏览

    如果您已创建 Cloud Storage 存储桶,请选择该存储分区 此处。

    如果您没有 Cloud Storage 存储桶,请点击 创建新存储桶。创建新存储桶时,您需要执行以下操作:

    • 为存储桶选择名称。

    • 指定存储桶在其中存储数据的一个或多个区域。

    • 指定数据的存储类别。

    • 确定要应用于 对存储桶的数据拥有 Identity and Access Management (IAM) 权限。

    • 配置可选的高级设置,例如加密或数据 保留政策

  3. 请确保您 启用对象版本控制 Cloud Storage 存储桶

  4. 保存存储桶设置并继续配置部署 软件包,点击 Configure

  5. 选择机器类型下,您必须指定默认可用区。 虚拟机的最小机器类型默认机器类型 及其启动磁盘的大小和类型。

  6. 指定操作系统下,您必须指定名称和版本 以及虚拟机的版本号 图片。

  7. (可选)在设置虚拟机访问权限下,您可以指定网站和管理员。 网址以及用户名和密码 在部署后的虚拟机

  8. (可选)在配置网络下,您可以为以下各项指定设置: IP 转发并配置防火墙规则。

  9. (可选)在定义后续步骤下,您可以提供 以指导他们开始使用您的产品。 在部署您的 产品。

  10. 完成上述步骤后,点击生成以创建您的 部署包

    如果您以后需要对部署包进行其他更改, 您可以点击修改进行更改,然后点击生成 应用这些更改后,重新生成部署包。

  11. 在 Producer Portal 中验证部署包。

  12. 在 Cloud Marketplace 对部署包的验证 成功完成后,点击发布即可开始测试您的部署 软件包。

完成手动配置

本部分介绍了如何使用手动配置选项 并提交软件包以供审核。

指定使用默认还是自定义 Terraform 模块

您可以选择是希望客户使用默认或自定义 Terraform 模块。

如果您选择使用默认的 Terraform 模块,Google Cloud 会提供 将自动生成的 Terraform 代码用于部署 。

如果您选择使用自定义 Terraform 模块,则必须提供自己的模块 将 Terraform 模板发送给客户。您可以选择提供这些模板 客户可以使用命令行界面 (CLI) 进行部署, 或者通过额外的元数据,让客户能够直接通过 Cloud Marketplace。

指定您的客户应使用默认 Terraform 还是自定义 Terraform 模块;对于自定义 Terraform 模块,还要指定您希望客户如何部署 请完成以下步骤:

  1. 在 Producer Portal 中,前往 Deployment package(部署包)部分。

  2. Terraform configuration(Terraform 配置)下的 Type(类型)下,选择 Default(默认)。 自定义(CLI 部署)自定义(界面部署)

自定义 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 使用此变量来为您客户的 部署页面您应该使用此变量来避免 一个项目中的多个部署之间的资源命名冲突。对于 示例,请参阅 goog_cm_deployment_name 中的 自定义 Terraform 模块示例

  • metadata.display.yaml 文件中,您必须将 ET_GCE_DISK_IMAGE 指定为 xGoogleProperty 类型。例如: 请参见 metadata.display.yaml,了解 自定义 Terraform 模块示例

  • 如果您的产品包含多虚拟机映像或支持多个 CPU 的映像 您必须添加enumValueLabels,以便客户可以 选择要使用的虚拟机映像有关示例,请参见 自定义 Terraform 模块示例

  • 您的模块不得依赖于 Terraform 预配工具

自定义 Terraform 模块的额外步骤

如果您选择使用自定义 Terraform 模块,则必须完成以下操作 配置要部署的虚拟机映像的附加步骤:

  1. 在 Producer Portal 中,前往 Deployment package(部署包)部分。

  2. Terraform configuration 下的 Image Variables 下,点击 添加变量

    要为产品启用 Terraform 部署,您必须 启用了 Marketplace 自有映像。 Cloud Marketplace 使用您在此处添加的变量来替换 客户部署您的虚拟机映像时,Marketplace 拥有的虚拟机映像版本 产品。

  3. 图片变量文本字段中,输入变量的名称,例如 “image”。

  4. 在您的自定义 Terraform 模块中,设置 复制到您的容器映像的虚拟机映像的名称 商品,格式为 projects/YOUR_PROJECT/global/images/YOUR_IMAGE.

  5. 指定 GCS 对象位置下,点击浏览

    如果您已创建 Cloud Storage 存储桶,请在此处选择该存储分区。

    如果您没有 Cloud Storage 存储桶,请点击标记为创建新存储桶的图标。创建新存储桶时,您需要执行以下操作:

    • 为存储桶选择名称。

    • 指定存储桶在其中存储数据的一个或多个区域。

    • 指定数据的存储类别。

    • 确定应用于存储桶数据的Identity and Access Management (IAM) 权限的粒度级别。

    • 配置可选的高级设置,例如加密或数据保留政策。

  6. 确保您的 Cloud Storage 存储桶已启用对象版本控制

  7. 保存存储桶设置并继续配置部署 软件包,点击 Configure

  8. 所需角色下,指定您的客户的 IAM 角色 部署产品时所必须具备的要素

(仅限界面部署)为您的自定义 Terraform 模块创建元数据

要让您的自定义模块支持界面部署,您必须创建 Cloud Marketplace 用于正确解析模块和 在界面中为客户呈现

如需创建并添加此类元数据,您可以使用开源 CFT CLI 工具。 如需使用 CFT 创建元数据并将其添加到您的自定义模块,请完成 操作步骤:

  1. 安装 CFT CLI 工具。如需了解详情,请访问 CFT CLI 文档。 我们建议您将 VERSION 的值设置为 latest,并且 将 PLATFORM 设置为以下值之一:

    • linux

    • windows

    • darwin

  2. 运行以下命令:

     cft blueprint metadata -p TF_PACKAGE_PATH -q -d --nested=false
    

    在上一个命令中,-p 标志为 Terraform 提供了路径 则 -q 标志可生成元数据,而无需提供 远程仓库,-d 标志会生成 metadata.display.yaml 文件,--nested=false 标志会生成根模块的元数据, 跳过 modules/ 文件夹中的所有模块。

完成上述步骤后,CFT CLI 工具会生成两个新文件: metadata.yamlmetadata.display.yaml

自定义自定义 Terraform 模块的元数据

Cloud Marketplace 使用文件 metadata.display.yaml 来自定义 表单。如果您想 自定义此表单,则在创建元数据后,您可以更改 metadata.display.yaml 中的字段。如需详细了解 自定义选项,请访问 BlueprintUI 文档中, 或查看 BlueprintUI 架构

我们建议您使用该扩展程序 GooglePropertyExtensions 修改元数据。GooglePropertyExtensions可让您使用 特定于 Google Cloud 的验证,例如强制执行客户 仅选择 项目。有关示例,请参见 自定义 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 变量文件 仅用于验证 模块。如果模板声明的任何变量都没有默认值 如果您没有为这些变量设置值,则该命令不会运行 成功。要确保该命令成功运行,您可以创建一个 marketplace_test.tfvars 文件,用于为您希望运行的变量设置值 。如需查看 marketplace_test.tfvars 文件示例,请参阅 自定义 Terraform 模块示例

(可选)(仅限 CLI 部署)添加测试模块

(可选)如果您的自定义模块支持 CLI 部署,您可以选择 添加一个名为 examples/marketplace_test 的文件夹。如果遇到以下情况,您可能需要这样做: 您的产品需要包含一个单独的测试模块,用于验证其 capabilities.如果您添加了此文件夹,则您的模块 则必须成功运行下列命令:

terraform -chdir=examples/marketplace_test plan -var project_id=YOUR_PROJECT

验证和测试部署

创建和配置部署包后,您必须验证 并进行测试,然后 Cloud Marketplace 团队才能审核并批准 。

  1. 在 Producer Portal 中,前往 Deployment package(部署包)部分。

  2. 点击验证。验证流程最长可能需要 2 小时才能完成 完成后,您可以在运行时退出界面。

  3. 成功完成验证后,点击部署预览 来测试您的部署

后续步骤

成功验证和测试部署后,您可以点击 发布:提交您的整个商品以供审核和发布 Cloud Marketplace。有关详情,请参阅 提交您的商品