Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform “如何修复”;发生未知错误";同时使用私有IP创建多个Google Cloud SQL实例时?_Google Cloud Platform_Google Cloud Sql_Terraform Provider Gcp - Fatal编程技术网

Google cloud platform “如何修复”;发生未知错误";同时使用私有IP创建多个Google Cloud SQL实例时?

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

我们的云后端设置包含5个Postgres实例的云SQL。我们使用Terraform管理我们的基础设施。我们正在使用公共IP从GKE将它们连接到

为了简化我们的设置,我们希望通过移动到私有IP来摆脱代理容器。我试着跟在后面。虽然创建单个实例可以正常工作,但尝试同时创建5个实例会导致4个失败,一个成功:

Google Clod控制台中出现的失败实例错误为“发生未知错误”:

下面是复制它的代码。注意
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
    ,但我得到了相同的错误

    • 找到了一个丑陋但有效的解决方案。尽管无法完成,但仍存在不阻止同时创建实例的方法。没有关于它的文档,也没有有意义的错误消息。它也出现在地图上

      一种替代方法是在实例之间添加依赖关系。这样可以成功完成它们的创建。但是,创建每个实例需要几分钟。这会累积到许多分钟。如果我们在实例创建之间添加60秒的人工延迟,我们就能够避免失败。注:

      • 延迟所需的秒数取决于实例层。例如,对于
        db-f1-micro
        ,30秒就足够了。对于
        db-custom-1-3840
        ,它们是不够的
      • 我不确定
        db-custom-1-3840
        所需的确切秒数。30秒不够,60秒不够
      以下是解决此问题的代码示例。它只显示了2个实例,因为
      依赖于
      限制,我无法使用计数功能,显示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实例会导致“未知错误”):

    • 手动启动一个云SQL实例(这将为项目启用serviceneworking.googleapis.com和一些其他API)
    • 运行您的清单
    • 终止在步骤1中创建的实例
    • 从那以后我就开始工作了


      “”_(ツ)_/“

      我在这里用了一个稍微不同的案例,与@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