导入现有 Terraform

借助 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 配置,并创建不可变模板修订版本。

  1. 在您的空间中创建应用模板。

    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。

  2. 从以下来源之一将 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 文件的路径。
  3. 创建应用模板的快照,以生成不可变的应用模板修订版本,您可以使用该修订版本创建和部署应用。

    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 模板创建快照修订版本后,您可以创建应用草稿、提供输入变量值并部署应用。

  1. 基于应用模板修订版本创建应用草稿。

    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。

    如需详细了解如何管理应用,请参阅管理应用。

  2. 预览和部署应用。如需查看分步说明,请参阅部署应用。

将 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。

后续步骤