将已部署的资源导入 Infrastructure Manager

本教程演示了如何将 Google Cloud 资源导入 Infrastructure Manager 部署。您只能导入使用 Terraform 预配的资源。

如果您有 Terraform 配置但尚未将其部署到 Google Cloud,请参阅 使用 Infrastructure Manager 部署基础架构

本教程首先介绍如何使用 Terraform CLI 将虚拟私有云 (VPC) 部署到 Google Cloud 。然后,本教程演示了如何将这些已部署的资源导入 Infrastructure Manager,以便将这些资源作为 Infrastructure Manager 部署进行管理。

您可以使用本教程中的示例来了解如何将其他 Google Cloud 资源导入 Infra Manager。如需将 部署导入 Infra Manager,用于 预配资源的 Terraform 配置需要符合 约束条件,并且 资源需要使用 受支持的 Terraform 版本进行预配。

费用

本教程使用的以下收费组件: Google Cloud

准备工作

  1. 登录您的 Google 账号。

    如果您还没有 Google 账号,请 注册新账号

  2. 安装 Google Cloud CLI。

  3. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  4. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  5. 创建或选择 Google Cloud 项目

    选择或创建项目所需角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要拥有 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予 角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

  6. 验证您的 Google Cloud 项目是否已启用结算功能。

  7. 启用 Infrastructure Manager API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您 创建了项目,则可能已通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。 了解如何授予角色

    gcloud services enable config.googleapis.com
  8. 设置身份验证:

    1. 确保您拥有 Create Service Accounts IAM 角色 (roles/iam.serviceAccountCreator) 和 Project IAM Admin 角色 (roles/resourcemanager.projectIamAdmin)。了解如何授予角色
    2. 创建服务帐号:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      SERVICE_ACCOUNT_NAME 替换为服务帐号的名称。

    3. 向服务帐号授予 roles/config.agent IAM 角色:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/config.agent

      替换以下内容:

      • SERVICE_ACCOUNT_NAME:服务账号的名称
      • PROJECT_ID:您在其中创建服务帐号的项目的 ID
  9. 安装 Google Cloud CLI。

  10. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  11. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  12. 创建或选择 Google Cloud 项目

    选择或创建项目所需角色

    • 选择项目:选择项目不需要特定的 IAM 角色,您可以选择已获授角色的任何项目。
    • 创建项目:如需创建项目,您需要拥有 Project Creator 角色 (roles/resourcemanager.projectCreator),该角色包含 resourcemanager.projects.create 权限。了解如何授予 角色
    • 创建 Google Cloud 项目:

      gcloud projects create PROJECT_ID

      PROJECT_ID 替换为您要创建的 Google Cloud 项目名称。

    • 选择您创建的 Google Cloud 项目:

      gcloud config set project PROJECT_ID

      PROJECT_ID 替换为您的 Google Cloud 项目名称。

  13. 验证您的 Google Cloud 项目是否已启用结算功能。

  14. 启用 Infrastructure Manager API:

    启用 API 所需的角色

    如需启用 API,您需要拥有 serviceusage.services.enable 权限。如果您 创建了项目,则可能已通过 Owner 角色 (roles/owner) 拥有此权限。否则,您可以通过 Service Usage Admin 角色 (roles/serviceusage.serviceUsageAdmin) 获得此权限。 了解如何授予角色

    gcloud services enable config.googleapis.com
  15. 设置身份验证:

    1. 确保您拥有 Create Service Accounts IAM 角色 (roles/iam.serviceAccountCreator) 和 Project IAM Admin 角色 (roles/resourcemanager.projectIamAdmin)。了解如何授予角色
    2. 创建服务帐号:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      SERVICE_ACCOUNT_NAME 替换为服务帐号的名称。

    3. 向服务帐号授予 roles/config.agent IAM 角色:

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/config.agent

      替换以下内容:

      • SERVICE_ACCOUNT_NAME:服务账号的名称
      • PROJECT_ID:您在其中创建服务帐号的项目的 ID
  16. 安装受支持的Terraform版本。

将资源部署到 Google Cloud

您在本教程中部署的 Google Cloud 资源是 VPC。本部分介绍了如何部署资源,以便将其用作将已部署资源导入 Infra Manager 的示例。

本教程使用 us-central1 区域。如果您想使用其他区域,则可以使用 Infra Manager 运行的任何位置。如需查看有效位置的列表,请参阅 Infrastructure Manager 位置

授予配置中资源的权限

您已授予运行 Infra Manager 所需的权限,但还需要授予特定于您要部署的配置中所述资源的权限。

授予创建 VPC 网络(即 Terraform 配置中定义的资源)的权限:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
    --role=roles/compute.networkAdmin

替换以下内容:

  • SERVICE_ACCOUNT_NAME:服务帐号的名称。
  • PROJECT_ID:您的项目 ID。

使用 Terraform CLI 部署资源

  1. 使用以下 Terraform 配置创建 VPC 网络。为此,请运行以下命令:

    mkdir vpc_to_import
    cd vpc_to_import
    cat <<EOF > main.tf
    variable "project_id" {
      type = string
    }
    
    resource "google_compute_network" "vpc_network" {
      name = "my-custom-mode-network"
      project = var.project_id
    }
    EOF
    
  2. 使用以下命令,使用 Terraform CLI 部署配置:

    terraform init
    echo "**************  TERRAFORM APPLY  ******************"
    terraform apply -var="project_id=PROJECT_ID" -auto-approve
    cd ..
    

预配 VPC 后,您会看到以文本 Creation complete 开头的输出。

Terraform 配置中定义的 VPC 现已 部署到 Google Cloud。Terraform 会创建一个状态文件,该文件位于 main.tf 文件旁边的文件系统上。

在 Infrastructure Manager 中创建占位符部署

如需将资源导入 Infra Manager,您需要在 Infra Manager 中进行现有部署。

本教程使用存储桶来存储 Terraform 配置。如果您使用本教程来了解如何将其他部署导入 Infra Manager,则可以将 Terraform 配置存储在存储桶、公共 Git 代码库或本地机器上。

  1. 向存储桶添加一个空的 Terraform 配置:

    gcloud storage buckets create gs://import-deployment-configuration --project=PROJECT_ID
    
    mkdir placeholder_deployment
    cd placeholder_deployment
    cat <<EOF > main.tf
    EOF
    
    gcloud storage cp main.tf gs://import-deployment-configuration
    cd ..
    
  2. 使用 Infra Manager 创建部署。

    gcloud infra-manager deployments apply projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \
    --gcs-source gs://import-deployment-configuration \
    --input-values project_id=PROJECT_ID \
    --service-account projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT
    

    部署完成后,您会看到:

    Creating the deployment...done
    

您现在拥有一个 Infra Manager 部署。接下来,您需要将状态文件和 Terraform 配置添加到此部署,以便此部署管理 VPC。

导入状态文件和 Terraform 配置

如需使用 Infra Manager 管理已部署的资源 (VPC),您需要将状态文件和 Terraform 配置添加到 Infra Manager。

锁定部署

锁定 Infra Manager 部署,以便您可以更改其状态。

LOCK_ID=$(gcloud infra-manager deployments lock projects/PROJECT_ID/locations/us-central1/deployments/import-deployment --format="get(lockId)")

将 Terraform 状态文件导入 Infra Manager

导入已部署资源的状态文件。此状态文件是在您使用 Terraform CLI 部署 VPC 时由 Terraform 创建的。

将 Terraform 状态文件上传到 Infra Manager 部署。

SIGNED_STATE_UPLOAD_URL=$(gcloud infra-manager deployments import-statefile projects/PROJECT_ID/locations/us-central1/deployments/import-deployment --lock-id ${LOCK_ID} --format="get(signedUri)")
cd vpc_to_import
curl -s -X PUT --upload-file terraform.tfstate $SIGNED_STATE_UPLOAD_URL

将 Terraform 配置上传到 Cloud Storage 存储桶

现在,您已上传 Terraform 状态文件,还需要上传用于创建 VPC 网络的 Terraform 配置。 Infra Manager 需要 Terraform 状态文件,以便在运行 Infra Manager 预览时,它不会发现对资源的任何更改。

使用以下命令将 Terraform 配置上传到 Cloud Storage:

gcloud storage cp main.tf gs://import-deployment-configuration

解锁部署

如果您使用本教程来了解如何将任何资源导入 Infra Manager,请确保状态文件和 Terraform 配置没有差异。如果状态文件和 Terraform 配置之间存在差异,请确保状态文件描述了您要部署的资源。解锁部署后,如果状态文件和 Terraform 配置之间存在差异,则在您解锁部署时,Infra Manager 会创建或删除资源以与状态文件匹配。

您需要解锁部署,才能使用 Infra Manager 管理资源。在本教程中,状态文件和 Terraform 配置描述的是同一配置,因此 Infra Manager 不会创建或删除任何资源。

运行以下命令,从部署中释放锁。

gcloud infra-manager deployments unlock projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \
--project PROJECT_ID \
--location us-central1 \
--lock-id ${LOCK_ID}

现在,状态文件和 Terraform 配置已添加到您的 Infra Manager 部署中,您已完成已部署资源的导入。已部署的 VPC 现在由 Infra Manager 管理。

预览资源更改

对部署运行预览,以确认 Terraform 状态和部署在 Google Cloud 上的资源是否同步。

  1. 使用以下命令创建预览:

    gcloud infra-manager previews create projects/PROJECT_ID/locations/us-central1/previews/IMPORT_DEPLOYMENT_PREVIEW_NAME \
    --gcs-source gs://import-deployment-configuration \
    --deployment projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \
    --service-account projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
    --location us-central1
    
  2. 获取预览详细信息,确保预览已成功完成。

    gcloud infra-manager previews describe projects/PROJECT_ID/locations/us-central1/previews/IMPORT_DEPLOYMENT_PREVIEW_NAME
    
  3. 导出预览以查看更改。

    SIGNED_BIN_PLAN_URL=$(gcloud infra-manager previews export projects/PROJECT_ID/locations/us-central1/previews/IMPORT_DEPLOYMENT_PREVIEW_NAME --format "get(result.binarySignedUri)")
    curl -X GET --output tfplan.out $SIGNED_BIN_PLAN_URL
    
  4. 确保配置存在于本地,并使用以下命令进行初始化:

    terraform init
    
  5. 运行 Terraform show 以查看 Infrastructure Manager 部署状态与配置之间的更改。

    terraform show tfplan.out
    

如果上的 VPC 资源和状态文件同步,则 terraform show 会输出以下内容,验证 Infrastructure Manager 是否未发现部署状态与配置之间的任何更改。 Google Cloud 您会看到类似于以下内容的输出:

No changes. Your infrastructure matches the configuration.

Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.

您现在已导入已部署的资源,以便由 Infra Manager 管理这些资源。例如,您现在可以使用 Infra Manager 来 更新部署

您还可以更新部署 以验证部署是否已成功导入 到 Infra Manager。

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

    删除项目: Google Cloud

    gcloud projects delete PROJECT_ID

删除各个资源

删除 VPC 和与部署有关的元数据:

gcloud infra-manager deployments delete projects/PROJECT_ID/locations/us-central1/deployments/quickstart-deployment

后续步骤