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}"
}
}
}
Terraformはある時点でアカウントの権限をめちゃくちゃにし、すべてのユーザーからservicenetworking.serviceAgentロールを削除したようです。
サービスネットワークAPIを無効にしてから再度有効にすると、システムのすべてのユーザーのアクセス許可がリセットされ、問題が解決します。
エラーにも関連しているようです
エラー:googleapi:エラー400:事前条件チェックに失敗しました、failedPrecondition
どちらのエラーについても、ネットワーキングAPIを無効および有効にすると、再び機能するようになります...