1. Panoramica
Il connettore Node.js Cloud SQL è il modo più semplice per connettere in modo sicuro l'applicazione Node.js al database Cloud SQL. Cloud Run è una piattaforma serverless completamente gestita che consente di eseguire container stateless richiamabili tramite richieste HTTP. Questo Codelab mostrerà come connettere un'applicazione Node.js su Cloud Run a un database Cloud SQL per PostgreSQL in modo sicuro con un service account utilizzando l'autenticazione IAM.
Cosa imparerai a fare
In questo lab imparerai a:
- Crea un'istanza Cloud SQL per il database PostgreSQL
- Esegui il deployment di un'applicazione Node.js in Cloud Run
- Connetti l'applicazione al database utilizzando la libreria del connettore Node.js di Cloud SQL
Prerequisiti
- Questo lab presuppone una certa familiarità con gli ambienti della console Cloud e di Cloud Shell.
2. Prima di iniziare
Configurazione del progetto Cloud
- Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un Account Google, devi crearne uno.



- Il nome del progetto è il nome visualizzato per i partecipanti a questo progetto. È una stringa di caratteri non utilizzata dalle API di Google. Puoi aggiornarlo in qualsiasi momento.
- L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo l'impostazione). La console Cloud genera automaticamente una stringa univoca, di solito non ti interessa di cosa si tratta. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (in genere è identificato come
PROJECT_ID). Se non ti piace l'ID generato, puoi generarne un altro casuale. In alternativa, puoi provare a crearne uno e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimarrà per tutta la durata del progetto. - Per tua informazione, esiste un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
- Successivamente, devi abilitare la fatturazione in Cloud Console per utilizzare le risorse/API Cloud. L'esecuzione di questo codelab non dovrebbe costare molto, se non nulla. Per arrestare le risorse in modo da non incorrere in costi di fatturazione al termine di questo tutorial, puoi eliminare le risorse che hai creato o l'intero progetto. I nuovi utenti di Google Cloud possono beneficiare del programma prova senza costi di 300$.
Configurazione dell'ambiente
Attiva Cloud Shell facendo clic sull'icona a destra della barra di ricerca.

Da Cloud Shell, abilita le API:
gcloud services enable compute.googleapis.com sqladmin.googleapis.com \
run.googleapis.com artifactregistry.googleapis.com \
cloudbuild.googleapis.com servicenetworking.googleapis.com
Se ti viene richiesto di concedere l'autorizzazione, fai clic su "Autorizza" per continuare.

Il completamento di questo comando potrebbe richiedere alcuni minuti, ma alla fine dovrebbe essere visualizzato un messaggio di operazione riuscita simile a questo:
Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.
3. Configurare un service account
Crea e configura un service account Google Cloud da utilizzare con Cloud Run in modo che disponga delle autorizzazioni corrette per connettersi a Cloud SQL.
- Esegui il comando
gcloud iam service-accounts createcome segue per creare un nuovo service account:gcloud iam service-accounts create quickstart-service-account \ --display-name="Quickstart Service Account" - Esegui il comando gcloud projects add-iam-policy-binding come segue per aggiungere il ruolo Client Cloud SQL al service account Google Cloud appena creato. In Cloud Shell, l'espressione
${GOOGLE_CLOUD_PROJECT}verrà sostituita dal nome del tuo progetto. Puoi anche eseguire questa sostituzione manualmente se ti senti più a tuo agio.gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/cloudsql.client" - Esegui il comando gcloud projects add-iam-policy-binding nel modo seguente per aggiungere il ruolo Utente istanza Cloud SQL al service account Google Cloud appena creato.
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/cloudsql.instanceUser" - Esegui il comando gcloud projects add-iam-policy-binding come segue per aggiungere il ruolo Scrittore log al service account Google Cloud appena creato.
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. Configura Cloud SQL
Esegui il comando gcloud sql instances create per creare un'istanza Cloud SQL.
--database-version: il tipo e la versione del motore del database. Se non viene specificato, viene utilizzato il valore predefinito dell'API. Consulta la documentazione sulle versioni del database gcloud per visualizzare le versioni attualmente disponibili.--cpu: il numero di core desiderato nella macchina.--memory: valore intero che indica la quantità di memoria desiderata nella macchina. Deve essere fornita un'unità di misura delle dimensioni (ad esempio 3072 MB o 9 GB). Se non vengono specificate unità, viene utilizzato il GB.--region: posizione regionale dell'istanza (ad esempio: us-central1, asia-east1, us-east1).--database-flags: consente di impostare i flag. In questo caso, attiviamocloudsql.iam_authenticationper consentire a Cloud Run di connettersi a Cloud SQL utilizzando il service account creato in precedenza.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
Il completamento di questo comando potrebbe richiedere alcuni minuti.
Esegui il comando gcloud sql databases create per creare un database Cloud SQL all'interno di quickstart-instance.
gcloud sql databases create quickstart_db \
--instance=quickstart-instance
Crea un utente del database PostgreSQL per l'account di servizio creato in precedenza per accedere al database.
gcloud sql users create quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam \
--instance=quickstart-instance \
--type=cloud_iam_service_account \
--database-roles=postgres
Avviso: non utilizzare --database-roles=postgres nelle applicazioni di produzione. Lo utilizziamo per fornire i privilegi necessari per creare ed eliminare tabelle a livello di programmazione per il codice in questo lab.
5. Prepara l'applicazione
Prepara un'applicazione Node.js che risponda alle richieste HTTP.
- In Cloud Shell crea una nuova directory denominata
helloworld, quindi passa a quella directory:mkdir helloworld cd helloworld - Inizializza un file
package.jsoncome modulo.npm init -y npm pkg set type="module" npm pkg set main="index.mjs" npm pkg set scripts.start="node index.mjs" - Installa la dipendenza del connettore Node.js Cloud SQL.
npm install @google-cloud/cloud-sql-connector - Installa
pgper interagire con il database PostgreSQL.npm install pg - Installa express per accettare le richieste HTTP in entrata.
npm install express - Crea un file
index.mjscon il codice dell'applicazione. Questo codice è in grado di:- Accetta richieste HTTP
- Connettiti al database
- Memorizzare l'ora della richiesta HTTP nel database
- Restituisce gli orari delle ultime cinque richieste
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
Questo codice crea un server web di base in ascolto sulla porta definita dalla variabile di ambiente PORT. L'applicazione è ora pronta per il deployment.
6. Esegui il deployment dell'applicazione Cloud Run
Esegui il comando riportato di seguito per eseguire il deployment dell'applicazione su Cloud Run:
--region: posizione regionale dell'istanza (ad esempio: us-central1, asia-east1, us-east1).--source: il codice sorgente da implementare. In questo caso,.si riferisce al codice sorgente nella cartella correntehelloworld.--set-env-vars: imposta le variabili di ambiente utilizzate dall'applicazione per indirizzarla al database Cloud SQL.--service-account: collega il deployment di Cloud Run al service account con le autorizzazioni per connettersi al database Cloud SQL creato all'inizio di questo codelab.--allow-unauthenticated: consente le richieste non autenticate in modo che l'applicazione sia accessibile da 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
Se richiesto, premi y e Enter per confermare che vuoi continuare:
Do you want to continue (Y/n)? y
Dopo qualche minuto, l'applicazione dovrebbe fornire un URL da visitare.
Vai all'URL per vedere la tua applicazione in azione. Ogni volta che visiti l'URL o aggiorni la pagina, vedrai le cinque visite più recenti restituite in formato JSON.
7. Complimenti
Hai eseguito il deployment di un'applicazione Node.js su Cloud Run in grado di connettersi a un database PostgreSQL in esecuzione su Cloud SQL.
Argomenti trattati:
- Creazione di un database Cloud SQL per PostgreSQL
- Deployment di un'applicazione Node.js in Cloud Run
- Connessione dell'applicazione a Cloud SQL utilizzando il connettore Node.js Cloud SQL
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse. Se vuoi eliminare l'intero progetto, puoi eseguire:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}