Terhubung ke Cloud SQL: Compute Engine, IP Pribadi, dan Proxy Cloud SQL

1. Pengantar

Terakhir Diperbarui: 06-05-2021

Memikirkan koneksi

Ada banyak jenis aplikasi dan framework di luar sana. Dalam codelab ini, kita akan membahas cara terhubung ke Cloud SQL dari aplikasi yang dijalankan di virtual machine terkelola di Google Compute Engine melalui alamat IP pribadi internal menggunakan Proxy Cloud SQL. Ini adalah cara yang sangat aman untuk menjalankan aplikasi stateful di Cloud. Anda meminimalkan eksposur ke internet dengan membatasi penggunaan IP pribadi saja, dan menggunakan Proxy SQL yang menangani konektivitas SSL untuk Anda.

Salah satu kasus penggunaan umum untuk hal ini adalah, misalnya, aplikasi lokal yang telah dipindahkan untuk berjalan di Cloud, bukan secara lokal.

Yang akan Anda bangun

Codelab ini sangat minimalis. Tujuannya adalah untuk memandu Anda memahami seluk-beluk bagian koneksi, tanpa terlalu memikirkan aplikasi itu sendiri. Dalam kondisi ideal, menghubungkan ke Cloud SQL sama seperti menghubungkan ke instance database SQL lainnya, sehingga Anda dapat menggunakan apa yang Anda buat dalam codelab ini, dan menerapkannya ke aplikasi produksi apa pun.

Petunjuk ini akan mencakup panduan untuk melakukan berbagai hal di konsol GCP, serta menyertakan perintah gcloud yang setara untuk digunakan di CLI atau otomatisasi.

Langkah-langkahnya adalah:

  • Buat Akun Layanan minimal untuk mengaktifkan koneksi ke instance Cloud SQL
  • Membuat VM di Google Compute Engine (GCE)
  • Buat instance Cloud SQL (tutorial ini menggunakan Postgres, tetapi berfungsi serupa untuk MySQL atau SQL Server)
  • Download dan jalankan Proxy Cloud SQL di instance GCE

Yang Anda butuhkan

  • Akun GCP tempat Anda memiliki izin untuk mengaktifkan API dan membuat layanan

2. Membuat akun layanan

Akun layanan digunakan untuk memberikan izin penggunaan layanan yang berbeda dalam project GCP Anda. Untuk codelab ini, kita memerlukannya agar dapat memberikan izin kepada Proxy Cloud SQL untuk terhubung ke instance Cloud SQL kita.

Di Konsol

Buka halaman akun layanan IAM dan klik tombol f8393a08b37a422c.png di bagian atas halaman.

Beri nama dan ID yang unik untuk akun layanan Anda, lalu klik BUAT.

Di halaman berikutnya, klik menu drop-down untuk Memilih peran. Filter untuk "Cloud SQL" dan pilih peran Cloud SQL Client. Klik CONTINUE.

Klik SELESAI.

Menggunakan gcloud

Buat akun layanan:

gcloud iam service-accounts create <SERVICE_ACCOUNT_NAME> --display-name "<SERVICE_ACCOUNT_NAME> service account"

Tindakan ini akan membuat akun layanan, tetapi saat ini tidak ada peran/izin yang ditetapkan untuk akun tersebut. Untuk menetapkan peran yang sesuai, jalankan:

gcloud projects add-iam-policy-binding <GCP PROJECT ID> --member serviceAccount:<SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com --role roles/cloudsql.client

Misalnya, jika akun layanan Anda diberi nama sa-test saat Anda membuatnya, dan project Anda adalah my-project-test, maka perintahnya adalah:

gcloud projects add-iam-policy-binding my-project-test --member serviceAccount:sa-test@my-project-test.iam.gserviceaccount.com --role roles/cloudsql.client
gcloud iam service-accounts keys create service-account.json --iam-account <SERVICE_ACCOUNT_NAME>@<GCP PROJECT ID>.iam.gserviceaccount.com

3. Membuat VM Compute Engine

Google Compute Engine adalah layanan terkelola tempat mesin virtual akan berjalan yang akan menyimpan aplikasi yang ingin kita hubungkan. Dalam codelab ini, kita tidak akan membuat aplikasi, tetapi kita akan mengonfirmasi konektivitas dengan menjalankan psql.

Di Konsol

Buka halaman Google Compute Engine, lalu klik tombol 77c46cd1f51bed5c.png.

Ada banyak opsi di sini, satu-satunya hal yang perlu Anda lakukan adalah:

  1. Beri nama instance Anda
  2. Ubah Machine type menjadi f1-micro
  3. Di bagian Akses API dan identitas, ubah dropdown untuk Service account dari Default compute service account ke yang Anda buat di langkah sebelumnya.
  4. Klik Buat di bagian paling bawah halaman

Menggunakan gcloud

Akun layanan adalah nama lengkap akun layanan yang Anda buat sebelumnya, sehingga akan dalam format: <NAME>@<PROJECT>.iam.gserviceaccount.com.

gcloud compute instances create <INSTANCE NAME> --machine-type=f1-micro --zone=us-central1-b --service-account=<SERVICE ACCOUNT FULL NAME>
gcloud compute zones list

4. Membuat instance Cloud SQL

Cloud SQL adalah penawaran database relasional terkelola kami. Layanan ini mendukung MySQL, PostgreSQL, dan SQL Server. Untuk codelab ini, kita akan membuat database Postgres, tetapi petunjuknya serupa untuk ketiga database tersebut.

Di Konsol

Buka halaman Cloud SQL, lalu klik tombol 241836b315e11bf5.png.

Seperti yang saya sebutkan, sebagian besar codelab ini bersifat umum untuk semua jenis SQL, tetapi untuk codelab ini, pilih PostgreSQL.

  1. Beri ID instance Anda
  2. Masukkan sandi untuk pengguna default (nama pengguna akan menjadi default untuk DB yang dipilih, misalnya root untuk MySQL atau postgres untuk PostgreSQL)
  3. Jika Anda mengubah region instance komputasi, Anda juga harus mengubah region di sini agar sesuai.
  4. Scroll ke bawah, lalu klik show configuration options
  5. Luaskan bagian Connectivity
  6. Hapus centang pada opsi untuk Public IP dan centang kotak Private IP
  7. Pastikan default dipilih di dropdown yang muncul saat IP Pribadi dicentang
  8. Scroll ke bawah, lalu klik Buat

Biasanya, instance memerlukan waktu beberapa menit untuk dimulai.

Menggunakan gcloud

Karena kita tidak memiliki perintah yang bagus untuk mengaktifkan API dari sini, kita harus melakukannya secara manual

gcloud services enable servicenetworking.googleapis.com

Selanjutnya, kita perlu mengaktifkan konektivitas layanan pribadi di jaringan VPC default. Langkah pertama untuk melakukannya adalah mengalokasikan rentang alamat IP bernama untuk digunakan instance kita.

gcloud compute addresses create sql-codelab-allocation --global --purpose=VPC_PEERING --prefix-length=24 --network=default

Selanjutnya, tetapkan rentang IP tersebut ke layanan internal kita (proses ini memerlukan waktu sekitar satu menit).

gcloud services vpc-peerings update --service=servicenetworking.googleapis.com  --network=default     --project=<PROJECT ID> --ranges=sql-codelab-allocation --force

Terakhir, pembuatan instance itu sendiri saat ini hanya tersedia dengan versi beta. Kombinasi --no-assign-ip dan --network=default yang memungkinkan konektivitas IP pribadi. Saat ini, tidak ada cara untuk mengaktifkan IP Pribadi dan IP Publik secara bersamaan. Jadi, jika Anda memerlukan akses publik, Anda harus mengedit instance setelah pembuatan. Proses ini membutuhkan waktu beberapa menit hingga selesai.

gcloud beta sql instances create test-sql-codelab-00 --no-assign-ip --database-version=POSTGRES_11 --tier=db-f1-micro --region=us-central1 --network=default --root-password=<PASSWORD>

5. Menyiapkan dan menjalankan Proxy Cloud SQL

Setelah terhubung ke VM, kita akan memerlukan string koneksi instance. Pertama, kita akan mengambilnya, lalu kita akan terhubung ke VM itu sendiri melalui SSH. Petunjuk untuk bagian ini akan ada di bagian masing-masing untuk Konsol vs. gcloud, dan kemudian bagian lainnya akan berupa perintah yang dijalankan dari shell di VM di bagiannya sendiri.

Di Konsol

Buka di sini, lalu klik nama instance Cloud SQL Anda.

Scroll ke bawah sedikit, lalu salin Connection name ke suatu tempat untuk digunakan nanti.

Buka halaman daftar instance Google Compute Engine, lalu temukan baris dengan VM Anda.

Di kolom Connect, klik tombol SSH dan jendela terpisah akan terbuka yang terhubung secara aman ke mesin virtual.

Lewati bagian Using gcloud untuk petunjuk selanjutnya karena sama untuk keduanya.

Menggunakan gcloud

Ganti <INSTANCE NAME> dengan nama instance Cloud SQL Anda:

gcloud sql instances describe <INSTANCE NAME> | grep connectionName

Simpan nama koneksi instance untuk digunakan nanti.

Anda harus mengganti <ZONE> dengan zona yang digunakan saat Anda membuat instance. Jika Anda tidak mengubahnya, maka setelannya adalah us-central1-b. Selain itu, ganti <INSTANCE_NAME> dengan apa pun yang Anda tentukan sebelumnya.

gcloud compute ssh --zone <ZONE> <INSTANCE_NAME>

Setelah terhubung ke VM

Pertama, kita perlu mendownload proxy. Bergantung pada sistem operasi Anda. Jika Anda tidak mengubah OS saat pembuatan VM, maka OS-nya adalah Linux dan Anda dapat menggunakan:

wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy && chmod +x cloud_sql_proxy

Jika Anda telah mengganti sistem operasi, Anda dapat membuka di sini untuk mendapatkan perintah yang tepat guna mendapatkan proxy untuk OS Anda.

Untuk menjalankan proxy, ambil nama koneksi instance yang Anda salin dari detail instance Cloud SQL untuk menggantikan <INSTANCE_CONNECTION_NAME>. Perhatikan juga, nomor port tcp dapat berubah jika Anda tidak menggunakan db Postgres, atau jika Anda telah mengubah port default yang digunakan db untuk memproses permintaan.

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:5432 &

6. Menguji koneksi dan menyelesaikan

Seperti yang disebutkan sebelumnya, jika Anda memiliki aplikasi yang ingin diaktifkan di instance GCE untuk diuji, tentu saja tidak masalah. Untuk codelab ini, kita akan menginstal psql dan menggunakan klien tersebut untuk memverifikasi bahwa kita dapat terhubung ke database.

Dari sesi SSH di VM:

sudo apt-get install postgresql-client
psql "host=127.0.0.1 port=5432 sslmode=disable user=postgres"

Kemudian, tentukan sandi pengguna default yang Anda siapkan saat membuat instance Cloud SQL.

Selamat! Jika semuanya berjalan lancar, Anda akan melihat perintah Postgres dan dapat menjalankan perintah terhadap database Anda.

Apa selanjutnya?

Lihat beberapa codelab ini...

Dokumen referensi