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

1. Pengantar

Terakhir diperbarui: 06-05-2021

Mempertimbangkan hubungan

Ada banyak jenis aplikasi dan kerangka kerja di luar sana. Dalam codelab ini, kita akan membahas cara menghubungkan 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 paparan 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 digeser untuk berjalan di Cloud, bukan secara lokal.

Yang akan Anda bangun

Codelab ini sangat minimalis. Idenya adalah untuk memandu Anda memahami komponen-komponen sambungan, tanpa terlalu memikirkan aplikasi itu sendiri. Idealnya, menghubungkan ke Cloud SQL sama seperti menghubungkan ke instance database SQL lainnya sehingga Anda harus dapat mengambil apa yang Anda buat dalam codelab ini, dan menerapkannya ke aplikasi produksi apa pun.

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

Setiap langkah tersebut adalah:

  • Buat Akun Layanan minimal untuk mengaktifkan koneksi ke instance Cloud SQL
  • Membuat VM di Google Compute Engine (GCE)
  • Membuat 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 yang izinnya Anda miliki 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.

Di Konsol

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

Beri akun layanan Anda nama dan ID yang unik, 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 akun tidak memiliki peran/izin yang ditetapkan ke 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

Mis. Jika akun layanan Anda diberi nama sa-test saat Anda membuatnya, dan project Anda adalah my-project-test, 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 virtual machine akan berjalan, yang akan menyimpan aplikasi yang ingin kita hubungkan. Dalam codelab ini, kita tidak membangun aplikasi, tetapi akan mengonfirmasi konektivitas dengan menjalankan psql.

Di Konsol

Buka halaman Google Compute Engine dan klik tombol 77c46cd1f51bed5c.pngS.

Ada banyak opsi di sini, yang Anda perlukan hanyalah:

  1. Beri nama instance Anda
  2. Ubah Machine type menjadi f1-micro
  3. Di bagian Identitas dan Akses API, ubah dropdown untuk Service account dari Default compute service account menjadi menu yang Anda buat di langkah sebelumnya.
  4. Klik Buat jauh di bagian 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. Alat ini mendukung MySQL, PostgreSQL, dan SQL Server. Untuk codelab ini, kita akan membuat database Postgres, tetapi petunjuk untuk ketiganya sama.

Di Konsol

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

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

  1. Berikan ID kepada 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 dan klik show configuration options
  5. Luaskan bagian Connectivity
  6. Hapus centang opsi untuk Public IP dan centang kotak Private IP
  7. Pastikan default dipilih di menu dropdown yang muncul saat IP Pribadi dicentang
  8. Scroll ke bawah dan klik Buat

Biasanya perlu waktu beberapa menit untuk memulai instance.

Menggunakan gcloud

Karena tidak ada 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 pada jaringan VPC default kita. Langkah pertama untuk melakukannya adalah mengalokasikan rentang alamat IP yang telah diberi nama untuk digunakan pada instance kita.

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

Selanjutnya adalah menetapkan rentang IP tersebut ke layanan internal kami (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 dalam versi beta. Kombinasi --no-assign-ip dan --network=default adalah yang mengaktifkan 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.

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 menghubungkan ke VM itu sendiri melalui SSH. Petunjuk untuk bagian-bagian ini akan ada di bagiannya masing-masing untuk Console vs. gcloud, dan sisanya adalah 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 di suatu tempat untuk digunakan nanti.

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

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

Lewati bagian Using gcloud untuk petunjuk lainnya karena bagian tersebut 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 kembali saat membuat instance. Jika Anda tidak mengubahnya, maka sandi disetel ke us-central1-b. Dan juga mengganti <INSTANCE_NAME> dengan apa pun yang telah Anda tentukan sebelumnya.

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

Setelah terhubung ke VM

Pertama, kita perlu mengunduh {i>proxy<i}. Bergantung pada sistem operasi Anda. Jika Anda tidak mengubah OS dalam pembuatan VM, maka akan digunakan di 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 mengganti sistem operasi, Anda dapat membuka di sini untuk 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 mengganti <INSTANCE_CONNECTION_NAME>. Perhatikan juga, nomor port tcp dapat berubah jika Anda tidak menggunakan db Postgres, atau jika Anda telah mengubah porta {i>default<i} yang didengarkan oleh db.

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

6. Menguji koneksi dan menyelesaikan

Seperti yang disebutkan sebelumnya, jika Anda memiliki aplikasi yang ingin Anda uji di instance GCE, 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 memiliki prompt Postgres dan dapat menjalankan perintah terhadap database Anda.

Apa selanjutnya?

Lihat beberapa codelab ini...

Dokumen referensi