本教程演示了如何将资源导入到 Infrastructure Manager 部署中。 Google Cloud 您只能导入使用 Terraform 预配的资源。
如果您有 Terraform 配置,但尚未在Google Cloud上部署该配置,请参阅使用 Infrastructure Manager 部署基础架构。
本教程首先介绍了如何使用 Terraform CLI 将 Virtual Private Cloud (VPC) 部署到Google Cloud 。然后,本教程将演示如何将这些已部署的资源导入 Infrastructure Manager,以便以 Infrastructure Manager 部署的形式管理这些资源。
您可以通过本教程中的示例了解如何将其他Google Cloud 资源导入 Infra Manager。如需将部署导入 Infra Manager,用于预配资源的 Terraform 配置确实需要符合限制条件,并且资源需要使用受支持的 Terraform 版本进行预配。
费用
本教程使用 Google Cloud的以下可计费组件:
准备工作
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Infrastructure Manager API:
gcloud services enable config.googleapis.com
-
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant the
roles/config.agent
IAM role to the service account:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/config.agent
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service account
-
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Infrastructure Manager API:
gcloud services enable config.googleapis.com
-
Set up authentication:
-
Create the service account:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Replace
SERVICE_ACCOUNT_NAME
with a name for the service account. -
Grant the
roles/config.agent
IAM role to the service account:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/config.agent
Replace the following:
SERVICE_ACCOUNT_NAME
: the name of the service accountPROJECT_ID
: the project ID where you created the service account
-
- 安装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 部署资源
使用以下 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
使用以下命令通过 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 代码库或本地计算机上。
向存储分区添加一个空的 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 ..
使用 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 上部署的资源是否同步。
使用以下命令创建预览:
gcloud infra-manager previews create projects/PROJECT_ID/locations/us-central1/previews/import-deployment-preview \ --gcs-source gs://import-deployment-configuration \ --input-values project_id=PROJECT_ID \ --deployment projects/PROJECT_ID/locations/us-central1/deployments/import-deployment \ --service-account projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
获取预览详情,确保预览已成功完成。
gcloud infra-manager previews describe projects/PROJECT_ID/locations/us-central1/previews/import-deployment-preview
导出预览以查看更改。
SIGNED_BIN_PLAN_URL=$(gcloud infra-manager previews export projects/PROJECT_ID/locations/us-central1/previews/import-deployment-preview --format "get(result.binarySignedUri)") curl -X GET --output tfplan.out $SIGNED_BIN_PLAN_URL
确保配置在本地存在,并使用以下命令进行初始化:
terraform init
运行 Terraform show 以查看 Infrastructure Manager 部署状态与配置之间的更改。
terraform show tfplan.out
如果 Google Cloud 上的 VPC 资源与状态文件保持同步,terraform show
会输出以下内容,以验证 Infrastructure Manager 在部署状态和配置之间没有看到任何更改。您将看到类似如下所示的输出:
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 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除项目
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
删除各个资源
删除 VPC 以及与部署有关的元数据:
gcloud infra-manager deployments delete projects/PROJECT_ID/locations/us-central1/deployments/quickstart-deployment
后续步骤
- 详细了解 Terraform with Google Cloud。
- 更新部署。
- 查看部署的状态。
- 查看已部署的资源。
- 删除部署。