1. Ringkasan
Konektor Node.js Cloud SQL adalah cara termudah untuk menghubungkan aplikasi Node.js Anda dengan aman ke database Cloud SQL Anda. Cloud Run adalah platform serverless terkelola sepenuhnya yang memungkinkan Anda menjalankan container stateless yang dapat dipanggil melalui permintaan HTTP. Codelab ini akan menunjukkan cara menghubungkan aplikasi Node.js di Cloud Run ke database Cloud SQL untuk PostgreSQL secara aman dengan akun layanan menggunakan Autentikasi IAM.
Yang akan Anda pelajari
Di lab ini, Anda akan mempelajari cara melakukan hal-hal berikut:
- Membuat instance Cloud SQL untuk database PostgreSQL
- Men-deploy aplikasi Node.js ke Cloud Run
- Menghubungkan aplikasi ke database menggunakan library Cloud SQL Node.js Connector
Prasyarat
- Di lab ini, Anda dianggap telah memahami Konsol Cloud dan lingkungan Cloud Shell.
2. Sebelum memulai
Penyiapan Project Cloud
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki Akun Google, Anda harus membuatnya.



- 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 (biasanya diidentifikasi sebagai
PROJECT_ID). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri dan melihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan akan tetap ada selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan 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 seluruh project. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Penyiapan Lingkungan
Aktifkan Cloud Shell dengan mengklik ikon di sebelah kanan kotak penelusuran.

Aktifkan API dari Cloud Shell:
gcloud services enable compute.googleapis.com sqladmin.googleapis.com \
run.googleapis.com artifactregistry.googleapis.com \
cloudbuild.googleapis.com servicenetworking.googleapis.com
Jika diminta untuk memberikan otorisasi, klik "Beri otorisasi" untuk melanjutkan.

Pemrosesan perintah ini mungkin membutuhkan waktu beberapa menit, tetapi pada akhirnya akan menghasilkan pesan keberhasilan yang mirip dengan yang berikut:
Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.
3. Menyiapkan Akun Layanan
Buat dan konfigurasi akun layanan Google Cloud yang akan digunakan oleh Cloud Run sehingga akun tersebut memiliki izin yang benar untuk terhubung ke Cloud SQL.
- Jalankan perintah
gcloud iam service-accounts createsebagai berikut untuk membuat akun layanan baru:gcloud iam service-accounts create quickstart-service-account \ --display-name="Quickstart Service Account" - Jalankan perintah gcloud projects add-iam-policy-binding sebagai berikut untuk menambahkan peran Cloud SQL Client ke akun layanan Google Cloud yang baru saja Anda buat. Di Cloud Shell, ekspresi
${GOOGLE_CLOUD_PROJECT}akan diganti dengan nama project Anda. Anda juga dapat melakukan penggantian ini secara manual jika Anda merasa lebih nyaman melakukannya.gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/cloudsql.client" - Jalankan perintah gcloud projects add-iam-policy-binding sebagai berikut untuk menambahkan peran Cloud SQL Instance User ke akun layanan Google Cloud yang baru saja Anda buat.
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/cloudsql.instanceUser" - Jalankan perintah gcloud projects add-iam-policy-binding sebagai berikut untuk menambahkan peran Log Writer ke akun layanan Google Cloud yang baru saja Anda buat.
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/logging.logWriter"
4. Menyiapkan Cloud SQL
Jalankan perintah gcloud sql instances create untuk membuat instance Cloud SQL.
--database-version: Jenis dan versi mesin database. Jika tidak ditentukan, default API akan digunakan. Lihat dokumentasi versi database gcloud untuk melihat versi yang tersedia saat ini.--cpu: Jumlah inti yang diinginkan dalam mesin.--memory: Nilai bilangan bulat yang menunjukkan jumlah memori yang diinginkan dalam mesin. Unit ukuran harus ditentukan (misalnya, 3072 MB atau 9 GB). Jika tidak ada unit yang ditentukan, GB akan digunakan.--region: Lokasi regional instance (misalnya: us-central1, asia-east1, us-east1).--database-flags: Mengizinkan penyetelan flag. Dalam kasus ini, kita mengaktifkancloudsql.iam_authenticationagar Cloud Run dapat terhubung ke Cloud SQL menggunakan akun layanan yang kita buat sebelumnya.gcloud sql instances create quickstart-instance \ --database-version=POSTGRES_18 \ --tier=db-custom-1-3840 \ --region=us-central1 \ --edition=ENTERPRISE \ --database-flags=cloudsql.iam_authentication=on
Pemrosesan perintah ini dapat membutuhkan waktu beberapa menit.
Jalankan perintah gcloud sql databases create untuk membuat database Cloud SQL dalam quickstart-instance.
gcloud sql databases create quickstart_db \
--instance=quickstart-instance
Buat pengguna database PostgreSQL untuk akun layanan yang Anda buat sebelumnya guna mengakses database.
gcloud sql users create quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam \
--instance=quickstart-instance \
--type=cloud_iam_service_account \
--database-roles=postgres
Peringatan: Jangan gunakan --database-roles=postgres dalam aplikasi produksi. Kita menggunakannya untuk memberikan hak istimewa yang diperlukan untuk membuat dan menghapus tabel secara terprogram untuk kode di lab ini.
5. Menyiapkan Aplikasi
Siapkan aplikasi Node.js yang merespons permintaan HTTP.
- Di Cloud Shell, buat direktori baru bernama
helloworld, lalu beralihlah ke direktori tersebut:mkdir helloworld cd helloworld - Lakukan inisialisasi file
package.jsonsebagai modul.npm init -y npm pkg set type="module" npm pkg set main="index.mjs" npm pkg set scripts.start="node index.mjs" - Instal dependensi konektor Node.js Cloud SQL.
npm install @google-cloud/cloud-sql-connector - Instal
pguntuk berinteraksi dengan database PostgreSQL.npm install pg - Instal express untuk menerima permintaan http yang masuk.
npm install express - Buat file
index.mjsdengan kode aplikasi. Kode ini dapat:- Menerima permintaan HTTP
- Menghubungkan ke database
- Menyimpan waktu permintaan HTTP dalam database
- Menampilkan waktu lima permintaan terakhir
cat > index.mjs << "EOF" import express from 'express'; import pg from 'pg'; import {Connector} from '@google-cloud/cloud-sql-connector'; const {Pool} = pg; const connector = new Connector(); const clientOpts = await connector.getOptions({ instanceConnectionName: process.env.INSTANCE_CONNECTION_NAME, authType: 'IAM' }); const pool = new Pool({ ...clientOpts, user: process.env.DB_USER, database: process.env.DB_NAME }); const app = express(); app.get('/', async (req, res) => { await pool.query('INSERT INTO visits(created_at) VALUES(NOW())'); const {rows} = await pool.query('SELECT created_at FROM visits ORDER BY created_at DESC LIMIT 5'); console.table(rows); // prints the last 5 visits res.send(rows); }); const port = parseInt(process.env.PORT) || 8080; app.listen(port, async () => { console.log('process.env: ', process.env); await pool.query(`CREATE TABLE IF NOT EXISTS visits ( id SERIAL NOT NULL, created_at timestamp NOT NULL, PRIMARY KEY (id) );`); console.log(`helloworld: listening on port ${port}`); }); EOF
Kode ini menghasilkan server web dasar yang memantau port yang ditentukan oleh variabel lingkungan PORT. Aplikasi kini siap di-deploy.
6. Men-deploy Aplikasi Cloud Run
Jalankan perintah di bawah untuk men-deploy aplikasi Anda ke Cloud Run:
--region: Lokasi regional instance (misalnya: us-central1, asia-east1, us-east1).--source: Kode sumber yang akan di-deploy. Dalam hal ini,.merujuk ke kode sumber di folder saat inihelloworld.--set-env-vars: Menetapkan variabel lingkungan yang digunakan oleh aplikasi untuk mengarahkan aplikasi ke database Cloud SQL.--service-account: Mengikat deployment Cloud Run ke akun layanan dengan izin untuk terhubung ke database Cloud SQL yang dibuat di awal Codelab ini.--allow-unauthenticated: Mengizinkan permintaan yang tidak diautentikasi sehingga aplikasi dapat diakses dari internet.
gcloud run deploy helloworld \
--region=us-central1 \
--source=. \
--set-env-vars INSTANCE_CONNECTION_NAME="${GOOGLE_CLOUD_PROJECT}:us-central1:quickstart-instance" \
--set-env-vars DB_NAME="quickstart_db" \
--set-env-vars DB_USER="quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam" \
--service-account="quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
--allow-unauthenticated
Jika diminta, tekan y dan Enter untuk mengonfirmasi bahwa Anda ingin melanjutkan:
Do you want to continue (Y/n)? y
Setelah beberapa menit, aplikasi akan memberikan URL yang dapat Anda kunjungi.
Buka URL untuk melihat cara kerja aplikasi Anda. Setiap kali Anda membuka URL atau memuat ulang halaman, Anda akan melihat lima kunjungan terbaru yang ditampilkan sebagai JSON.
7. Selamat
Anda telah men-deploy aplikasi Node.js di Cloud Run yang dapat terhubung ke database PostgreSQL yang berjalan di Cloud SQL.
Yang telah kita bahas:
- Membuat database Cloud SQL untuk PostgreSQL
- Men-deploy aplikasi Node.js ke Cloud Run
- Menghubungkan aplikasi Anda ke Cloud SQL menggunakan Cloud SQL Node.js Connector
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource. Jika ingin menghapus seluruh project, Anda dapat menjalankan:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}