1. Ringkasan
Cloud Run adalah platform serverless yang terkelola sepenuhnya dan memungkinkan Anda menjalankan container stateless yang dapat dipanggil melalui permintaan HTTP. Codelab ini akan menunjukkan cara menghubungkan aplikasi Node.js di Cloud Run ke AlloyDB dengan aman menggunakan akun layanan menggunakan Autentikasi IAM.
Yang akan Anda pelajari
Di lab ini, Anda akan mempelajari cara:
- Membuat instance AlloyDB (dikonfigurasi untuk menggunakan Private Service Connect)
- Men-deploy aplikasi ke Cloud Run yang terhubung ke instance AlloyDB Anda
- Menggunakan Gemini Code Assist untuk menambahkan fungsi ke aplikasi Anda
2. Prasyarat
- Jika belum memiliki Akun Google, Anda harus membuat Akun Google.
- Gunakan akun pribadi, bukan akun kantor atau sekolah. Akun kerja dan sekolah mungkin memiliki batasan yang mencegah Anda mengaktifkan API yang diperlukan untuk lab ini.
3. Penyiapan project
- Login ke Konsol Google Cloud.
- Aktifkan penagihan di Konsol Cloud.
- Menyelesaikan lab ini akan menghabiskan biaya kurang dari $1 USD untuk resource Cloud.
- Anda dapat mengikuti langkah-langkah di akhir lab ini untuk menghapus resource guna menghindari tagihan lebih lanjut.
- Pengguna baru memenuhi syarat untuk Uji Coba Gratis senilai$300 USD.
- Buat project baru atau pilih untuk menggunakan kembali project yang ada.
4. Membuka Cloud Shell Editor
- Buka Cloud Shell Editor
- Jika terminal tidak muncul di bagian bawah layar, buka terminal:
- Klik menu tiga garis
- Klik Terminal
- Klik New Terminal
- Klik menu tiga garis
- Di terminal, tetapkan project Anda dengan perintah ini:
- Format:
gcloud config set project [PROJECT_ID]
- Contoh:
gcloud config set project lab-project-id-example
- Jika Anda tidak dapat mengingat project ID:
- Anda dapat mencantumkan semua project ID dengan:
gcloud projects list | awk '/PROJECT_ID/{print $2}'
- Anda dapat mencantumkan semua project ID dengan:
- Format:
- Jika diminta untuk memberikan otorisasi, klik Authorize untuk melanjutkan.
- Anda akan melihat pesan ini:
Jika Anda melihatUpdated property [core/project].
WARNING
dan ditanyaDo you want to continue (Y/N)?
, berarti Anda mungkin salah memasukkan project ID. TekanN
, tekanEnter
, lalu coba jalankan kembali perintahgcloud config set project
.
5. Mengaktifkan API
Di terminal, aktifkan API:
gcloud services enable \
compute.googleapis.com \
alloydb.googleapis.com \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
cloudaicompanion.googleapis.com
Jika diminta untuk memberikan otorisasi, klik Authorize untuk melanjutkan.
Pemrosesan perintah ini mungkin memerlukan waktu beberapa menit, tetapi pada akhirnya akan menampilkan pesan berhasil seperti ini:
Operation "operations/acf.p2-73d90d00-47ee-447a-b600" finished successfully.
6. 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 AlloyDB.
- 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"
- Jalankan perintah gcloud projects add-iam-policy-binding sebagai berikut untuk menambahkan peran AlloyDB Database 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/alloydb.databaseUser"
- Jalankan perintah gcloud projects add-iam-policy-binding sebagai berikut untuk menambahkan peran Service Usage Consumer 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/serviceusage.serviceUsageConsumer"
- 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"
7. Membuat Instance AlloyDB
- Jalankan perintah
gcloud alloydb clusters create
untuk membuat instance Cloud SQLgcloud alloydb clusters create quickstart-cluster \ --password=$(openssl rand -base64 20) \ --region=us-central1 \ --project=${GOOGLE_CLOUD_PROJECT} \ --enable-private-service-connect \ --database-version=POSTGRES_16
Pemrosesan perintah ini dapat memerlukan waktu beberapa menit.
- Jalankan perintah
gcloud alloydb instances create
untuk membuat instance Cloud SQLgcloud alloydb instances create quickstart-instance \ --project=${GOOGLE_CLOUD_PROJECT} \ --instance-type=PRIMARY \ --cpu-count=2 \ --region=us-central1 \ --cluster=quickstart-cluster \ --allowed-psc-projects=${GOOGLE_CLOUD_PROJECT} \ --database-flags=alloydb.iam_authentication=on
- Jalankan perintah
gcloud alloydb instances describe
untuk mendapatkan link lampiran layanan PSC dan mengekspornya ke variabelexport SERVICE_ATTACHMENT=$(gcloud alloydb instances describe quickstart-instance \ --cluster=quickstart-cluster --region=us-central1 \ --format="value(pscInstanceConfig.serviceAttachmentLink)")
gcloud compute addresses create quickstart-address \ --region=us-central1 \ --subnet=default
gcloud compute forwarding-rules create quickstart-endpoint \ --region=us-central1 \ --network=default \ --address=quickstart-address \ --target-service-attachment=${SERVICE_ATTACHMENT}
Buat pengguna database PostgreSQL untuk akun layanan yang Anda buat sebelumnya untuk mengakses database.
gcloud alloydb users create quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam \
--cluster=quickstart-cluster \
--region=us-central1 \
--type=IAM_BASED \
--superuser=true
8. 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.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"
- Instal library Google Cloud Auth.
npm install google-auth-library
- Instal
pg
untuk berinteraksi dengan database PostgreSQL.npm install pg
- Instal express untuk menerima permintaan http yang masuk.
npm install express
- Buat file
index.mjs
dengan 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'; const { Pool } = pg; import {GoogleAuth} from 'google-auth-library'; const auth = new GoogleAuth({ scopes: ['https://www.googleapis.com/auth/alloydb.login'], }); const pool = new Pool({ host: process.env.DB_HOST, user: process.env.DB_USER, password: async () => { return await auth.getAccessToken(); }, database: process.env.DB_NAME, ssl: { require: true, rejectUnauthorized: false, // required for self-signed certs // https://node-postgres.com/features/ssl#self-signed-cert } }); 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.
9. Men-deploy Aplikasi Cloud Run
- Jalankan perintah gcloud projects add-iam-policy-binding sebagai berikut untuk menambahkan peran Network User ke akun layanan Cloud Run untuk layanan Cloud Run yang akan Anda buat.
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member "serviceAccount:service-$(gcloud projects describe ${GOOGLE_CLOUD_PROJECT} --format="value(projectNumber)")@serverless-robot-prod.iam.gserviceaccount.com" \ --role "roles/compute.networkUser"
- Jalankan perintah di bawah ini untuk men-deploy aplikasi Anda ke Cloud Run:
gcloud run deploy helloworld \ --region=us-central1 \ --source=. \ --set-env-vars DB_NAME="quickstart_db" \ --set-env-vars DB_USER="postgres" \ --set-env-vars DB_PASSWORD=${DB_PASSWORD} \ --set-env-vars DB_HOST="$(gcloud sql instances describe quickstart-instance --project=${GOOGLE_CLOUD_PROJECT} --format='value(settings.ipConfiguration.pscConfig.pscAutoConnections.ipAddress)')" \ --service-account="quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --network=default \ --subnet=default \ --allow-unauthenticated
- Jika diminta, tekan
Y
danEnter
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 mengunjungi URL atau memuat ulang halaman, Anda akan melihat lima kunjungan terbaru yang ditampilkan sebagai JSON.
Setelah beberapa menit, aplikasi akan memberikan URL yang dapat Anda kunjungi.
Buka URL untuk melihat cara kerja aplikasi Anda. Setiap kali Anda mengunjungi URL atau memuat ulang halaman, Anda akan melihat lima kunjungan terbaru yang ditampilkan sebagai JSON.
10. Selamat
Dalam lab ini, Anda telah mempelajari cara:
- Membuat instance AlloyDB (dikonfigurasi untuk menggunakan Private Service Connect)
- Men-deploy aplikasi ke Cloud Run yang terhubung ke instance AlloyDB Anda
- Menggunakan Gemini Code Assist untuk menambahkan fungsi ke aplikasi Anda
Pembersihan
Agar tidak dikenai 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}