1. Présentation
Le connecteur Node.js Cloud SQL est le moyen le plus simple de connecter de façon sécurisée votre application Node.js à votre base de données Cloud SQL. Cloud Run est une plate-forme sans serveur entièrement gérée qui vous permet d'exécuter des conteneurs sans état accessibles via des requêtes HTTP. Dans cet atelier de programmation, vous allez découvrir comment connecter de façon sécurisée une application Node.js sur Cloud Run à une base de données Cloud SQL pour PostgreSQL à l'aide d'un compte de service à l'aide de l'authentification IAM.
Objectifs de l'atelier
Dans cet atelier, vous allez apprendre à effectuer les tâches suivantes :
- Créer une instance Cloud SQL pour une base de données PostgreSQL
- Déployer une application Node.js sur Cloud Run
- Connecter votre application à votre base de données à l'aide de la bibliothèque de connecteurs Cloud SQL pour Node.js
Prérequis
- Pour cet atelier, nous partons du principe que vous connaissez la console Cloud et les environnements Cloud Shell.
2. Avant de commencer
Configuration du projet Cloud
- Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. Si vous n'avez pas encore de compte Google, vous devez en créer un.
- Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères non utilisée par les API Google. Vous pouvez le modifier à tout moment.
- L'ID du projet est unique parmi tous les projets Google Cloud et non modifiable une fois défini. La console Cloud génère automatiquement une chaîne unique. généralement, vous ne vous souciez
pas de ce que c’est. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (il est généralement identifié comme
PROJECT_ID
). Si l'ID généré ne vous convient pas, vous pouvez en générer un autre au hasard. Vous pouvez également essayer la vôtre pour voir si elle est disponible. Il ne peut pas être modifié après cette étape et restera actif pendant toute la durée du projet. - Pour votre information, il existe une troisième valeur, le numéro de projet, utilisé par certaines API. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
- Vous devez ensuite activer la facturation dans la console Cloud pour utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour arrêter les ressources afin d'éviter que des frais ne vous soient facturés au-delà de ce tutoriel, vous pouvez supprimer les ressources que vous avez créées ou l'ensemble du projet. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai gratuit pour bénéficier d'un crédit de 300 $.
Configuration de l'environnement
Activez Cloud Shell en cliquant sur l'icône située à droite de la barre de recherche.
Dans Cloud Shell, activez les API:
gcloud services enable compute.googleapis.com sqladmin.googleapis.com \
run.googleapis.com artifactregistry.googleapis.com \
cloudbuild.googleapis.com servicenetworking.googleapis.com
Si vous êtes invité à donner votre autorisation, cliquez sur "Autoriser". pour continuer.
L'exécution de cette commande peut prendre quelques minutes, mais elle devrait générer un message de réussite semblable à celui-ci:
Operation "operations/acf.p2-327036483151-73d90d00-47ee-447a-b600-a6badf0eceae" finished successfully.
3. Configurer un compte de service
Créez et configurez un compte de service Google Cloud qui sera utilisé par Cloud Run afin qu'il dispose des autorisations nécessaires pour se connecter à Cloud SQL.
- Exécutez la commande
gcloud iam service-accounts create
comme suit pour créer un compte de service:gcloud iam service-accounts create quickstart-service-account \ --display-name="Quickstart Service Account"
- Exécutez la commande gcloud projects add-iam-policy-binding comme suit pour ajouter le rôle Client Cloud SQL au compte de service Google Cloud que vous venez de créer. Dans Cloud Shell, l'expression
${GOOGLE_CLOUD_PROJECT}
sera remplacée par le nom de votre projet. Vous pouvez également effectuer ce remplacement manuellement si vous vous sentez plus à l'aise.gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/cloudsql.client"
- Exécutez la commande gcloud projects add-iam-policy-binding comme suit pour ajouter le rôle Utilisateur d'instance Cloud SQL au compte de service Google Cloud que vous venez de créer.
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member="serviceAccount:quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role="roles/cloudsql.instanceUser"
- Exécutez la commande gcloud projects add-iam-policy-binding comme suit pour ajouter le rôle Rédacteur de journaux au compte de service Google Cloud que vous venez de créer.
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. Configurer Cloud SQL
Exécutez la commande gcloud sql instances create
pour créer une instance Cloud SQL.
- –database-version: type et version du moteur de la base de données. Si aucune valeur n'est spécifiée, la valeur par défaut de l'API est utilisée. Reportez-vous à la documentation sur les versions de base de données gcloud pour connaître les versions actuellement disponibles.
- –cpu: nombre de cœurs souhaité dans la machine
- –memory: nombre entier indiquant la quantité de mémoire souhaitée dans la machine. Vous devez indiquer une unité de taille (par exemple, 3 072 Mo ou 9 Go). Si aucune unité n'est spécifiée, la valeur en Go est utilisée par défaut.
- –region: emplacement régional de l'instance (par exemple: us-central1, asia-east1, us-east1)
- –database-flags: permet de définir des indicateurs. Dans ce cas, nous activons
cloudsql.iam_authentication
pour permettre à Cloud Run de se connecter à Cloud SQL à l'aide du compte de service que nous avons créé précédemment.gcloud sql instances create quickstart-instance \ --database-version=POSTGRES_14 \ --cpu=1 \ --memory=4GB \ --region=us-central1 \ --database-flags=cloudsql.iam_authentication=on
L'exécution de cette commande peut prendre quelques minutes.
Exécutez la commande gcloud sql databases create
pour créer une base de données Cloud SQL dans quickstart-instance
.
gcloud sql databases create quickstart_db \
--instance=quickstart-instance
Créez un utilisateur de base de données PostgreSQL pour le compte de service que vous avez créé précédemment afin d'accéder à la base de données.
gcloud sql users create quickstart-service-account@${GOOGLE_CLOUD_PROJECT}.iam \
--instance=quickstart-instance \
--type=cloud_iam_service_account
5. Préparer la demande
Préparer une application Node.js qui répond aux requêtes HTTP
- Dans Cloud Shell, créez un répertoire nommé
helloworld
, puis accédez-y:mkdir helloworld cd helloworld
- Initialisez un fichier
package.json
en tant que module.npm init -y npm pkg set type="module" npm pkg set main="index.mjs" npm pkg set scripts.start="node index.mjs"
- Installez la dépendance du connecteur Node.js Cloud SQL.
npm install @google-cloud/cloud-sql-connector
- Installez
pg
pour interagir avec la base de données PostgreSQL.npm install pg
- Installez Express pour accepter les requêtes HTTP entrantes.
npm install express
- Créez un fichier
index.mjs
avec le code de l'application. Ce code est capable d'effectuer les opérations suivantes:- Accepter les requêtes HTTP
- Se connecter à la base de données
- Stocker l'heure de la requête HTTP dans la base de données
- Renvoyer les heures des cinq dernières requêtes
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
Ce code crée un serveur Web de base qui écoute le port défini par la variable d'environnement PORT. L'application est maintenant prête à être déployée.
6. Déployer une application Cloud Run
Exécutez la commande ci-dessous pour déployer votre application sur Cloud Run:
- –region: emplacement régional de l'instance (par exemple: us-central1, asia-east1, us-east1)
- –source: le code source à déployer. Dans ce cas,
.
fait référence au code source du dossierhelloworld
actuel. - –set-env-vars: définit les variables d'environnement utilisées par l'application pour diriger celle-ci vers la base de données Cloud SQL.
- -service-account: associe le déploiement Cloud Run au compte de service autorisé à se connecter à la base de données Cloud SQL créée au début de cet atelier de programmation.
- –allow-unauthenticated: autorise les requêtes non authentifiées afin que l'application soit accessible depuis 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
Si vous y êtes invité, appuyez sur y
et Enter
pour confirmer que vous souhaitez continuer:
Do you want to continue (Y/n)? y
Après quelques minutes, l'application devrait fournir une URL à laquelle vous pouvez accéder.
Accédez à l'URL pour voir votre application en action. Chaque fois que vous accédez à l'URL ou actualisez la page, les cinq visites les plus récentes sont renvoyées au format JSON.
7. Félicitations
Vous avez déployé sur Cloud Run une application Node.js capable de se connecter à une base de données PostgreSQL exécutée sur Cloud SQL.
Points abordés
- Créer une base de données Cloud SQL pour PostgreSQL
- Déployer une application Node.js sur Cloud Run
- Connecter votre application à Cloud SQL à l'aide du connecteur Node.js Cloud SQL
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement. Si vous souhaitez supprimer l'intégralité du projet, vous pouvez exécuter la commande suivante:
gcloud projects delete ${GOOGLE_CLOUD_PROJECT}