1. Panoramica
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 AlloyDB in modo sicuro con un service account utilizzando l'autenticazione IAM.
Cosa imparerai a fare
In questo lab, imparerai a:
- Crea un'istanza AlloyDB (configurata per utilizzare Private Service Connect)
- Esegui il deployment di un'applicazione in Cloud Run che si connette all'istanza AlloyDB
2. Prerequisiti
- Se non hai ancora un Account Google, devi crearne uno.
- Utilizza un account personale anziché un account di lavoro o della scuola. Gli account di lavoro e della scuola potrebbero avere limitazioni che impediscono l'attivazione delle API necessarie per questo lab.
3. Configurazione del progetto
- Accedi alla console Google Cloud.
- Abilita la fatturazione nella console Cloud.
- Il completamento di questo lab dovrebbe costare meno di 1 $in risorse cloud.
- Per evitare ulteriori addebiti, puoi seguire i passaggi alla fine di questo lab per eliminare le risorse.
- I nuovi utenti hanno diritto alla prova senza costi di 300$.
- Crea un nuovo progetto o scegli di riutilizzarne uno esistente.
4. Apri editor di Cloud Shell
- Vai all'editor di Cloud Shell.
- 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 tuo 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 richiesto di concedere l'autorizzazione, fai clic su Autorizza per continuare.

- Dovresti visualizzare questo messaggio:
Se visualizzi unUpdated property [core/project].
WARNINGe ti viene chiestoDo you want to continue (Y/N)?, probabilmente hai inserito l'ID progetto in modo errato. PremiN, premiEntere prova a eseguire di nuovo il comandogcloud config set project.
5. Abilita API
Nel terminale, abilita le API:
gcloud services enable \
compute.googleapis.com \
alloydb.googleapis.com \
run.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
cloudaicompanion.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-73d90d00-47ee-447a-b600" finished successfully.
6. 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 ad AlloyDB.
- 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 nel modo seguente per aggiungere il ruolo Utente database AlloyDB al service account Google Cloud che hai appena creato.
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/alloydb.databaseUser" - Esegui il comando gcloud projects add-iam-policy-binding nel modo seguente per aggiungere il ruolo Consumer servizio di utilizzo 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/serviceusage.serviceUsageConsumer" - 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"
7. Crea database AlloyDB
- Esegui il comando
gcloud alloydb clusters createper creare un'istanza 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
Il completamento di questo comando potrebbe richiedere alcuni minuti.
- Esegui il comando
gcloud alloydb instances createper creare un'istanza 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 - Esegui il comando
gcloud alloydb instances describeper ottenere il link al collegamento al servizio PSC ed esportarlo in una variabileexport 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=defaultgcloud compute forwarding-rules create quickstart-endpoint \ --region=us-central1 \ --network=default \ --address=quickstart-address \ --target-service-attachment=${SERVICE_ATTACHMENT}
Crea un utente del database PostgreSQL per l'account di servizio creato in precedenza per accedere al database.
gcloud alloydb users create quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam \
--cluster=quickstart-cluster \
--region=us-central1 \
--type=IAM_BASED \
--superuser=true
8. 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 libreria Google Cloud Auth.
npm install google-auth-library - 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'; 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
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 Cloud Run
- Esegui il comando riportato di seguito per eseguire il deployment dell'applicazione su 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
YeEnterper 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.
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.
10. Complimenti
In questo lab hai imparato a:
- Crea un'istanza AlloyDB (configurata per utilizzare Private Service Connect)
- Esegui il deployment di un'applicazione in Cloud Run che si connette all'istanza AlloyDB
Esegui la pulizia
Cloud SQL non ha un livello senza costi e ti addebiterà un costo se continui a utilizzarlo. Puoi eliminare il tuo progetto Cloud per evitare 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
Potresti anche voler eliminare le risorse non necessarie dal disco Cloud Shell. Puoi:
- Elimina la directory del progetto codelab:
rm -rf ~/task-app - Attenzione. La prossima azione non può essere annullata. Se vuoi eliminare tutti i contenuti di Cloud Shell per liberare spazio, puoi eliminare l'intera home directory. Fai attenzione che tutto ciò che vuoi conservare sia salvato altrove.
sudo rm -rf $HOME
Continua a imparare
- Esegui il deployment di un'applicazione Next.js full-stack su Cloud Run con Cloud SQL per PostgreSQL utilizzando il connettore Node.js Cloud SQL
- Esegui il deployment di un'applicazione Angular full-stack su Cloud Run con Cloud SQL per PostgreSQL utilizzando il connettore Node.js Cloud SQL
- Esegui il deployment di un'applicazione Angular full-stack su Cloud Run con Firestore utilizzando l'SDK Node.js Admin
- Esegui il deployment di un'applicazione Next.js full-stack su Cloud Run con Firestore utilizzando l'SDK Node.js Admin