😺

Private Service ConnectとPrivate Google Accessそれぞれを利用したCloudSQLの作り方

2023/10/24に公開

記事の内容

  • Private Service Connect
  • Private Google Access

それぞれを利用して、TerraformでCloudSQLを作成します。

記事の長さ

3分で読めます

Networkの作成

VPCとSubnetを作成します。

network.tf

resource "google_compute_network" "main_network" {
  project                 = var.project_id
  name                    = "main-network"
  auto_create_subnetworks = false
}

resource "google_compute_subnetwork" "main_subnetwork" {
  project       = var.project_id
  name          = "main-subnetwork"
  ip_cidr_range = "10.2.0.0/16"
  region        = "asia-northeast1"
  network       = google_compute_network.main_network.id
}

resource "google_project_service" "service_networking" {
  project            = var.project_id
  service            = "servicenetworking.googleapis.com"
  disable_on_destroy = false
}

resource "google_compute_global_address" "private_ip_address" {
  project       = var.project_id
  name          = "private-ip"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.main_network.id
}

resource "google_service_networking_connection" "default" {
  network                 = google_compute_network.main_network.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.private_ip_address.name]
}

上記Terraformファイルをapplyすることで、VPCとサブネットワーク、Private Service Connect・Private Google Access用のIPアドレスレンジとコネクターが作成されます。
※このIP Rangeとコネクションを作っていない場合、PrivateIPを持つCloudSQLを作成しようとすると以下のエラーが発生します。

│ Error: Error, failed to create instance because the network doesn't have at least 1 private services connection. Please see https://cloud.google.com/sql/docs/mysql/private-ip#network_requirements for how to create this connection.

CloudSQLの作成

Private Google AccessとPrivate Service Connectを使った場合、それぞれ以下のようにTerraformを構成することが可能です。

Private Google Accessを使った場合

resource "google_sql_database_instance" "pga-db" {
  project          = var.project_id
  name             = "pga-db"
  region           = "asia-northeast1"
  database_version = "MYSQL_8_0"

  settings {
    tier = "db-f1-micro"
    ip_configuration {
      ipv4_enabled    = false
      private_network = google_compute_network.main_network.id
    }
  }
}

GCP CloudSQL

Private Google Accessを利用すると resource "google_compute_global_address" "private_ip_address" で指定したIPレンジの中から、ランダムでPrivate IPアドレスが付与されます。

Private Service Connectを使った場合

resource "google_sql_database_instance" "psc-db" {
  project          = var.project_id
  name             = "psc-db"
  region           = "asia-northeast1"
  database_version = "MYSQL_8_0"

  settings {
    tier = "db-f1-micro"
    ip_configuration {
      psc_config {
        psc_enabled               = true
        allowed_consumer_projects = [var.project_id]
      }
      ipv4_enabled    = false
    }
  }
}

※Private Service Connectの場合、接続可能なGCP Projectを指定できます。

GCP CloudSQL

Private Service Connectを利用すると、許可リストに登録されたVPCネットワークごとに間接的に割り当てられたプライベートIPアドレス が与えられます。

ソース

https://github.com/rara-tan/cloudsql-network-psc-pga

サンプルソースはこちらに!

note

勉強法やキャリア構築法など、エンジニアに役立つ記事をnoteで配信しています。

https://note.com/ring_belle/membership

Discussion