Код Terraform для создания экземпляра Cloud SQL с частным IP-адресом содержит некоторые ошибки. Во-первых, переменная ${google_compute_network.private_network.self_link}
получает полное имя сети, что означает что-то вроде www.googleapis.com/compute/v1/projects/PROJECT-ID/global/networks/testnw2
. Это значение недопустимо в поле google_compute_global_address.private_ip_address.network
, поэтому вам нужно изменить $ {google_compute_network.private_network.self_link} на $ {google_compute_network.private_network.name}.
Другая ошибка заключается в том, что формат в google_sql_database_instance.instance.settings.ip_configuration.private_network
должен быть projects/PROJECT_ID/global/networks/NW_ID
. поэтому вам нужно изменить поле на projects/[PROJECT_ID]/global/networks/${google_compute_network.private_network.name}
, чтобы работать.
Третья ошибка, а также та, которой вы поделились в своем первоначальном сообщении, вам нужно установить учетную запись службы в коде Terraform, чтобы иметь надлежащие привилегии, чтобы избежать этой ошибки. Пожалуйста, проверьте первые строки общего кода.
Четвертая ошибка заключается в том, что вам нужно сделать это с помощью провайдера Google-бета, а не Google по умолчанию
Как обсуждалось в опубликованном мною комментарии, я видел ошибку "An Unknown Error occurred"
перед использованием этого кода Terraform, эта ошибка относится к ошибке при пиринге VPC. Я понимаю, что расстраивать эту проблему сложно, потому что она не показывает никакой полезной информации, но если вы откроете заявку в Службе поддержки Google Cloud Platform, мы сможем проверить настоящую ошибку с помощью наших внутренних инструментов.
Как и было обещано, этот код я использую для создания частной сети и присоединения его к экземпляру Google Cloud SQL при создании.
provider "google-beta" {
credentials = "${file("CREDENTIALS.json")}"
project = "PROJECT-ID"
region = "us-central1"
}
resource "google_compute_network" "private_network" {
name = "testnw"
}
resource "google_compute_global_address" "private_ip_address" {
provider="google-beta"
name = "${google_compute_network.private_network.name}"
purpose = "VPC_PEERING"
address_type = "INTERNAL"
prefix_length = 16
network = "${google_compute_network.private_network.name}"
}
resource "google_service_networking_connection" "private_vpc_connection" {
provider="google-beta"
network = "${google_compute_network.private_network.self_link}"
service = "servicenetworking.googleapis.com"
reserved_peering_ranges = ["${google_compute_global_address.private_ip_address.name}"]
}
resource "google_sql_database_instance" "instance" {
provider="google-beta"
depends_on = ["google_service_networking_connection.private_vpc_connection"]
name = "privateinstance"
region = "us-central1"
settings {
tier = "db-f1-micro"
ip_configuration {
ipv4_enabled = "false"
private_network = "projects/PROJECT-ID/global/networks/${google_compute_network.private_network.name}"
}
}
}