Как удалить и заменить стандартный GCP vpc на terraform?

Google рекомендует удалить и создать свой собственный VPC для продуктов

Этот ресурс управляет VPC по умолчанию: https://www.terraform.io/docs/providers/aws/r/default_vpc.html

Но я хочу установить другой VPC по умолчанию и удалить автоматически созданный.

Как это возможно?

2 ответа

Решение

default сеть не имеет какой-либо конкретной конфигурации, которая делает ее сетью по умолчанию. Это всего лишь одна сеть, которая всегда создается вместе с новым проектом, и всякий раз, когда сеть не указана (например, при развертывании приложения GAE flex), будет использоваться сеть с именем default, Когда вы создаете проект с помощью Terraform, вы можете указать auto_network_creation = "false",

Однако это не помешает созданию сети по умолчанию, а просто удалит ее до того, как проект будет полностью создан. Это означает, что во время создания Terraform невозможно создать другую сеть под названием default, Это необходимо сделать после создания исходной сети по умолчанию и, следовательно, после создания проекта.

Вы можете попробовать создать проекты с помощью 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}"
}

Тем не менее, я попробовал это сам, и сеть по умолчанию все еще была там.

Вы можете избежать / пропустить создание сети по умолчанию, установив ограничение политики организации.

gcloud  resource-manager org-policies enable-enforce \
   constraints/compute.skipDefaultNetworkCreation \
   --organization ORGANIZATION_ID

дополнительные сведения см. в разделах "Ограничения политики организации" и " Использование логических ограничений в политике организации".

Так как в Terraform вы описываете желаемое состояние вашей конфигурации, невозможно неявно отправить "запрос на уничтожение" ресурсу, который не управляется Terraform.

Однако вы можете сначала попытаться импортировать его, затем он будет управляться Terraform, и, поскольку вы не включаете его в файлы *.tf, подсеть по умолчанию следует удалить во время terraform apply шаг.

Установка свойства auto_create_network = "false" и упоминание идентификатора платежной учетной записи при создании проекта GCP, как в приведенном ниже фрагменте кода, гарантирует, что сеть по умолчанию будет удалена.

resource "google_project" "project" {
    name            = "test"
    project_id      = "test-523"
    billing_account = "xxxxx"
    auto_create_network = "false"
}
Другие вопросы по тегам