1. Panoramica
Cloud Run è una piattaforma serverless completamente gestita che consente di eseguire container stateless richiamabili tramite richieste HTTP. Questo Codelab dimostrerà come connettere un'applicazione Node.js su Cloud Run a un database Cloud SQL per PostgreSQL.
Cosa imparerai a fare
In questo lab, imparerai a:
- Crea un'istanza Cloud SQL per PostgreSQL
- Esegui il deployment di un'applicazione su Cloud Run che si connette al tuo database Cloud SQL
Cosa imparerai a fare
- Crea un'istanza Cloud SQL per PostgreSQL
- Esegui il deployment di un'applicazione su Cloud Run che si connette al tuo database Cloud SQL
2. Prerequisiti
- Se non hai ancora un Account Google, devi crearne uno.
- Utilizzi un account personale anziché un account di lavoro o della scuola. Gli account di lavoro e della scuola potrebbero avere limitazioni che ti impediscono di attivare le API necessarie per questo lab.
3. Configurazione del progetto
- Accedi alla console Google Cloud.
- Attiva la fatturazione in Cloud Console.
- Il completamento di questo lab dovrebbe costare meno di 1 $in risorse Cloud.
- Per eliminare le risorse ed evitare ulteriori addebiti, puoi seguire i passaggi alla fine di questo lab.
- I nuovi utenti sono idonei per la prova senza costi di 300$.
- Crea un nuovo progetto o scegli di riutilizzare un progetto esistente.
4. Apri editor di Cloud Shell
- Vai a Cloud Shell Editor.
- Se il terminale non viene visualizzato nella parte inferiore dello schermo, aprilo:
- Fai clic sul menu a tre linee
.
- Fai clic su Terminale.
- Fai clic su Nuovo terminale
.
- Fai clic sul menu a tre linee
- Nel terminale, imposta il progetto con questo comando:
- Formato:
gcloud config set project [PROJECT_ID]
- Esempio:
gcloud config set project lab-project-id-example
- Se non ricordi l'ID progetto:
- Puoi elencare tutti gli ID progetto con:
gcloud projects list | awk '/PROJECT_ID/{print $2}'
- Puoi elencare tutti gli ID progetto con:
- Formato:
- Se ti viene chiesto di concedere l'autorizzazione, fai clic su Autorizza per continuare.
- Dovresti vedere questo messaggio:
Se vedi unUpdated property [core/project].
WARNING
e ti viene chiestoDo you want to continue (Y/N)?
, è probabile che tu abbia inserito l'ID progetto in modo errato. PremiN
, premiEnter
e prova a eseguire di nuovo il comandogcloud config set project
.
5. Abilita API
Nel terminale, abilita le API:
gcloud services enable \
compute.googleapis.com \
sqladmin.googleapis.com \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
networkconnectivity.googleapis.com \
servicenetworking.googleapis.com \
cloudaicompanion.googleapis.com
Se ti viene chiesto 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-73d90d00-47ee-447a-b600" finished successfully.
6. Configurare un account di servizio
Crea e configura un account di servizio Google Cloud da utilizzare da Cloud Run in modo che disponga delle autorizzazioni corrette per connettersi a Cloud SQL.
- Esegui il comando
gcloud iam service-accounts create
come segue per creare un nuovo account di servizio:gcloud iam service-accounts create quickstart-service-account \ --display-name="Quickstart Service Account"
- Esegui il comando gcloud projects add-iam-policy-binding come indicato di seguito per aggiungere il ruolo Autore log all'account di servizio 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"
7. Crea un database Cloud SQL
- Crea un criterio di connessione dei servizi per consentire la connettività di rete da Cloud Run a Cloud SQL con Private Service Connect
gcloud network-connectivity service-connection-policies create quickstart-policy \ --network=default \ --project=${GOOGLE_CLOUD_PROJECT} \ --region=us-central1 \ --service-class=google-cloud-sql \ --subnets=https://www.googleapis.com/compute/v1/projects/${GOOGLE_CLOUD_PROJECT}/regions/us-central1/subnetworks/default
- Genera una password univoca per il database
export DB_PASSWORD=$(openssl rand -base64 20)
- Esegui il comando
gcloud sql instances create
per creare un'istanza Cloud SQLgcloud sql instances create quickstart-instance \ --project=${GOOGLE_CLOUD_PROJECT} \ --root-password=${DB_PASSWORD} \ --database-version=POSTGRES_17 \ --tier=db-perf-optimized-N-2 \ --region=us-central1 \ --ssl-mode=ENCRYPTED_ONLY \ --no-assign-ip \ --enable-private-service-connect \ --psc-auto-connections=network=projects/${GOOGLE_CLOUD_PROJECT}/global/networks/default
Il completamento di questo comando potrebbe richiedere alcuni minuti.
- Esegui il comando
gcloud sql databases create
per creare un database Cloud SQL all'interno diquickstart-instance
.gcloud sql databases create quickstart_db \ --instance=quickstart-instance
8. Preparare la richiesta
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.json
come modulo.npm init -y npm pkg set type="module" npm pkg set main="index.mjs" npm pkg set scripts.start="node index.mjs"
- Installa
pg
per interagire con il database PostgreSQL.npm install pg
- Installa Express per accettare le richieste HTTP in entrata.
npm install express
- Crea un file
index.mjs
con il codice dell'applicazione. Questo codice è in grado di:- Accetta le richieste HTTP
- Connettiti al database
- Memorizza l'ora della richiesta HTTP nel database
- Restituisce le ore delle ultime cinque richieste
cat > index.mjs << "EOF" import express from 'express'; import pg from 'pg'; const { Pool } = pg; const pool = new Pool({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, 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
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.
9. Esegui il deployment dell'applicazione in Cloud Run
- Esegui il comando seguente per eseguire il deployment dell'applicazione in 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
- Se richiesto, premi
Y
eEnter
per confermare che vuoi continuare:Do you want to continue (Y/n)? Y
Dopo alcuni minuti, l'applicazione dovrebbe fornire un URL da visitare.
Vai all'URL per vedere l'applicazione in azione. Ogni volta che visiti l'URL o aggiorni la pagina, vedrai le cinque visite più recenti restituite come JSON.
10. Complimenti
In questo lab hai imparato a:
- Crea un'istanza Cloud SQL per PostgreSQL
- Esegui il deployment di un'applicazione su Cloud Run che si connette al tuo database Cloud SQL
Esegui la pulizia
Cloud SQL non dispone di un livello senza costi e ti verranno addebitati costi se continui a utilizzarlo. Puoi eliminare il tuo progetto Cloud per evitare di incorrere in addebiti aggiuntivi.
Sebbene non siano previsti addebiti per Cloud Run quando il servizio non è in uso, ti potrebbero comunque essere addebitati i costi di archiviazione dell'immagine container in Artifact Registry. L'eliminazione del progetto Cloud interrompe la fatturazione per tutte le risorse utilizzate al suo interno.
Se vuoi, elimina il progetto:
gcloud projects delete $GOOGLE_CLOUD_PROJECT
Ti consigliamo inoltre di eliminare le risorse non necessarie dal disco CloudShell. Puoi:
- Elimina la directory del progetto codelab:
rm -rf ~/task-app
- Attenzione. Questa azione non può essere annullata. Se vuoi eliminare tutto su Cloud Shell per liberare spazio, puoi eliminare l'intera home directory. Assicurati che tutto ciò che vuoi conservare sia salvato altrove.
sudo rm -rf $HOME
Continua a imparare
- Esegui il deployment di un'applicazione full stack Next.js su Cloud Run con Cloud SQL per PostgreSQL utilizzando il connettore Node.js di Cloud SQL
- Esegui il deployment di un'applicazione Angular full stack su Cloud Run con Cloud SQL per PostgreSQL utilizzando il connettore Node.js di Cloud SQL
- Esegui il deployment di un'applicazione Angular full stack in Cloud Run con Firestore utilizzando l'SDK Admin Node.js
- Esegui il deployment di un'applicazione full stack Next.js in Cloud Run con Firestore utilizzando l'SDK Node.js Admin