借助 Application Design Center,您可以将现有的多产品Google Cloud Terraform 配置按原样导入应用模板,而无需将代码重构为单个组件模块或先将其发布到目录。
与作为目录组件导入并在设计画布上连接的单产品 Terraform 模块不同,多产品 Terraform 配置是一个根模块,用于跨多个 Google Cloud 产品预配资源。如需将单产品模块作为组件导入,请参阅导入组件。
将现有 Terraform 配置导入 App Design Center 有助于您执行以下操作:
- 将现有 Terraform 配置纳入 App Design Center 应用生命周期管理,并在 App Hub 中自动注册已部署的资源。
- 通过创建不可变的应用模板修订版本,对 Terraform 配置进行版本控制。
- 使用 Infrastructure Manager 预览和部署应用,或将 Terraform 文件导出到 Cloud Storage。
创建模板修订版本后,您可以通过以下任一方式使用它:
- 直接部署:根据修订版本创建应用,预览应用以获取评估报告,然后部署应用。您无需先将模板发布到目录、共享模板或查找共享模板。
- 通过目录重复使用:将修订版本发布到目录,将其作为组件添加到复合应用模板,然后导出复合模板的 Terraform。如需了解详情,请参阅将应用模板发布到目录。
准备工作
如需执行本文档中的任务,请让管理员为您授予已启用应用的文件夹或管理项目的必要角色,如下表所示:
| 任务 | 所需的角色 |
|---|---|
| 创建、导入、创建快照和导出应用模板及模板修订版本 | Application Design Center Admin (roles/designcenter.admin) 或Application Design Center User ( roles/designcenter.user) |
| 创建、部署和导出应用 | Application Admin (roles/designcenter.applicationAdmin) 或Application Editor ( roles/designcenter.applicationEditor) |
如需详细了解角色,请参阅使用 Identity and Access Management 进行访问权限控制。
将 Terraform 根模块(.tf 文件和任何支持文件,例如 .json 文件)存储在以下任一来源中:
- Cloud Storage 存储桶。
- Developer Connect 代码库。
- 公共 Git 代码库。
- 包含这些文件的本地 YAML 或 JSON 文件。
将 Terraform 导入应用模板
使用 Google Cloud CLI 完成以下步骤,以创建应用模板、导入现有 Terraform 配置,并创建不可变模板修订版本。
在您的空间中创建应用模板。
gcloud design-center spaces application-templates create APPLICATION_TEMPLATE \ --project=PROJECT \ --location=LOCATION \ --space=SPACE \ --display-name=DISPLAY_NAME替换以下内容:
APPLICATION_TEMPLATE:您要创建的应用模板的 ID。PROJECT:您的管理项目 ID。LOCATION:您的地理位置 ID。SPACE:您的空间 ID。DISPLAY_NAME:应用模板的显示名称。
如需了解详情,请参阅 gcloud design-center spaces application-templates create。
从以下来源之一将 Terraform 配置导入应用模板:
如需从 Cloud Storage 存储桶导入,请运行以下命令:
gcloud design-center spaces application-templates ingest-iac APPLICATION_TEMPLATE \ --project=PROJECT \ --location=LOCATION \ --space=SPACE \ --gcs-uri=GCS_URI \ --raw-terraform-import-enabled如需从 Developer Connect 代码库导入,请运行以下命令:
gcloud design-center spaces application-templates ingest-iac APPLICATION_TEMPLATE \ --project=PROJECT \ --location=LOCATION \ --space=SPACE \ --developer-connect-repo-uri=DEVELOPER_CONNECT_REPO_URI \ --developer-connect-branch=DEVELOPER_CONNECT_BRANCH \ --developer-connect-dir=DEVELOPER_CONNECT_DIR \ --raw-terraform-import-enabled如需从公共 Git 代码库导入,请运行以下命令:
gcloud design-center spaces application-templates ingest-iac APPLICATION_TEMPLATE \ --project=PROJECT \ --location=LOCATION \ --space=SPACE \ --git-source-repo=GIT_SOURCE_REPO \ --git-source-ref-tag=GIT_SOURCE_REF_TAG \ --git-source-dir=GIT_SOURCE_DIR \ --raw-terraform-import-enabled如需从包含
IaCModule载荷的本地 YAML 或 JSON 文件导入,请运行以下命令:gcloud design-center spaces application-templates ingest-iac APPLICATION_TEMPLATE \ --project=PROJECT \ --location=LOCATION \ --space=SPACE \ --iac-module-from-file=IAC_MODULE_FILE \ --raw-terraform-import-enabled
替换以下内容:
APPLICATION_TEMPLATE:应用模板 ID。PROJECT:您的管理项目 ID。LOCATION:您的地理位置 ID。SPACE:您的空间 ID。GCS_URI:包含 Terraform 文件的 Cloud Storage URI,格式为gs://BUCKET_NAME/FOLDER_PATH。DEVELOPER_CONNECT_REPO_URI:Developer Connect 代码库链接 URI,格式为projects/PROJECT/locations/LOCATION/connections/CONNECTION/gitRepositoryLinks/REPO_LINK。DEVELOPER_CONNECT_BRANCH:Developer Connect 代码库中的分支名称。或者,指定--developer-connect-ref-tag或--developer-connect-commit-sha。DEVELOPER_CONNECT_DIR:Developer Connect 代码库中的目录路径。GIT_SOURCE_REPO:公共 Git 代码库的 HTTPS 网址。GIT_SOURCE_REF_TAG:公共 Git 代码库中的 Git 引用或标记。GIT_SOURCE_DIR:公共 Git 代码库中的目录路径。IAC_MODULE_FILE:包含 Terraform 文件的本地 YAML 或 JSON 文件的路径。
创建应用模板的快照,以生成不可变的应用模板修订版本,您可以使用该修订版本创建和部署应用。
gcloud design-center spaces application-templates snapshot APPLICATION_TEMPLATE \ --project=PROJECT \ --location=LOCATION \ --space=SPACE替换以下内容:
APPLICATION_TEMPLATE:应用模板 ID。PROJECT:您的管理项目 ID。LOCATION:您的地理位置 ID。SPACE:您的空间 ID。
输出包含所创建的应用模板修订版本 URI,格式为
projects/PROJECT/locations/LOCATION/spaces/SPACE/applicationTemplates/APPLICATION_TEMPLATE/revisions/REVISION。
基于模板创建和部署应用
为导入的 Terraform 模板创建快照修订版本后,您可以创建应用草稿、提供输入变量值并部署应用。
基于应用模板修订版本创建应用草稿。
gcloud design-center spaces applications create APPLICATION \ --project=PROJECT \ --location=LOCATION \ --space=SPACE \ --source-application-template-revision=SOURCE_APPLICATION_TEMPLATE_REVISION \ --deployment-project=DEPLOYMENT_PROJECT \ --deployment-region=DEPLOYMENT_REGION \ --app-parameters=APP_PARAMETERS \ --scope-type=SCOPE_TYPE替换以下内容:
APPLICATION:您要创建的应用的 ID。PROJECT:您的管理项目 ID。LOCATION:您的地理位置 ID。SPACE:您的空间 ID。SOURCE_APPLICATION_TEMPLATE_REVISION:snapshot命令返回的应用模板修订版本 URI。DEPLOYMENT_PROJECT:部署 Terraform 资源的目标项目 ID。DEPLOYMENT_REGION:部署 Terraform 资源的目标区域。APP_PARAMETERS:可选。Terraform 根模块的输入变量键值对(例如key=KEY,value=VALUE),或包含应用参数的 YAML 或 JSON 文件的路径。SCOPE_TYPE:应用的范围,可以是regional或global。
如需详细了解如何管理应用,请参阅管理应用。
预览和部署应用。如需查看分步说明,请参阅部署应用。
将 Terraform 代码导出到 Cloud Storage
您可以将 Terraform 文件从应用模板、应用模板修订版本或应用导出到 Cloud Storage 存储桶。如果您想使用自己的 CI/CD 工具运行 Terraform,或在版本控制中保留副本,请导出。
如需从应用模板草稿中导出 Terraform 文件,请运行以下命令:
gcloud design-center spaces application-templates export APPLICATION_TEMPLATE \ --project=PROJECT \ --location=LOCATION \ --space=SPACE \ --artifact-location-gcs-uri=ARTIFACT_LOCATION_GCS_URI如需从应用模板修订版本中导出 Terraform 文件,请运行以下命令:
gcloud design-center spaces application-templates revisions export REVISION \ --application-template=APPLICATION_TEMPLATE \ --project=PROJECT \ --location=LOCATION \ --space=SPACE \ --artifact-location-gcs-uri=ARTIFACT_LOCATION_GCS_URI如需从应用导出 Terraform 文件(包括填充了已配置应用参数的
zz_adc_inputs.auto.tfvars.json),请运行以下命令:gcloud design-center spaces applications export APPLICATION \ --project=PROJECT \ --location=LOCATION \ --space=SPACE \ --artifact-location-gcs-uri=ARTIFACT_LOCATION_GCS_URI
替换以下内容:
APPLICATION_TEMPLATE:应用模板 ID。REVISION:应用模板修订版本 ID。APPLICATION:应用 ID。PROJECT:您的管理项目 ID。LOCATION:您的地理位置 ID。SPACE:您的空间 ID。ARTIFACT_LOCATION_GCS_URI:目标 Cloud Storage URI,格式为gs://BUCKET_NAME/EXPORT_FOLDER。