使用 DM Convert 转换为 Terraform 或 Kubernetes 资源模型 (KRM)

Deployment Manager Convert (DM Convert) 是一种工具,可用于将您的 Deployment Manager 配置模板转换为 Google 支持的其他声明性配置格式。Google 目前支持 TerraformKubernetes 资源模型 (KRM)

为什么要转换为 Terraform 或 KRM?

Terraform 和 KRM 是管理 Google Cloud 服务和基础架构的热门方案。它们提供积极更新的生态系统,并支持 Secret 管理和持续协调(适用于 KRM)等现代功能。

Google 与 HashiCorp 合作,开发适用于 Google Cloud 的 Terraform 提供程序。2020 年,Google 还推出了 Config Connector,以帮助客户使用 Kubernetes 管理 Google Cloud 资源类型

Terraform

Terraform 是一种用于供应基础架构的开源工具。您可以使用 Terraform 编写声明式配置,从而借助适用于 Google Cloud 的 Terraform 提供程序来管理 Google Cloud 服务和资源。如需了解详情,请参阅 Google Cloud 上的 Terraform

Kubernetes 资源模型 (KRM)

KRM 是为声明式配置管理构建 API 和资源定义的范例。它将 Google Cloud 资源表示为自定义资源定义 (CRD),并且可以使用配置控制器执行。

支持的类型和类型提供程序

DM Convert 将 Deployment Manager 配置 YAML 文件和 Jinja 或 Python 模板文件转换为 KRM 或 Terraform 配置文件。

如需查看 DM Convert 对类型提供程序和资源类型的支持的当前状态,您可以使用 --list-supported-types 标志。

了解 DM Convert 如何转换各种格式的概念

下表显示了 DM Convert 如何将 Deployment Manager 中的概念转换为 KRM 和 Terraform:

Deployment Manager 概念 KRM/Config Connector 转换 Terraform 转换
引用 资源引用(如果 KRM 架构将字段定义为引用)。如果 KRM 架构未将字段定义为引用,则 Deployment Manager 引用将替换为其已解析的值。 Terraform 引用的外观和行为类似于 Deployment Manager 引用。
显式依赖项 (depends_on) 不支持显式依赖项排序。资源以最终一致的方式运行。 depends_on
Identity and Access Management (IAM) 绑定(权威 accessControl 块) IAMPolicy <resource_type>_iam_policy 类型(例如 google_pubsub_topic_iam_policy
IAM 绑定(非权威的 iamMemberBinding 类型) IAMPolicyMember <resource_type>_iam_member(例如:google_project_iam_member
复合类型 复合类型已弃用。DM Convert 不会转换它们。 复合类型已弃用。DM Convert 不会转换它们。
操作自定义类型提供程序输出 不受支持。 在 Terraform 中具有声明式等效项的操作将予以转换。如需了解详情,请参阅 Actions 支持

支持 DM 转换中的 Actions(适用于 Terraform)

Actions 是 Deployment Manager 的预览版功能,它扩展了一组可用的 API 方法。Actions 不受支持,并且 DM Convert 不会转换在 Terraform 中没有声明式等效项的 Actions,例如:

  • 修补、删除和列出 API

  • 自定义类型提供程序中定义的 API

  • 自定义 API,例如 sqladmin-v1beta4:sql.instances.restart

DM Convert 支持在以下情况下将 Actions 转换为 Terraform 等效项:

  • 它用等效的 Terraform 资源替换了对插入资源的 API 的 Actions 调用。例如,action: gcp-types/storage-v1:storage.buckets.insert 会转换为 google_storage_bucket

  • 它会尽可能将 Actions 调用转换为获取 Terraform data 类型类型的 API。例如,actions: gcp-types/compute-v1:compute.subnetworks.get 会转换为 google_compute_subnetwork

  • 它会将 setIamPolicy 命令转换为 *_iam_policy(权威)或 *_iam_member(非权威)资源,具体取决于它们是否与 getIamPolicy 一起使用。

如需了解如何在 Action 内将 Actions 迁移到声明式替代方案,请参阅替换 Actions 的使用

转换为 Terraform 的工作流

如需使用 DM Convert 将 Deployment Manager 配置转换为 Terraform,请执行以下操作:

  1. 确定要转换为 Terraform 的 Deployment Manager 配置。
  2. 为了确保资源是最新的,请协调配置的所有有效部署。
  3. 如需将配置转换为 Terraform,请在本地运行 DM Convert 工具
  4. 验证生成的 Terraform 配置是否反映了资源的当前状态。
  5. 删除 Deployment Manager 部署。如需在删除部署时保留资源,请将 delete-policy 设置为 abandon

我们建议您遵循 Terraform 最佳实践,例如:

如需详细了解此工作流,请参阅使用 DM Convert 转换 Deployment Manager 配置

DM Convert 中的数据收集

我们在默认情况下收集的信息

默认情况下,DM Convert 工具会将匿名使用情况数据发送给 Google,以帮助我们维护和改进该工具。执行 DM Convert 工具时,系统将收集有关请求的操作、操作成功和转换时间的数据。此数据是匿名的,不包括任何个人身份信息、敏感数据或客户内容。

使用数据可能包含:

  • 转换命令输入参数:我们在运行该工具时记录转换命令的参数值,包括输出格式(KRM 或 Terraform)以及是否指定其他标志的布尔值表示法(我们不会收集特定值)。

  • 转换结果:我们记录转换结果,包括转换状态(SUCCESSFAILURE)以及出现问题时的错误代码和错误消息。

  • 转换时间:我们会记录转换的开始时间和结束时间。

我们如何使用这些数据

Google 会收集并处理这些使用数据,以便:

  • 了解该工具的使用方式,包括哪些功能和设置最受欢迎。

  • 诊断工具使用失败的情况,并为寻求技术帮助的用户提供指导。

  • 通过解决问题和潜在地增加功能覆盖率来改进工具。

选择停用数据收集

默认情况下,当您执行转换时,Google 会收集使用数据,但此数据收集功能可予以停用。

如需为特定转换停用数据收集功能,您可以在转换命令中指定 --opt_out_data_collection=true 标志。如需继续停用此数据收集功能,您每次运行转换时都必须指定此标志。

如需为特定转换启用数据收集,您可以在转换命令中指定 --opt_out_data_collection=false 标志,或者在命令中省略该标志。