Activar un flujo de trabajo desde Hojas de cálculo de Google


Hojas de cálculo de Google es una solución de hojas de cálculo basada en la nube que admite la colaboración en tiempo real y proporciona herramientas para visualizar, procesar y comunicar datos.

En este tutorial se muestra cómo activar Workflows desde Hojas de cálculo.

Objetivos

En este tutorial, aprenderás a hacer lo siguiente:

  1. Usa Formularios de Google, una solución basada en la nube para crear cuestionarios y encuestas, para crear un formulario que pueda enviar solicitudes para crear instancias de máquina virtual (VM).
  2. Vincula una hoja de cálculo de Google con el formulario para recoger y guardar las respuestas.
  3. Usa Google Apps Script, una plataforma de JavaScript basada en la nube que te permite crear, leer y editar productos de Google Workspace de forma programática, para activar un flujo de trabajo cada vez que se apruebe una solicitud mediante una actualización de la hoja de cálculo.
  4. Despliega un flujo de trabajo que llama al conector de la API Compute Engine y crea una instancia de VM de Compute Engine basada en las especificaciones recogidas a través del formulario. Los conectores simplifican las llamadas a otras APIs de Google Cloud. Más información sobre los conectores de Workflows
  5. Prueba todo el proceso y confirma que se crea una instancia de VM como se espera.

Costes

En este documento, se utilizan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costes basada en el uso previsto, utiliza la calculadora de precios.

Los usuarios nuevos Google Cloud pueden disfrutar de una prueba gratuita.

En el tutorial también se usa Google Workspace. Los servicios empresariales que no se incluyen en las aplicaciones para consumidores gratuitas de Google se facturan.

Antes de empezar

Puedes ejecutar algunos de los siguientes comandos en la Google Cloud consola o mediante la CLI de Google Cloud en tu terminal o en Cloud Shell.

Es posible que las restricciones de seguridad definidas por tu organización te impidan completar los siguientes pasos. Para obtener información sobre cómo solucionar problemas, consulta el artículo Desarrollar aplicaciones en un entorno limitado Google Cloud .

Consola

  1. En la Google Cloud consola, en la página del selector de proyectos, selecciona o crea un Google Cloud proyecto.

    Ir al selector de proyectos

  2. Comprueba que la facturación esté habilitada en tu Google Cloud proyecto. Consulta cómo comprobar si la facturación está habilitada en un proyecto.

  3. Habilita las APIs Compute Engine y Workflows.

    Habilita las APIs

  4. Anota la cuenta de servicio predeterminada de Compute Engine, ya que la asociarás al flujo de trabajo de este tutorial para hacer pruebas. En los proyectos nuevos en los que se ha habilitado la API Compute Engine, se crea esta cuenta de servicio con el rol básico de editor de IAM y con el siguiente formato de correo:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Puedes encontrar el número de tu proyecto en la página Bienvenido de la consola de Google Cloud .

    En los entornos de producción, te recomendamos que crees una cuenta de servicio y le asignes uno o varios roles de IAM que contengan los permisos mínimos necesarios y que sigas el principio de privilegio mínimo.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Comprueba que la facturación esté habilitada en tu Google Cloud proyecto. Consulta cómo comprobar si la facturación está habilitada en un proyecto.

  3. Habilita las APIs Compute Engine y Workflows.

    gcloud services enable \
        compute.googleapis.com \
        workflows.googleapis.com
  4. Anota la cuenta de servicio predeterminada de Compute Engine, ya que la asociarás al flujo de trabajo de este tutorial para hacer pruebas. En los proyectos nuevos en los que se ha habilitado la API Compute Engine, se crea esta cuenta de servicio con el rol básico de editor de IAM y con el siguiente formato de correo:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Puedes obtener tu número de proyecto de las siguientes formas:

    gcloud projects describe PROJECT_ID

    En los entornos de producción, te recomendamos que crees una cuenta de servicio y le asignes uno o varios roles de IAM que contengan los permisos mínimos necesarios y que sigas el principio de privilegio mínimo.

Crear un formulario para solicitar instancias de VM

Crea un formulario que se pueda usar para enviar una solicitud de creación de una instancia de máquina virtual (VM) de Compute Engine. De forma predeterminada, cuando creas un formulario con Formularios de Google, se guarda en Google Drive.

  1. Ve a forms.google.com.
  2. Haz clic en En blanco Plus.

    Se abrirá un formulario nuevo.

  3. Crea un formulario con cinco secciones obligatorias. El formulario debería tener un aspecto similar al siguiente:

    Ver formulario de ejemplo

    Ejemplo de formulario para solicitar la creación de una máquina virtual de Google Cloud
    Nombre de la máquina

    Texto de respuesta corta

    Zona

    Desplegable:

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

    Desplegable:

    1. e2-micro
    2. e2-small
    3. e2-medium
    4. e2-standard-2
    5. e2-standard-4
    Tamaño del disco (GB)

    Texto de respuesta corta

    Sistema operativo

    Desplegable:

    1. debian-10
    2. centos-stream-9
    3. cos-93-lts
    4. cos-97-lts
  4. Habilita la recogida de correos para registrar las direcciones de correo de las personas que rellenen tu formulario:
    1. Haz clic en Settings (Configuración).
    2. Despliega la sección Respuestas.
    3. Haz clic en el interruptor Recopilar direcciones de correo electrónico.

Una vez que hayas creado un formulario, vincúlalo a una hoja de cálculo para guardar las respuestas en ella. La hoja de cálculo se guarda en Drive.

  1. Abre tu formulario en Formularios.
  2. Haz clic en Respuestas.
  3. Haz clic en Vincular con Hojas de cálculo.
  4. En el cuadro de diálogo Seleccionar destino de las respuestas, selecciona Crear una hoja de cálculo.
  5. Haz clic en Crear.

    Se abre la hoja de cálculo vinculada.

  6. En la columna H, añade el encabezado ¿Aprobado?.

  7. Coloca el cursor en la primera fila de la columna H y selecciona Insertar > Casilla.

    La hoja de cálculo debería tener un aspecto similar al siguiente:

    Ejemplo de hoja de cálculo vinculada para recoger solicitudes

    Cada vez que se actualice la hoja con una respuesta, la casilla también aparecerá en la fila de esa respuesta.

Ampliar Hojas de cálculo de Google con Apps Script

Apps Script te permite crear, leer y editar hojas de cálculo de forma programática. La mayoría de las secuencias de comandos diseñadas para Hojas de cálculo manipulan matrices para interactuar con las celdas, las filas y las columnas de una hoja de cálculo. Para obtener una introducción al uso de Apps Script con Hojas de cálculo, consulta la guía de inicio rápido de funciones personalizadas.

  1. Crea un proyecto de Apps Script desde Hojas de cálculo:

    1. Abre tu hoja de cálculo de Hojas de cálculo.
    2. Selecciona Extensiones > Apps Script.
    3. En el editor de secuencias de comandos, haz clic en Proyecto sin título.
    4. Asigna un nombre al proyecto y haz clic en Cambiar nombre.

    Ahora, la secuencia de comandos está vinculada a tu hoja de cálculo, lo que le permite modificar la interfaz de usuario o responder cuando se abre la hoja de cálculo.

    Un proyecto de secuencias de comandos representa una colección de archivos y recursos de Apps Script. Los archivos de código de un proyecto de secuencias de comandos tienen la extensión .gs.

  2. Puedes usar Apps Script para escribir funciones personalizadas que puedes usar en Hojas de cálculo como si fueran funciones integradas. Las funciones personalizadas se crean con JavaScript estándar. Crea una función:

    1. Abre tu proyecto de Apps Script.
    2. Haz clic en Editor .
    3. El archivo de secuencia de comandos aparece como un archivo de proyecto llamado Code.gs. Para editar el archivo, selecciónalo.
    4. Sustituye el código del editor de secuencias de comandos por el siguiente, que lee los datos de tu hoja de cálculo y los transfiere como entrada a una ejecución de flujo de trabajo:

      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.s&&ource;
      
        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. Sustituye your-project-id por el ID de tu proyecto. Google Cloud

      Puedes encontrar el ID de tu proyecto en la página Bienvenido de la consola de Google Cloud .

    6. Haz clic en Guardar .

  3. Los activadores instalables de Apps Script permiten que un proyecto de secuencia de comandos ejecute una función específica cuando se cumplan determinadas condiciones, como cuando se abra o se edite una hoja de cálculo. Crea un activador:

    1. Abre tu proyecto de Apps Script.
    2. Haga clic en Activadores .
    3. Haz clic en Añadir activador.
    4. En el cuadro de diálogo Añadir activador para YOUR_PROJECT_NAME, configura el activador:
      1. En la lista Choose which function to run (Elige qué función quieres ejecutar), selecciona handleEdit.
      2. En la lista Choose which deployment should run (Elige qué implementación se debe ejecutar), selecciona Head (Principal).
      3. En la lista Seleccionar fuente de evento, selecciona De hoja de cálculo.
      4. En la lista Select event type (Seleccionar tipo de evento), selecciona On edit (Al editar).
      5. En la lista Ajustes de notificaciones de errores, selecciona Notificarme a diario.
    5. Haz clic en Guardar.
    6. Si se te pide que elijas una cuenta de Google, selecciona la cuenta adecuada y haz clic en Permitir.

      Esto permite que tu proyecto de Apps Script vea, edite, cree y elimine tus hojas de cálculo de Hojas de cálculo y que se conecte a un servicio externo.

  4. Un archivo de manifiesto de un proyecto de Apps Script es un archivo JSON que especifica información básica del proyecto que Apps Script necesita para ejecutar una secuencia de comandos correctamente. Ten en cuenta que el editor de Apps Script oculta los archivos de manifiesto de forma predeterminada para proteger los ajustes de tu proyecto de Apps Script. Edita el archivo de manifiesto:

    1. Abre tu proyecto de Apps Script.
    2. Haz clic en Configuración del proyecto .
    3. Selecciona la casilla Mostrar el archivo de manifiesto "appsscript.json" en el editor.
    4. Haz clic en Editor .
    5. El archivo de manifiesto aparece como un archivo de proyecto llamado appsscript.json. Para editar el archivo, selecciónalo.
    6. El campo oauthScopes especifica una matriz de cadenas. Para definir los ámbitos de autorización que usa tu proyecto, añade un array con los ámbitos que quieras que se admitan. Por ejemplo:

      {
        "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"
        ]
      }

      De esta forma, se definen los siguientes ámbitos explícitos:

      • Permite conectarse a un servicio externo
      • Ver, editar, configurar y eliminar tus Google Cloud datos y ver la dirección de correo de tu cuenta de Google
      • Ver, editar, crear y eliminar todas tus hojas de cálculo
    7. Haz clic en Guardar .

Desplegar un flujo de trabajo que cree una instancia de VM

Despliega un flujo de trabajo que se active cuando se apruebe una solicitud para crear una instancia de VM. El flujo de trabajo llama al conector de la API Compute Engine para crear una instancia de VM de Compute Engine basada en las especificaciones recogidas a través del formulario.

Consola

  1. En la Google Cloud consola, ve a la página Flujos de trabajo:

    Ir a Workflows

  2. Haz clic en Crear.

  3. Escribe un nombre para el nuevo flujo de trabajo: create-vm-from-form.

  4. En la lista Región, selecciona us-central1 (Iowa).

  5. En Cuenta de servicio, selecciona la cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com).

  6. Haz clic en Siguiente.

  7. En el editor del flujo de trabajo, introduce la siguiente definición para tu flujo de trabajo:

    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. Haz clic en Desplegar.

gcloud

  1. Crea un archivo de código fuente para tu flujo de trabajo:

    touch create-vm-from-form.yaml
  2. En un editor de texto, copia el siguiente flujo de trabajo en tu archivo de código fuente:

    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. Para desplegar el flujo de trabajo, introduce el siguiente comando:

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

    Sustituye PROJECT_NUMBER por el número de tu proyecto. Google Cloud Puedes obtener tu número de proyecto de las siguientes formas:

    gcloud projects describe PROJECT_ID

Probar el flujo de principio a fin

Para confirmar que todo funciona correctamente, prueba a completar todo el proceso.

  1. Envía el formulario a tu dirección de correo y responde a las preguntas de forma adecuada.

    Asegúrate de que las especificaciones que usas para crear una instancia de VM sean válidas, ya que, de lo contrario, la ejecución del flujo de trabajo fallará. Para obtener más información, consulta la página Familia de máquinas de uso general de Compute Engine.

  2. Para enviar tu respuesta, haz clic en Enviar.

  3. Abre tu formulario en Formularios.

  4. Haz clic en Respuestas.

  5. Haz clic en Ver en Hojas de cálculo.

    Se abrirá la hoja de cálculo vinculada.

  6. En la fila de tu respuesta, selecciona la casilla ¿Aprobada?.

  7. Abre tu proyecto de Apps Script.

  8. Haz clic en Ejecuciones .

    El activador debería ejecutarse y aparecer con el estado Completed.

  9. Confirma que el flujo de trabajo create-vm-from-form se ha completado correctamente:

    Consola

    1. En la Google Cloud consola, ve a la página Flujos de trabajo.

      Ir a Workflows

    2. En la página Workflows (Flujos de trabajo), haz clic en el flujo de trabajo create-vm-from-form (crear-vm-desde-formulario) para ir a su página de detalles.

    3. En la página Detalles del flujo de trabajo, para obtener los detalles de una ejecución concreta, haz clic en el ID de ejecución correspondiente.

      El estado de ejecución debe ser Correcto y, en el panel Entrada, deberías ver las especificaciones de la VM que has solicitado.

    gcloud

    Para obtener una lista de los intentos de ejecución de tu flujo de trabajo, sigue estos pasos:

    gcloud workflows executions list create-vm-from-form

    El resultado debería ser similar al siguiente:

    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. Confirma que se ha creado una VM como esperabas:

    Consola

    En la consola de Google Cloud , ve a la página Instancias de VM.

    Ir a instancias de VM

    Tu instancia de VM debería aparecer con un estado que indique que está en ejecución.

    gcloud

    Para obtener una lista agregada de todas las VMs de todas las zonas de un proyecto, haz lo siguiente:

    gcloud compute instances list

    Tu instancia de VM debería aparecer con un estado que indique que está en ejecución.

    Para obtener más información sobre el comando gcloud compute instances list, consulta su página de referencia.

Limpieza

Si has creado un proyecto para este tutorial, elimínalo. Si has usado un proyecto y quieres conservarlo sin los cambios que se han añadido en este tutorial, elimina los recursos creados para el tutorial.

Eliminar el proyecto

La forma más fácil de evitar que te cobren es eliminar el proyecto que has creado para el tutorial.

Para ello, sigue las instrucciones que aparecen a continuación:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Eliminar los recursos creados en este tutorial

  1. Elimina archivos de Drive.
  2. Eliminar una instancia de VM de Compute Engine.
  3. Eliminar un flujo de trabajo.

Siguientes pasos