web-dev-qa-db-ja.com

Postgres Cloud SQLインスタンスのプライベートIPを有効にできません

Cloud SQLインスタンス(Postgresql 9.6)でプライベートIPを有効にしようとすると、次のエラーメッセージが表示されます。

Network association failed due to the following error: set Service Networking service account as servicenetworking.serviceAgent role on consumer project

[関連付けられたネットワーク]ドロップダウンで選択するVPCがあり、すでに設定済みのマネージドサービスネットワークも選択したので、理論上はすべて機能するはずです。

IAMでは、エラーメッセージに関連するものは何も見つかりません。サービスアカウントまたはservicenetworking.serviceAgent許可。

更新関連するTerraformスニペットを含める

## VPC Setup
resource "google_compute_network" "my_network" {
  project                 = "${var.project_id}"
  name                    = "vpc-play"
  auto_create_subnetworks = "false"
  routing_mode            = "REGIONAL"
}
# There is a bunch of subnets linked to this network which are not included here

## Managed services network

resource "google_compute_global_address" "default" {
  name = "google-managed-services-vpc-${var.project_id}"
  project = "${var.project_id}"
  provider = "google-beta"
  ip_version = "IPV4"
  prefix_length = 16
  address_type = "INTERNAL"
  purpose = "VPC_PEERING"
  network = "${google_compute_network.my_network.self_link}"
}


## Error occurs on this step
## Error is : google_service_networking_connection.private_vpc_connection: set Service Networking service account as servicenetworking.serviceAgent role on consumer project

resource "google_service_networking_connection" "private_vpc_connection" {
    provider = "google-beta"
    network       = "${google_compute_network.my_network.self_link}"
    service       = "servicenetworking.googleapis.com"
    reserved_peering_ranges = ["${google_compute_global_address.default.name}"]
}

## Database configuration <-- omitted private ip stuff for now as doesn't even get to creation of this, error in previous step

resource "google_sql_database_instance" "my_db" {
  depends_on = ["google_service_networking_connection.private_vpc_connection"]
  name             = "my_db"
  project          = "${var.project_id}"
  database_version = "POSTGRES_9_6"
  region           = "${var.region}"
  lifecycle {
    prevent_destroy = true
  }

  settings {
    tier = "db-f1-micro"

    backup_configuration {
      enabled     = true
      start_time  = "02:00"
    }

    maintenance_window {
      day = 1
      hour = 3
      update_track = "stable"
    }

    ip_configuration {
      authorized_networks = [
        {
          name  = "office"
          value = "${var.my_ip}"
        },
      ]
    }

    disk_size         = 10
    availability_type = "ZONAL"

    location_preference {
      zone = "${var.zone}"
    }
  }
}

6
McGin

Terraformはある時点でアカウントの権限をめちゃくちゃにし、すべてのユーザーからservicenetworking.serviceAgentロールを削除したようです。

サービスネットワークAPIを無効にしてから再度有効にすると、システムのすべてのユーザーのアクセス許可がリセットされ、問題が解決します。

1
McGin

エラーにも関連しているようです

エラー:googleapi:エラー400:事前条件チェックに失敗しました、failedPrecondition

どちらのエラーについても、ネットワーキングAPIを無効および有効にすると、再び機能するようになります...

1
André Luis