Cara menghubungkan aplikasi Node.js di Cloud Run ke database Cloud SQL untuk PostgreSQL

1. Ringkasan

Konektor Node.js Cloud SQL adalah cara termudah untuk menghubungkan aplikasi Node.js ke database Cloud SQL Anda dengan aman. Cloud Run adalah platform serverless yang terkelola sepenuhnya yang memungkinkan Anda untuk 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

  • Lab ini mengasumsikan Anda telah memahami lingkungan Cloud Console dan Cloud Shell.

2. Sebelum memulai

Penyiapan Project Cloud

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.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 peduli tentang apa itu. Di sebagian besar codelab, Anda harus mereferensikan Project ID (biasanya diidentifikasi sebagai PROJECT_ID). Jika Anda tidak menyukai ID yang dihasilkan, 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 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.
  1. 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. Untuk 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.

ecdc43ada29e91b.png

Dari Cloud Shell, aktifkan API:

gcloud services enable compute.googleapis.com sqladmin.googleapis.com \
  run.googleapis.com artifactregistry.googleapis.com \
  cloudbuild.googleapis.com servicenetworking.googleapis.com

Jika diminta untuk memberi otorisasi, klik "Authorize" untuk melanjutkan.

6356559df3eccdda.pngS

Perintah ini mungkin memerlukan waktu beberapa menit untuk diselesaikan, tetapi pada akhirnya akan menghasilkan pesan seperti berikut yang akan berhasil:

Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.

3. Menyiapkan Akun Layanan

Membuat dan mengonfigurasi akun layanan Google Cloud yang akan digunakan oleh Cloud Run agar memiliki izin yang benar untuk terhubung ke Cloud SQL.

  1. Jalankan perintah gcloud iam service-accounts create sebagai berikut untuk membuat akun layanan baru:
    gcloud iam service-accounts create quickstart-service-account \
      --display-name="Quickstart Service Account"
    
  2. 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 dengan itu.
    gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \
      --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \
      --role="roles/cloudsql.client"
    
  3. 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"
    
  4. 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 mengetahui versi yang tersedia saat ini.
  • –cpu: Jumlah core yang diinginkan dalam mesin.
  • –memory: Nilai bilangan bulat yang menunjukkan banyaknya memori yang diinginkan dalam mesin. Unit ukuran harus diberikan (misalnya, 3072 MB atau 9 GB). Jika tidak ada unit yang ditentukan, GB akan diasumsikan.
  • –region: Lokasi regional instance (misalnya: us-central1, asia-east1, us-east1).
  • –database-flags: Memungkinkan penetapan flag. Dalam hal ini, kita mengaktifkan cloudsql.iam_authentication agar Cloud Run dapat terhubung ke Cloud SQL menggunakan akun layanan yang kita buat sebelumnya.
    gcloud sql instances create quickstart-instance \
      --database-version=POSTGRES_14 \
      --cpu=1 \
      --memory=4GB \
      --region=us-central1 \
      --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 agar dapat mengakses database.

gcloud sql users create quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam \
  --instance=quickstart-instance \
  --type=cloud_iam_service_account

5. Siapkan Permohonan

Menyiapkan aplikasi Node.js yang merespons permintaan HTTP.

  1. Di Cloud Shell, buat direktori baru bernama helloworld, lalu beralihlah ke direktori tersebut:
    mkdir helloworld
    cd helloworld
    
  2. Lakukan inisialisasi file package.json sebagai modul.
    npm init -y
    npm pkg set type="module"
    npm pkg set main="index.mjs"
    npm pkg set scripts.start="node index.mjs"
    
  3. Instal dependensi konektor Node.js Cloud SQL.
    npm install @google-cloud/cloud-sql-connector
    
  4. Instal pg untuk berinteraksi dengan database PostgreSQL.
    npm install pg
    
  5. Instal Express untuk menerima permintaan http yang masuk.
    npm install express
    
  6. Buat file index.mjs dengan kode aplikasi. Kode ini dapat:
    • Menerima permintaan HTTP
    • Menghubungkan ke database
    • Menyimpan waktu permintaan HTTP dalam database
    • Menampilkan waktu dari lima permintaan terakhir
    Jalankan perintah berikut di Cloud Shell:
    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 akan 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 ini untuk men-deploy aplikasi 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 pada kode sumber dalam folder helloworld saat ini.
  • –set-env-vars: Menetapkan variabel lingkungan yang digunakan aplikasi untuk mengarahkan aplikasi ke database Cloud SQL.
  • –service-account: Mengaitkan 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 menyediakan URL yang bisa Anda kunjungi.

Buka URL untuk melihat cara kerja aplikasi Anda. Setiap kali mengunjungi URL atau memuat ulang halaman, Anda akan melihat lima kunjungan terakhir 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 ke Cloud SQL menggunakan Konektor Node.js Cloud SQL

Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource, atau simpan project dan hapus resource satu per satu. Jika ingin menghapus seluruh project, Anda dapat menjalankan:

gcloud projects delete ${GOOGLE_CLOUD_PROJECT}