Menghubungkan ke CloudSQL melalui Private Service Connect (Terraform)

1. Ringkasan

Ada beberapa opsi untuk terhubung ke instance Cloud SQL pribadi dari project atau VPC lain. Private Service Connect (PSC) memungkinkan produsen layanan mengekspos layanan mereka melalui lampiran layanan. Lampiran layanan ini dapat digunakan oleh konsumen untuk membuat endpoint PSC dan/atau backend PSC di lingkungan mereka dan terhubung ke layanan produsen ini melalui IP pribadi yang ditentukan.

Cloud SQL memiliki kemampuan untuk menggunakan lampiran layanan PSC guna mengizinkan koneksi pribadi. Di lab ini, Anda dapat mengonfigurasi dan menguji opsi tersebut.

Di lab ini, Anda akan membuat arsitektur sederhana yang menggambarkan penggunaan akses endpoint PSC dengan CloudSQL.

Gambar 1.

1893f48fe1298ea2.png

Untuk lab ini, Anda memerlukan dua project atau VPC terpisah dalam project yang sama.

Tujuan

Di lab ini, Anda akan mempelajari cara melakukan tugas berikut:

  • Buat instance CloudSQL dengan lampiran layanan PSC.
  • Membuat alamat IP statis
  • Membuat endpoint PSC di VPC konsumen untuk terhubung ke database CloudSQL
  • Verifikasi akses ke database SQL dari VM pengujian di jaringan konsumen melalui IP endpoint PSC.

2. Penyiapan dan Persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
  • Project ID bersifat unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri, dan lihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan tersedia selama durasi project.
  • Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini tidak akan memakan banyak biaya, bahkan mungkin tidak sama sekali. Guna mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus project-nya. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Mulai Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.

Dari Google Cloud Console, klik ikon Cloud Shell di toolbar kanan atas:

55efc1aaa7a4d3ad.png

Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:

7ffe5cbb04455448.png

Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda dalam codelab ini dapat dilakukan di browser. Anda tidak perlu menginstal apa pun.

3. Tugas 1. Menyiapkan Lingkungan untuk project database dengan (Terraform)

Di project database, kita akan membuat VPC kustom dengan aturan Firewall dan subnet. Buka konsol cloud dan pilih project yang akan Anda gunakan untuk database.

  1. Buka Cloud Shell yang terletak di bagian atas konsol di sebelah kanan, pastikan Anda melihat Project ID database untuk project database di Cloud Shell, konfirmasi perintah apa pun untuk mengizinkan akses. 4261e776f64ea978.png
  2. Buat folder bernama terraform-db dan pindahkan ke folder
mkdir terraform-db  && cd terraform-db
  1. Buat file main.tf, variable.tf, dan database.tf.
touch main.tf variable.tf database.tf 
  1. Beralihlah ke tampilan Cloud Shell editor. Pilih editor, pastikan Anda mengizinkan perintah yang diperlukan agar antarmuka dapat dimuat.
  2. Setelah dimuat, buka File > Open Folder, lalu buka /home/your-user-name/terraform-db dan pilih Ok untuk membuka folder di editor. 78f5eb9f2f82f1b0.png
  3. Pilih file variable.tf dan tambahkan kode berikut. Ganti teks your-database-project-id-here dengan ID project database Anda yang sebenarnya dalam tanda petik. Ganti teks your-consumer-project-id-here dengan ID project konsumen Anda yang sebenarnya dalam tanda kutip.
variable "project_id" {
  type = string
  default = "your-database-project-id-here"
}

variable "project_id_consumer" {
  type = set(string)
  default = ["your-consumer-project-id-here"]
}

variable "network_id" {
  type = string
  default = "database-net"
}

variable "region_id" {
  type = string
  default = "us-east1"
}

variable "db_password" {
  type = string
  default = "cloudsql24"
}
  1. Selanjutnya, buka file main.tf. Kita akan menambahkan beberapa kode terraform untuk melakukan berbagai tindakan seperti yang dijelaskan di bawah.

Mengaktifkan API

resource "google_project_service" "default"

Create VPC

resource "google_compute_network" "default"

Menambahkan Aturan firewall

resource "google_compute_firewall" "allow_icmp"

  1. Salin dan tempel kode berikut ke dalam file .tf utama.
resource "google_project_service" "default" {
  for_each = toset([
    "compute.googleapis.com",
    "sqladmin.googleapis.com"
  ])

  service            = each.value
  disable_on_destroy = false
}

resource "google_compute_network" "default" {
  project                 = var.project_id
  name                    = var.network_id
  auto_create_subnetworks = true
  mtu                     = 1460
  routing_mode            = "GLOBAL"
}

resource "google_compute_firewall" "allow_icmp" {
  name    = "allow-icmp-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "icmp"
  }

  source_ranges = ["0.0.0.0/0"]
  target_tags   = ["allow-icmp"]
}

resource "google_compute_firewall" "allow_ssh" {
  name    = "allow-ssh-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "tcp"
    ports    = ["22"]
  }

  source_ranges = ["0.0.0.0/0"]
  target_tags   = ["allow-ssh"]
}

resource "google_compute_firewall" "allow_sql" {
  name    = "allow-sql-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "tcp"
    ports    = ["3306"]
  }

  source_ranges = ["0.0.0.0/0"]
 }

resource "google_compute_firewall" "allow_internal" {
  name    = "allow-internal-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "icmp"
    }


  allow {
    protocol = "tcp"
    ports    = ["0-65535"]
  }
  allow {
    protocol = "udp"
    ports    = ["0-65535"]
  }

  source_ranges = ["10.128.0.0/9"]
 }
  1. Beralih kembali ke terminal Cloud Shell, pastikan Anda berada di direktori terraform-db cd terraform-db dan jalankan perintah berikut

terraform init

Menginisialisasi direktori kerja. Langkah ini mendownload penyedia yang diperlukan untuk konfigurasi yang diberikan.

terraform plan

Membuat rencana eksekusi, yang menunjukkan tindakan yang akan dilakukan Terraform untuk men-deploy infrastruktur Anda.

  1. Sekarang, untuk membuat resource, jalankan perintah terraform apply dan ketik yes untuk dijalankan.

4. Tugas 2. Membuat instance CloudSQL dengan lampiran PSC (Terraform)

Mari kita gunakan Terraform untuk membuat instance CloudSQL, dengan opsi PSC untuk mengizinkan konektivitas. Selesaikan konfigurasi ini di project database.

  1. Beralihlah ke tampilan Cloud Shell editor. Pastikan Anda berada di folder terraform-db. Pilih file database.tf dan tambahkan kode berikut.
resource "google_sql_database_instance" "default" {
  name             = "psc-sql-db"
  region           = var.region_id
  database_version = "MYSQL_8_0"
  settings {
    tier              = "db-f1-micro"
    availability_type = "REGIONAL"
    backup_configuration {
      enabled            = true
      binary_log_enabled = true
    }
    ip_configuration {
      psc_config {
        psc_enabled               = true
        allowed_consumer_projects = var.project_id_consumer
      }
      ipv4_enabled = false
    }
  }
  deletion_protection = false 
}

resource "google_sql_user" "users" {
  name     = "testsql"
  instance = google_sql_database_instance.default.name
  password = var.db_password 
}
  1. Beralih kembali ke terminal Cloud Shell, pastikan Anda berada di direktori terraform-db. Sekarang, untuk membuat resource, jalankan perintah terraform apply dan ketik yes untuk dijalankan. Pembuatan instance CloudSQL dengan lampiran PSC dapat memerlukan waktu hingga 5 menit.

Memverifikasi database

  1. Setelah selesai, buka SQL di konsol, pilih instance database psc-sql-db yang baru dibuat.
  2. Di sebelah kiri, luaskan slideout opsi SQL dan pilih Koneksi
  3. Di tab ringkasan, Anda dapat melihat informasi tentang koneksi.
  4. Salin Alamat lampiran layanan dan simpan di suatu tempat di sistem Anda.
  5. Anda akan memerlukannya untuk menyelesaikan tugas 3 langkah 8.

Cloud SQL dengan lampiran psc

  1. Di sebelah kiri, luaskan slideout opsi SQL dan pilih Pengguna.
  2. Anda akan melihat pengguna bernama testsql dengan sandi cloudsql24 (Ini akan digunakan untuk mengakses database nanti)

5. Tugas 3. Menyiapkan Lingkungan untuk project konsumen (Terraform)

Di project konsumen, kita akan membuat VPC kustom dengan aturan Firewall dan subnet. Buka konsol cloud dan pilih project yang akan Anda gunakan.

  1. Di bagian atas konsol di sebelah kanan, di samping ikon Google Cloud, klik menu dropdown, lalu pilih tab all.

panel projectproject bar 2

  1. Dari project yang tercantum, pilih ID project konsumen Anda untuk melanjutkan.
  2. Buka Cloud Shell yang terletak di bagian atas konsol di sebelah kanan, pastikan Anda melihat project ID konsumen di Cloud Shell, konfirmasi perintah apa pun untuk mengizinkan akses.
  3. Buat folder bernama terraform-consumer dan pindahkan ke folder
mkdir terraform-consumer  && cd terraform-consumer
  1. Buat file main.tf, variable.tf, dan psc.tf.
touch main.tf variable.tf psc.tf 
  1. Beralihlah ke tampilan editor Cloud Shell untuk ID project konsumen. Pilih editor, pastikan Anda mengizinkan perintah yang diperlukan agar antarmuka dapat dimuat.
  2. Setelah dimuat, buka File > Open Folder, lalu buka /home/your-user-name/terraform-consumer dan pilih Ok untuk membuka folder di editor. 78f5eb9f2f82f1b0.png
  3. Pilih file variable.tf dan tambahkan kode berikut. Ganti teks your-consumer-project-id-here dengan project ID konsumen yang sebenarnya dalam tanda kutip. Ganti teks your-psc-attachment-id-here dengan alamat lampiran psc Anda dalam tanda kutip. Ini adalah ID yang Anda salin di tugas 2 bagian 2-5 d7ac9629a59abfc6.png
variable "project_id" {
  type = string
  default = "your-consumer-project-id-here"
}

variable "psc_attachment_id" {
  type = string
  default = "your-psc-attachment-id-here"
}

variable "network_id" {
  type = string
  default = "psc-endpoint-net"
}

variable "region_id" {
  type = string
  default = "us-east1"
}

variable "region_id2" {
  type = string
  default = "us-central1"
}
  1. Selanjutnya, buka file main.tf. Kita akan menambahkan beberapa kode terraform untuk melakukan berbagai tindakan seperti yang dijelaskan di bawah.

Mengaktifkan API

resource "google_project_service"

Create VPC

resource "google_compute_network"

Membuat gateway NAT

resource "google_compute_router"
resource "google_compute_router_nat"

Menambahkan Aturan firewall

resource "google_compute_firewall"

  1. Salin dan tempel kode berikut ke dalam file .tf utama.
resource "google_project_service" "default" {
  for_each = toset([
    "compute.googleapis.com",
    "cloudresourcemanager.googleapis.com"
  ])

  service            = each.value
  disable_on_destroy = false
}

resource "google_compute_network" "default" {
  project                 = var.project_id
  name                    = var.network_id
  auto_create_subnetworks = false
  mtu                     = 1460
  routing_mode            = "GLOBAL"
}

resource "google_compute_subnetwork" "vm_subnet" {
  name          = "vm-subnet"
  ip_cidr_range = "192.168.50.0/24"
  region        = var.region_id2
  network       = google_compute_network.default.name
  project       = var.project_id
}

resource "google_compute_subnetwork" "psc_subnet" {
  name          = "psc-subnet"
  ip_cidr_range = "192.168.90.0/24"
  region        = var.region_id
  network       = google_compute_network.default.name
  project       = var.project_id
}

resource "google_compute_router" "default" {
  name    = "outbound-nat"
  region  = var.region_id2
  network = google_compute_network.default.id

 bgp {
  asn = 64514
  }
}

resource "google_compute_router_nat" "default" {
  name = "outbound-nat-gw"
  router = google_compute_router.default.name
  region = google_compute_router.default.region
  nat_ip_allocate_option = "AUTO_ONLY"
  source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"

  log_config {
    enable = true
    filter = "ERRORS_ONLY"
  }
}

resource "google_compute_firewall" "allow_icmp" {
  name    = "allow-icmp-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "icmp"
  }

  source_ranges = ["0.0.0.0/0"]
  
}

resource "google_compute_firewall" "allow_ssh" {
  name    = "allow-ssh-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "tcp"
    ports    = ["22"]
  }

  source_ranges = ["0.0.0.0/0"]
  target_tags   = ["allow-ssh"]
}


resource "google_compute_firewall" "allow_internal" {
  name    = "allow-internal-${google_compute_network.default.name}"
  network = google_compute_network.default.id
  project = var.project_id

  allow {
    protocol = "icmp"
    }


  allow {
    protocol = "tcp"
    ports    = ["0-65535"]
  }
  allow {
    protocol = "udp"
    ports    = ["0-65535"]
  }

  source_ranges = ["192.168.0.0/16"]
 }
  1. Beralih kembali ke terminal Cloud Shell, pastikan Anda berada di direktori terraform-consumer cd terraform-consumer di project konsumen dan jalankan perintah berikut

terraform init

Menginisialisasi direktori kerja. Langkah ini mendownload penyedia yang diperlukan untuk konfigurasi yang diberikan.

terraform plan

Membuat rencana eksekusi, yang menunjukkan tindakan yang akan dilakukan Terraform untuk men-deploy infrastruktur Anda.

  1. Sekarang, untuk membuat resource, jalankan perintah terraform apply dan ketik yes untuk dijalankan.

6. Tugas 4. Membuat endpoint PSC ke lampiran DB SQL di project konsumen dan menguji VM (Terraform)

Selesaikan konfigurasi ini di project konsumen.

  1. Beralih kembali ke editor Cloud Shell, buka direktori terraform-consumer, lalu pilih file psc.tf. Tambahkan kode Terraform berikut ke file. Tindakan ini akan membuat IP internal statis, endpoint PSC, dan VM pengujian dengan Maria DB yang diinstal.
resource "google_compute_address" "default" {
  name = "psc-ip"
  region = var.region_id
  address_type = "INTERNAL"
  subnetwork = google_compute_subnetwork.psc_subnet.name
  address = "192.168.90.100" 
}

resource "google_compute_forwarding_rule" "default" {
  name = "psc-sql-endpoint"
  region = var.region_id
  network = google_compute_network.default.name
  ip_address = google_compute_address.default.self_link
  load_balancing_scheme = ""
  target = var.psc_attachment_id
}


resource "google_compute_instance" "sql_test_vm" {
  name         = "sql-test-vm"
  machine_type = "e2-medium"
  zone         = "${var.region_id2}-b"
  project      = var.project_id

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  network_interface {
    subnetwork = google_compute_subnetwork.vm_subnet.name
  }

  # No external IP address
  network_performance_config {
    total_egress_bandwidth_tier = "DEFAULT"
  }

  tags = ["allow-icmp", "allow-ssh", "allow-internal", "allow-health-check"]

  # Install MariaDB at startup
  metadata_startup_script = <<EOF
#!/bin/bash
apt-get update
apt-get install -y mariadb-server
systemctl enable mariadb
EOF
}
  1. Beralih kembali ke terminal Cloud Shell, pastikan Anda berada di direktori terraform-consumer cd terraform-consumer di project konsumen dan jalankan perintah berikut

terraform plan

Membuat rencana eksekusi, yang menunjukkan tindakan yang akan dilakukan Terraform untuk men-deploy infrastruktur Anda.

  1. Sekarang, untuk membuat resource, jalankan perintah terraform apply dan ketik yes untuk menjalankan
  2. Karena VM dan endpoint berada di region yang berbeda, kita perlu mengaktifkan Akses Global di endpoint PSC. Kita melakukannya melalui konsol
  3. Di konsol project konsumen, buka Private Service Connect. Di tab Connected Endpoint, lihat di bagian Endpoint dan pilih psc-sql-endpoint
  4. Sekarang, pilih EDIT, lalu klik kotak centang di samping opsi Enable global access dan Save. 7eeb5a4162f5f79d.png
  5. Lanjutkan ke langkah berikutnya untuk memverifikasi konektivitas

7. Tugas 5. Memverifikasi konektivitas endpoint dari VM melalui alamat IP PSC

Selesaikan ini di project konsumen

  1. Buka VM Instance. Pilih sql-test-vm
  2. Pilih opsi SSH untuk terhubung ke VM.
  3. Menghubungkan ke DB melalui endpoint dengan hal berikut:
mysql --host=192.168.90.100 --user=testsql --password=cloudsql24
  1. Setelah koneksi dibuat, mari kita buat database dengan psc-sql-db berikut.
CREATE DATABASE remotesqldb;
  1. Setelah selesai, ketik exit untuk keluar dari koneksi.

8. Tugas 6. Memverifikasi entri database

Selesaikan verifikasi ini di project database

  1. Di bagian atas konsol di sebelah kanan, di samping ikon Google Cloud, klik menu dropdown, lalu pilih tab all.

panel projectpanel project 2

  1. Dari project yang tercantum, pilih project ID database Anda untuk melanjutkan.
  2. Buka SQL, pilih database psc-sql-db, luaskan opsi SQL, lalu pilih Databases. Anda akan melihat database yang baru saja dibuat bernama remotesqldb dari VM project konsumen**.**

db cloud sql

9. Pembersihan

Menyelesaikannya di project Database

  1. Pilih project ID database
  2. Buka Cloud Shell, pastikan Anda melihat project ID database
  3. Buka direktori terraform-db cd terraform-db dan jalankan perintah berikut terraform destroy dan ketik yes semua resource yang Anda buat di project db dengan Terraform akan dihapus.

Selesaikan ini di project Konsumen

  1. Pilih project ID konsumen
  2. Buka Cloud Shell, pastikan Anda melihat project ID konsumen
  3. Buka direktori terraform-consumer cd terraform-consumer dan jalankan perintah berikut terraform destroy dan ketik yes semua resource yang Anda buat di project db dengan Terraform akan dihapus.

10. Selamat

Selamat, Anda telah berhasil mengonfigurasi instance Cloud SQL dengan lampiran PSC dan membuat endpoint Private Service Connect di VPC lain. Anda telah berhasil terhubung dari VM jarak jauh melalui endpoint PSC ke database.

Pelajari lebih lanjut

Anda dapat membaca selengkapnya tentang Private Service Connect dan Cloud SQL