如何删除默认 GCP vpc 并将其替换为 terraform?

How do I delete and replace the default GCP vpc with terraform?

Google 建议删除并创建您自己的产品 VPC

此资源管理默认 VPC:https://www.terraform.io/docs/providers/aws/r/default_vpc.html

但我想将不同的 VPC 设置为默认 VPC 并删除自动创建的。

这怎么可能?

在 Terraform 中,您描述了配置的所需状态,因此无法隐式发送“销毁请求”到不受 Terraform 管理的资源。

但是您可以先尝试 importing 它,然后它将由 Terraform 管理,并且由于您不将其包含在 *.tf 文件中,因此应在 terraform apply 步骤中删除默认子网。

default 网络没有任何使其成为默认网络的特定配置。它只是一个始终与新项目一起创建的网络,只要未指定网络(例如,在部署 GAE flex 应用程序时),使用的网络将是名称为 default 的网络.使用 Terraform 创建项目时,可以指定 auto_network_creation = "false".

但是,这不会阻止默认网络的创建,它只会在项目完全创建之前将其删除。这意味着,在 Terraform 创建期间,无法创建另一个名为 default 的网络。这必须在创建原始默认网络之后完成,因此,在项目创建之后。

您可以尝试使用 this tutorial 使用 Terraform 创建项目。 下一个片段是教程的一部分,我在其中包含了删除项目创建时的默认网络的行。

variable "project_name" {}
variable "billing_account" {}
variable "org_id" {}
variable "region" {}

provider "google" {
 region = "${var.region}"
}

resource "random_id" "id" {
 byte_length = 4
 prefix      = "${var.project_name}-"
}

resource "google_project" "project" {
 name            = "${var.project_name}"
 project_id      = "${random_id.id.hex}"
 billing_account = "${var.billing_account}"
 org_id          = "${var.org_id}"
 auto_create_network = "false" //This is supposed to delete default network on project creation
}

resource "google_project_services" "project" {
 project = "${google_project.project.project_id}"
 services = [
   "compute.googleapis.com"
 ]
}

output "project_id" {
 value = "${google_project.project.project_id}"
}

不过我自己试了一下,默认网络还在。

您可以 avoid/skip 通过设置 组织策略约束 .

默认网络创建
gcloud  resource-manager org-policies enable-enforce \
   constraints/compute.skipDefaultNetworkCreation \
   --organization ORGANIZATION_ID

更多详情见Organization Policy Constraints and Using boolean constraints in organization policy

设置 属性 auto_create_network = "false" 并提及结算帐户 ID,同时按照以下代码片段创建 GCP 项目,确保删除默认网络。

resource "google_project" "project" {
    name            = "test"
    project_id      = "test-523"
    billing_account = "xxxxx"
    auto_create_network = "false"
}