Déclencher un workflow depuis Google Sheets


Google Sheets est une solution de feuilles de calcul dans le cloud qui favorise la collaboration en temps réel et fournit des outils pour visualiser, traiter et communiquer les données.

Ce tutoriel explique comment déclencher Workflows à partir de Sheets.

Objectifs

Au cours de ce tutoriel, vous allez :

  1. Utilisez Google Forms, une solution cloud de questionnaire et d'enquête, pour créer un formulaire pouvant envoyer des requêtes de création d'instances de machines virtuelles (VM).
  2. Associez une feuille de calcul Google Sheets au formulaire pour collecter et enregistrer les réponses.
  3. Utilisez Google Apps Script, une plate-forme JavaScript basée dans le cloud qui vous permet de créer, lire et modifier des produits Google Workspace de manière automatisée, afin de déclencher un workflow chaque fois qu'une requête est approuvée par le biais d'une mise à jour de la feuille de calcul.
  4. Déployez un workflow qui appelle le connecteur d'API Compute Engine et crée une instance de VM Compute Engine en fonction des spécifications collectées via le formulaire. Les connecteurs simplifient l'appel d'autres API Google Cloud. En savoir plus sur les connecteurs Workflows
  5. Testez l'ensemble du processus et confirmez qu'une instance de VM est créée comme prévu.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Le tutoriel utilise également Google Workspace. Les services professionnels non inclus dans les applications grand public gratuites de Google sont facturables.

Avant de commencer

Vous pouvez exécuter certaines des commandes suivantes dans la console Google Cloud, ou à l'aide de la Google Cloud CLI dans votre terminal ou dans Cloud Shell.

Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour obtenir des informations de dépannage, consultez la page Développer des applications dans un environnement Google Cloud limité.

Console

  1. Dans la console Google Cloud, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  2. Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.

  3. Activez les API Compute Engine et Workflows.

    Activer les API

  4. Notez le compte de service Compute Engine par défaut, car vous l'associerez au workflow de ce tutoriel à des fins de test. Pour les nouveaux projets ayant activé l'API Compute Engine, ce compte de service est créé avec le rôle IAM d'éditeur de base et au format d'adresse e-mail suivant:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Vous trouverez le numéro de votre projet sur la page Accueil de la console Google Cloud.

    Pour les environnements de production, nous vous recommandons vivement de créer un compte de service et de lui attribuer un ou plusieurs rôles IAM contenant les autorisations minimales requises et respectant le principe du moindre privilège.

gcloud

  1. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

    En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

  2. Vérifiez que la facturation est activée pour votre projet Google Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.

  3. Activez les API Compute Engine et Workflows.

    gcloud services enable \
        compute.googleapis.com \
        workflows.googleapis.com
    
  4. Notez le compte de service Compute Engine par défaut, car vous l'associerez au workflow de ce tutoriel à des fins de test. Pour les nouveaux projets ayant activé l'API Compute Engine, ce compte de service est créé avec le rôle IAM d'éditeur de base et au format d'adresse e-mail suivant:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Vous pouvez récupérer votre numéro de projet:

    gcloud projects describe PROJECT_ID
    

    Pour les environnements de production, nous vous recommandons vivement de créer un compte de service et de lui attribuer un ou plusieurs rôles IAM contenant les autorisations minimales requises et respectant le principe du moindre privilège.

Créer un formulaire pour demander des instances de VM

Créez un formulaire permettant d'envoyer une requête de création d'instance de machine virtuelle (VM) Compute Engine. Par défaut, lorsque vous créez un formulaire via Google Forms, il est enregistré dans Google Drive.

  1. Accédez à forms.google.com.
  2. Cliquez sur Vide Plus.

    Un nouveau formulaire s'ouvre.

  3. Créez un formulaire comportant cinq sections obligatoires. Le formulaire doit ressembler à ce qui suit :

    Voir l'exemple de formulaire

    Exemple de formulaire permettant de demander la création d'une machine virtuelle Google Cloud
    Nom de la machine

    Réponse courte

    Zone

    Menu déroulant:

    1. us-central1-a
    2. us-central1-b
    3. us-central1-c
    4. us-central1-f
    Type

    Menu déroulant:

    1. e2-micro
    2. e2-small
    3. e2-medium
    4. e2-standard-2
    5. e2-standard-4
    Taille du disque (Go)

    Réponse courte

    Système d'exploitation

    Menu déroulant:

    1. debian-10
    2. Centos-stream-9
    3. Cos-93-lts
    4. Cos-97-lts
  4. Activez la collecte des adresses e-mail pour enregistrer les adresses e-mail des personnes qui remplissent votre formulaire :
    1. Cliquez sur Paramètres.
    2. Développez la section Réponses.
    3. Cliquez sur le bouton Collecter les adresses e-mail.

Une fois que vous avez créé un formulaire, associez-y une feuille de calcul afin de pouvoir y enregistrer vos réponses au formulaire. La feuille de calcul est enregistrée dans Drive.

  1. Ouvrez votre formulaire dans Forms.
  2. Cliquez sur Réponses.
  3. Cliquez sur Associer à Sheets.
  4. Dans la boîte de dialogue Sélectionner une destination pour les réponses, sélectionnez Créer une feuille de calcul.
  5. Cliquez sur Créer.

    La feuille de calcul associée s'ouvre.

  6. Dans la colonne H, ajoutez l'en-tête Approved?.

  7. Placez votre curseur sur la première ligne de la colonne H et sélectionnez Insérer > Case à cocher.

    La feuille de calcul doit ressembler à ceci:

    Exemple de feuille de calcul associée permettant de collecter des demandes

    Chaque fois que la feuille est mise à jour avec une réponse, la case à cocher apparaît également sur la ligne de cette réponse.

Étendre les feuilles de calcul Google Sheets à l'aide d'Apps Script

Apps Script vous permet de créer, de lire et de modifier des feuilles de calcul Sheets par programmation. La plupart des scripts conçus pour Sheets manipulent les tableaux pour interagir avec les cellules, les lignes et les colonnes d'une feuille de calcul. Pour découvrir comment utiliser Apps Script avec Sheets, consultez le Guide de démarrage rapide des fonctions personnalisées.

  1. Créer un projet Apps Script à partir de Sheets:

    1. Ouvrez votre feuille de calcul Sheets.
    2. Sélectionnez Extensions > Apps Script.
    3. Dans l'éditeur de script, cliquez sur Projet sans titre.
    4. Attribuez un nom à votre projet, puis cliquez sur Renommer.

    Votre script est maintenant lié à votre feuille de calcul, ce qui lui permet de modifier l'interface utilisateur ou de répondre lorsque la feuille de calcul est ouverte.

    Un projet de script représente un ensemble de fichiers et de ressources Apps Script. Les fichiers de code d'un projet de script possèdent une extension .gs.

  2. Vous pouvez utiliser Apps Script pour écrire des fonctions personnalisées que vous pouvez utiliser dans Sheets, comme une fonction intégrée. Les fonctions personnalisées sont créées en JavaScript standard. Créez une fonction:

    1. Ouvrez votre projet Apps Script.
    2. Cliquez sur Éditeur .
    3. Un fichier de script s'affiche en tant que fichier de projet nommé Code.gs. Pour modifier le fichier, sélectionnez-le.
    4. Remplacez tout code dans l'éditeur de script par le code suivant, qui lit les données de votre feuille de calcul et les transmet en tant qu'entrée à l'exécution d'un workflow:

      const PROJECT_ID = "your-project-id";
      const REGION = "us-central1";
      const WORKFLOW = "create-vm-from-form";
      
      function handleEdit(e) {
        var range = e.range.getA1Notation();
        var sheet = e.source;
      
        if (range.length > 1 && range[0] === 'H') {
          if (e.value == "TRUE") {
            Logger.log("Approved checkbox: true");
      
            var row = range.slice(1)
            var email = sheet.getRange('B' + row).getCell(1, 1).getValue()
            var vmName = sheet.getRange('c' + row).getCell(1, 1).getValue()
            var zone = sheet.getRange('D' + row).getCell(1, 1).getValue()
            var machineType = sheet.getRange('E' + row).getCell(1, 1).getValue()
            var diskSize = sheet.getRange('F' + row).getCell(1, 1).getValue()
            var imageFamily = sheet.getRange('G' + row).getCell(1, 1).getValue()
            var imageProject = imageFamily.substring(0, imageFamily.indexOf('-')) + "-cloud"
      
            const executionPayload = {
              "argument": "{\"diskSize\": \"" + diskSize + "\", \"email\": \"" + email + "\", \"imageFamily\": \"" + imageFamily + "\", \"imageProject\": \"" + imageProject + "\", \"machineType\": \"" + machineType + "\", \"vmName\": \"" + vmName + "\", \"zone\": \"" + zone +  "\"}"
            };
      
            approve(executionPayload);
          }
          else {
            Logger.log("Approved checkbox: false");
          }
        }
      }
      
      function approve(executionPayload) {
        const headers = {
          "Authorization": "Bearer " + ScriptApp.getOAuthToken()
        };
      
        const params = {
          "method": 'post',
          "contentType": 'application/json',
          "headers": headers,
          "payload": JSON.stringify(executionPayload)
        };
      
        const url = "https://workflowexecutions.googleapis.com/v1/projects/" + PROJECT_ID + "/locations/" + REGION + "/workflows/" + WORKFLOW + "/executions";
      
        Logger.log("Workflow execution request to " + url);
        var response = UrlFetchApp.fetch(url, params);
        Logger.log(response);
      }
    5. Remplacez your-project-id par l'ID de votre projet Google Cloud.

      Vous pouvez trouver l'ID de votre projet sur la page de Bienvenue de la console Google Cloud.

    6. Cliquez sur Enregistrer .

  3. Les déclencheurs installables d'Apps Script permettent à un projet de script d'exécuter une fonction spécifiée lorsque certaines conditions sont remplies, par exemple lorsqu'une feuille de calcul est ouverte ou modifiée. Créez un déclencheur:

    1. Ouvrez votre projet Apps Script.
    2. Cliquez sur Déclencheurs .
    3. Cliquez sur Ajouter un déclencheur.
    4. Dans la boîte de dialogue Ajouter un déclencheur pour YOUR_PROJECT_NAME, configurez le déclencheur :
      1. Dans la liste Choisir la fonction à exécuter, sélectionnez handleEdit.
      2. Dans la liste Choisir le déploiement à exécuter, sélectionnez Head.
      3. Dans la liste Sélectionner la source de l'événement, choisissez À partir de la feuille de calcul.
      4. Dans la liste Sélectionnez un type d'événement, choisissez Lors d'une modification.
      5. Dans la liste Paramètres de notification des échecs, sélectionnez M'envoyer une notification quotidienne.
    5. Cliquez sur Enregistrer.
    6. Si vous êtes invité à choisir un compte Google, sélectionnez le compte approprié, puis cliquez sur Allow (Autoriser).

      Votre projet Apps Script peut ainsi voir, modifier, créer et supprimer vos feuilles de calcul Sheets, et se connecter à un service externe.

  4. Un fichier manifeste d'un projet Apps Script est un fichier JSON qui fournit les informations de base nécessaires à l'exécution d'un script dans Apps Script. Notez que l'éditeur Apps Script masque les fichiers manifestes par défaut pour protéger les paramètres de votre projet Apps Script. Modifiez le fichier manifeste:

    1. Ouvrez votre projet Apps Script.
    2. Cliquez sur Paramètres du projet .
    3. Cochez la case Afficher le fichier manifeste "appsscript.json" dans l'éditeur.
    4. Cliquez sur Éditeur .
    5. Le fichier manifeste apparaît sous la forme d'un fichier de projet nommé appsscript.json. Pour modifier le fichier, sélectionnez-le.
    6. Le champ oauthScopes spécifie un tableau de chaînes. Pour définir les niveaux d'autorisation que votre projet utilise, ajoutez un tableau indiquant les niveaux d'accès que vous souhaitez utiliser. Par exemple,

      {
        "timeZone": "America/Toronto",
        "dependencies": {
        },
        "exceptionLogging": "STACKDRIVER",
        "runtimeVersion": "V8",
        "oauthScopes": [
          "https://www.googleapis.com/auth/script.external_request",
          "https://www.googleapis.com/auth/cloud-platform",
          "https://www.googleapis.com/auth/spreadsheets"
        ]
      }
      .

      Les champs d'application explicites sont ainsi définis sur:

      • Se connecter à un service externe.
      • Consulter, modifier, configurer et supprimer vos données Google Cloud, et afficher l'adresse e-mail de votre compte Google
      • Consulter, modifier, créer et supprimer toutes vos feuilles de calcul Sheets
    7. Cliquez sur Enregistrer .

Déployer un workflow qui crée une instance de VM

Déployez un workflow qui se déclenche lorsqu'une demande de création d'instance de VM est approuvée. Le workflow appelle le connecteur d'API Compute Engine pour créer une instance de VM Compute Engine en fonction des spécifications collectées via le formulaire.

Console

  1. Dans la console Google Cloud, accédez à la page Workflows:

    Accéder à "Workflows"

  2. Cliquez sur  Créer.

  3. Saisissez un nom pour le nouveau workflow: create-vm-from-form.

  4. Dans la liste Région, sélectionnez us-central1 (Iowa).

  5. Dans le champ Compte de service, sélectionnez le compte de service Compute Engine par défaut (PROJECT_NUMBER-compute@developer.gserviceaccount.com).

  6. Cliquez sur Suivant.

  7. Dans l'éditeur de workflow, saisissez la définition suivante pour votre workflow:

    main:
       params: [input]
       steps:
       - init:
           assign:
                - projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - zone: ${input.zone}
                - machineType: ${input.machineType}
                - diskSize: ${input.diskSize}
                - imageProject: ${input.imageProject}
                - imageFamily: ${input.imageFamily}
                - vmName: ${input.vmName}
                - email: ${input.email}
       - createResource:
           call: googleapis.compute.v1.instances.insert
           args:
               project: ${projectId}
               zone: ${zone}
               body:
                   name: ${vmName}
                   machineType: ${"projects/" + projectId + "/zones/" + zone + "/machineTypes/" + machineType}
                   disks:
                    - initializeParams:
                        diskSizeGb: ${diskSize}
                        sourceImage: ${"projects/" + imageProject + "/global/images/family/" + imageFamily}
                      type: PERSISTENT
                      boot: true
                      autoDelete: true
                   networkInterfaces:
                    - network: "global/networks/default"
           result: insertResult
       - retStep:
           return: ${insertResult}
  8. Cliquez sur Déployer.

gcloud

  1. Créez un fichier de code source pour votre workflow:

    touch create-vm-from-form.yaml
    
  2. Dans un éditeur de texte, copiez le workflow suivant dans votre fichier de code source:

    main:
       params: [input]
       steps:
       - init:
           assign:
                - projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")}
                - zone: ${input.zone}
                - machineType: ${input.machineType}
                - diskSize: ${input.diskSize}
                - imageProject: ${input.imageProject}
                - imageFamily: ${input.imageFamily}
                - vmName: ${input.vmName}
                - email: ${input.email}
       - createResource:
           call: googleapis.compute.v1.instances.insert
           args:
               project: ${projectId}
               zone: ${zone}
               body:
                   name: ${vmName}
                   machineType: ${"projects/" + projectId + "/zones/" + zone + "/machineTypes/" + machineType}
                   disks:
                    - initializeParams:
                        diskSizeGb: ${diskSize}
                        sourceImage: ${"projects/" + imageProject + "/global/images/family/" + imageFamily}
                      type: PERSISTENT
                      boot: true
                      autoDelete: true
                   networkInterfaces:
                    - network: "global/networks/default"
           result: insertResult
       - retStep:
           return: ${insertResult}
  3. Déployez le workflow en saisissant la commande suivante :

    gcloud workflows deploy create-vm-from-form \
        --source=create-vm-from-form.yaml \
        --location=us-central1 \
        --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Remplacez PROJECT_NUMBER par votre numéro de projet Google Cloud. Vous pouvez récupérer votre numéro de projet:

    gcloud projects describe PROJECT_ID
    

Tester le flux de bout en bout

Pour vérifier que tout fonctionne comme prévu, essayez d'exécuter l'ensemble du processus.

  1. Envoyez-vous le formulaire et répondez aux questions de manière appropriée.

    Assurez-vous que les spécifications que vous utilisez pour créer une instance de VM sont valides. Sinon, l'exécution de votre workflow échouera. Pour en savoir plus, consultez la page Famille de machines à usage général Compute Engine.

  2. Pour envoyer votre réponse, cliquez sur Envoyer.

  3. Ouvrez votre formulaire dans Forms.

  4. Cliquez sur Réponses.

  5. Cliquez sur Afficher dans Sheets.

    La feuille de calcul associée s'ouvre.

  6. Sur la ligne de votre réponse, cochez la case Approuvée ?.

  7. Ouvrez votre projet Apps Script.

  8. Cliquez sur Exécutions .

    Votre déclencheur doit être exécuté et répertorié avec l'état Completed.

  9. Vérifiez que le workflow create-vm-from-form a bien été exécuté:

    Console

    1. Dans la console Google Cloud, accédez à la page Workflows.

      Accéder à "Workflows"

    2. Sur la page Workflows, cliquez sur le workflow create-vm-from-form pour accéder à sa page d'informations.

    3. Sur la page Workflow details (Détails du workflow), cliquez sur l'ID d'exécution approprié pour récupérer les détails d'une exécution particulière.

      L'état de l'exécution doit indiquer Réussite et, dans le volet d'entrée, les spécifications de VM que vous avez demandées.

    gcloud

    Récupérez la liste des tentatives d'exécution de votre workflow:

    gcloud workflows executions list create-vm-from-form

    Le résultat doit ressembler à ce qui suit:

    NAME: projects/918619793306/locations/us-central1/workflows/create-vm-from-form/executions/d8947ecb-9ccb-4ea1-ba10-e5c10414e3be
    STATE: SUCCEEDED
    START_TIME: 2023-01-24T15:07:40.404741791Z
    END_TIME: 2023-01-24T15:07:55.649373625Z
  10. Vérifiez qu'une VM a bien été créée comme prévu:

    Console

    Dans la console Google Cloud, accédez à la page Instances de VM.

    Accéder à la page Instances de VM

    Votre instance de VM devrait être répertoriée avec un état indiquant qu'elle est en cours d'exécution.

    gcloud

    Récupérez la liste globale de toutes les VM de toutes les zones d'un projet:

    gcloud compute instances list

    Votre instance de VM devrait être répertoriée avec un état indiquant qu'elle est en cours d'exécution.

    Pour en savoir plus sur la commande gcloud compute instances list, consultez sa page de référence.

Effectuer un nettoyage

Si vous avez créé un projet pour ce tutoriel, supprimez-le. Si vous avez utilisé un projet existant et que vous souhaitez le conserver sans les modifications du présent tutoriel, supprimez les ressources créées pour ce tutoriel.

Supprimer le projet

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

Pour supprimer le projet :

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer les ressources créées dans ce tutoriel

  1. Supprimer des fichiers dans Drive
  2. Supprimez une instance de VM Compute Engine.
  3. Supprimer un workflow.

Étapes suivantes