Google cloud platform “如何修复”;发生未知错误";同时使用私有IP创建多个Google Cloud SQL实例时?
我们的云后端设置包含5个Postgres实例的云SQL。我们使用Terraform管理我们的基础设施。我们正在使用公共IP从GKE将它们连接到 为了简化我们的设置,我们希望通过移动到私有IP来摆脱代理容器。我试着跟在后面。虽然创建单个实例可以正常工作,但尝试同时创建5个实例会导致4个失败,一个成功: Google Clod控制台中出现的失败实例错误为“发生未知错误”: 下面是复制它的代码。注意Google cloud platform “如何修复”;发生未知错误";同时使用私有IP创建多个Google Cloud SQL实例时?,google-cloud-platform,google-cloud-sql,terraform-provider-gcp,Google Cloud Platform,Google Cloud Sql,Terraform Provider Gcp,我们的云后端设置包含5个Postgres实例的云SQL。我们使用Terraform管理我们的基础设施。我们正在使用公共IP从GKE将它们连接到 为了简化我们的设置,我们希望通过移动到私有IP来摆脱代理容器。我试着跟在后面。虽然创建单个实例可以正常工作,但尝试同时创建5个实例会导致4个失败,一个成功: Google Clod控制台中出现的失败实例错误为“发生未知错误”: 下面是复制它的代码。注意count=5行: resource "google_compute_network" "priva
count=5
行:
resource "google_compute_network" "private_network" {
provider = "google-beta"
name = "private-network"
}
resource "google_compute_global_address" "private_ip_address" {
provider = "google-beta"
name = "private-ip-address"
purpose = "VPC_PEERING"
address_type = "INTERNAL"
prefix_length = 16
network = "${google_compute_network.private_network.self_link}"
}
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"
count = 5
name = "private-instance-${count.index}"
database_version = "POSTGRES_9_6"
depends_on = [
"google_service_networking_connection.private_vpc_connection"
]
settings {
tier = "db-custom-1-3840"
availability_type = "REGIONAL"
ip_configuration {
ipv4_enabled = "false"
private_network = "${google_compute_network.private_network.self_link}"
}
}
}
provider "google-beta" {
version = "~> 2.5"
credentials = "credentials.json"
project = "PROJECT_ID"
region = "us-central1"
zone = "us-central1-a"
}
我尝试了几种选择:
- 在创建
google\u service\u networking\u连接后等待一分钟,然后同时创建所有实例,但我得到了相同的错误
- 创建每个实例的地址范围和
,但我得到一个错误,即无法同时创建google\u服务\u网络\u连接
google\u服务\u网络\u连接
- 为每个实例创建一个地址范围和一个链接到所有实例的
,但我得到了相同的错误google\u service\u networking\u connection
- 延迟所需的秒数取决于实例层。例如,对于
,30秒就足够了。对于db-f1-micro
,它们是不够的db-custom-1-3840
- 我不确定
所需的确切秒数。30秒不够,60秒不够db-custom-1-3840
- 找到了一个丑陋但有效的解决方案。尽管无法完成,但仍存在不阻止同时创建实例的方法。没有关于它的文档,也没有有意义的错误消息。它也出现在地图上
一种替代方法是在实例之间添加依赖关系。这样可以成功完成它们的创建。但是,创建每个实例需要几分钟。这会累积到许多分钟。如果我们在实例创建之间添加60秒的人工延迟,我们就能够避免失败。注:
依赖于
限制,我无法使用计数功能,显示5个实例的完整代码将非常长。对于5个实例,其工作原理相同:
resource "google_compute_network" "private_network" {
provider = "google-beta"
name = "private-network"
}
resource "google_compute_global_address" "private_ip_address" {
provider = "google-beta"
name = "private-ip-address"
purpose = "VPC_PEERING"
address_type = "INTERNAL"
prefix_length = 16
network = "${google_compute_network.private_network.self_link}"
}
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}"]
}
locals {
db_instance_creation_delay_factor_seconds = 60
}
resource "null_resource" "delayer_1" {
depends_on = ["google_service_networking_connection.private_vpc_connection"]
provisioner "local-exec" {
command = "echo Gradual DB instance creation && sleep ${local.db_instance_creation_delay_factor_seconds * 0}"
}
}
resource "google_sql_database_instance" "instance_1" {
provider = "google-beta"
name = "private-instance-delayed-1"
database_version = "POSTGRES_9_6"
depends_on = [
"google_service_networking_connection.private_vpc_connection",
"null_resource.delayer_1"
]
settings {
tier = "db-custom-1-3840"
availability_type = "REGIONAL"
ip_configuration {
ipv4_enabled = "false"
private_network = "${google_compute_network.private_network.self_link}"
}
}
}
resource "null_resource" "delayer_2" {
depends_on = ["google_service_networking_connection.private_vpc_connection"]
provisioner "local-exec" {
command = "echo Gradual DB instance creation && sleep ${local.db_instance_creation_delay_factor_seconds * 1}"
}
}
resource "google_sql_database_instance" "instance_2" {
provider = "google-beta"
name = "private-instance-delayed-2"
database_version = "POSTGRES_9_6"
depends_on = [
"google_service_networking_connection.private_vpc_connection",
"null_resource.delayer_2"
]
settings {
tier = "db-custom-1-3840"
availability_type = "REGIONAL"
ip_configuration {
ipv4_enabled = "false"
private_network = "${google_compute_network.private_network.self_link}"
}
}
}
provider "google-beta" {
version = "~> 2.5"
credentials = "credentials.json"
project = "PROJECT_ID"
region = "us-central1"
zone = "us-central1-a"
}
provider "null" {
version = "~> 1.0"
}
如果有人以稍有不同的情况登陆此处(在专用网络中创建google\u sql\u database\u实例会导致“未知错误”):
“”_(ツ)_/“我在这里用了一个稍微不同的案例,与@Grigorash Vasilij相同 (在专用网络中创建google_sql_数据库_实例会导致“未知错误”) 我使用UI在私有
VPC
上部署了一个SQL实例,由于某种原因,它也给我带来了一个“未知错误”。我最终用gcloud
命令解决了这个问题(为什么这样做有效而没有UI?IDK,可能UI没有执行与命令相同的操作)
当您说“手动启动一个云SQL实例”是什么意思?非私有实例?使用浏览器打开GCP控制台并通过“向导”:D
gcloud --project=[PROJECT_ID] beta sql instances create [INSTANCE_ID]
--network=[VPC_NETWORK_NAME]
--no-assign-ip