Activa 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 instructivo, se muestra cómo activar Workflows desde Hojas de cálculo.

Objetivos

En este instructivo, podrás:

  1. Con Formularios de Google, una solución de encuestas y cuestionarios basada en la nube, crea un formulario que pueda enviar solicitudes para crear instancias de máquina virtual (VM).
  2. Vincula una hoja de cálculo de Google al formulario para recopilar 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 manera programática, para activar un flujo de trabajo cada vez que se apruebe una solicitud a través de una actualización de la hoja de cálculo.
  4. Implementa un flujo de trabajo que llame al conector de la API de Compute Engine y cree una instancia de VM de Compute Engine según las especificaciones recopiladas a través del formulario. Los conectores simplifican las llamadas a otras APIs de Google Cloud. Obtén más información sobre los conectores de Workflows.
  5. Prueba todo el proceso y confirma que la instancia de VM se creó como se espera.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

En el instructivo, también se usa Google Workspace. Los servicios de nivel empresarial que no se incluyen en las aplicaciones para consumidores gratuitas de Google son facturables.

Antes de comenzar

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

Es posible que las restricciones de seguridad que define tu organización no te permitan completar los siguientes pasos. Para obtener información sobre la solución de problemas, consulta Desarrolla aplicaciones en un entorno de Google Cloud restringido.

Console

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

    Ir al selector de proyectos

  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.

  3. Habilitar las APIs de Compute Engine y Workflows

    Habilita las API

  4. Toma nota de la cuenta de servicio predeterminada de Compute Engine, ya que la asociarás con el flujo de trabajo de este instructivo para realizar pruebas. Los proyectos nuevos que habilitaron la API de Compute Engine tienen esta cuenta de servicio creada con la función de editor básico de IAM y el siguiente formato de correo electrónico:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

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

    Para los entornos de producción, te recomendamos crear una cuenta de servicio nueva, otorgarle una o más funciones de IAM que contengan los permisos mínimos necesarios y seguir el principio de privilegio mínimo.

gcloud

  1. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.

  3. Habilitar las APIs de Compute Engine y Workflows

    gcloud services enable \
        compute.googleapis.com \
        workflows.googleapis.com
    
  4. Toma nota de la cuenta de servicio predeterminada de Compute Engine, ya que la asociarás con el flujo de trabajo de este instructivo para realizar pruebas. Los proyectos nuevos que habilitaron la API de Compute Engine tienen esta cuenta de servicio creada con la función de editor básico de IAM y el siguiente formato de correo electrónico:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Puedes recuperar el número de tu proyecto de la siguiente manera:

    gcloud projects describe PROJECT_ID
    

    Para los entornos de producción, te recomendamos crear una cuenta de servicio nueva, otorgarle una o más funciones de IAM que contengan los permisos mínimos necesarios y seguir el principio de privilegio mínimo.

Crea un formulario para solicitar instancias de VM

Crea un formulario que se pueda usar a fin de enviar una solicitud para crear una instancia de máquina virtual (VM) de Compute Engine. De forma predeterminada, cuando creas un formulario a través de Formularios de Google, se guarda en Google Drive.

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

    Se abrirá un nuevo formulario.

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

    Ver formulario de muestra

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

    Texto de respuesta breve

    Zona

    Menú desplegable:

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

    Menú 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 breve

    Sistema operativo

    Menú desplegable:

    1. debian-10
    2. centos-stream-9
    3. cos-93-lts
    4. cos-97-lts
  4. Habilita la recopilación de correos electrónicos para registrar las direcciones de correo electrónico de las personas que completan tu formulario:
    1. Haz clic en Configuración.
    2. Expande la sección Respuestas.
    3. Haz clic en el botón de activación Recopilar las direcciones de correo electrónico.

Después de crear un formulario, vincula una hoja de cálculo a él para poder guardar las respuestas del formulario en ella. La hoja de cálculo se guarda en Drive.

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

    Se abrirá la hoja de cálculo vinculada.

  6. En la columna H, agrega un encabezado Approved?.

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

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

    Ejemplo de una hoja de cálculo vinculada para recopilar solicitudes

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

Amplía Hojas de cálculo de Google con Apps Script

Apps Script te permite crear, leer y editar Hojas de cálculo de manera programática. La mayoría de las secuencias de comandos diseñadas para Hojas de cálculo manipulan arrays para que interactúen con las celdas, filas y columnas de una hoja de cálculo. Para ver una introducción al uso de Apps Script con Hojas de cálculo, consulta la guía de inicio rápido sobre funciones personalizadas.

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

    1. Abre tu archivo 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. Asígnale un nombre al proyecto y haz clic en Cambiar nombre.

    La secuencia de comandos ahora está vinculada a la hoja de cálculo, lo que permite que las secuencias de comandos modifiquen la interfaz de usuario o respondan cuando se abra la hoja de cálculo.

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

  2. Puedes usar Apps Script para escribir funciones personalizadas que puedes usar en Hojas de cálculo al igual que una función integrada. 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. Aparecerá un archivo de secuencia de comandos como un archivo de proyecto llamado Code.gs. Para editar el archivo, selecciónalo.
    4. Reemplaza cualquier código en el editor de secuencia de comandos por el siguiente código que lee los datos de la hoja de cálculo y los pasa como entrada a la ejecución de un 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.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. Reemplaza your-project-id por el ID del proyecto de Google Cloud.

      Puedes buscar el ID del proyecto en la página de bienvenida 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 especificada cuando se cumplen ciertas condiciones, como cuando se abre o se edita una hoja de cálculo. Crea un activador:

    1. Abre tu proyecto de Apps Script.
    2. Haz clic en Activadores .
    3. Haz clic en Agregar activador.
    4. En el diálogo Agregar activador para YOUR_PROJECT_NAME, configura el activador:
      1. En la lista Elige qué función ejecutar, selecciona handleEdit.
      2. En la lista Choose what deployment should run, selecciona Head.
      3. En la lista Seleccionar la fuente del evento, elige Desde una hoja de cálculo.
      4. En la lista Seleccionar tipo de evento, elige Al editar.
      5. En la lista Configuración de notificaciones de errores, selecciona Notificarme diariamente.
    5. Haz clic en Guardar.
    6. Si se te solicita elegir una Cuenta de Google, selecciona la cuenta correspondiente y haz clic en Permitir.

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

  4. Un archivo de manifiesto de proyecto de Apps Script es un archivo JSON que especifica la información básica del proyecto que Apps Script necesita para ejecutar una secuencia de comandos de forma correcta. Ten en cuenta que el editor de Apps Script oculta los archivos de manifiesto de forma predeterminada para proteger la configuración 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 de verificación 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 un array de cadenas. Para establecer los permisos de autorización que usa tu proyecto, agrega un arreglo con los alcances que quieras compatibles. 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"
        ]
      }

      Esto establece los alcances explícitos en:

      • Se conecta a un servicio externo.
      • Ver, editar, configurar y borrar tus datos de Google Cloud y ver la dirección de correo electrónico de tu Cuenta de Google
      • Ver, editar, crear y borrar todos tus archivos de Hojas de cálculo
    7. Haz clic en Guardar .

Implementa un flujo de trabajo que cree una instancia de VM

Implementa 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 de Compute Engine para crear una instancia de VM de Compute Engine según las especificaciones recopiladas en el formulario.

Console

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

    Ir a Workflows

  2. Haz clic en  Crear.

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

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

  5. Para la 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 de flujos de trabajo, ingresa 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 Implementar.

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 implementar el flujo de trabajo, ingresa 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

    Reemplaza PROJECT_NUMBER por el número de proyecto de Google Cloud. Puedes recuperar el número de tu proyecto de la siguiente manera:

    gcloud projects describe PROJECT_ID
    

Prueba el flujo de extremo a extremo

Para confirmar que todo funciona como se espera, intenta ejecutar todo el proceso.

  1. Envíate el formulario y responde las preguntas de forma adecuada.

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

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

  3. Abre el 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 de verificación ¿Aprobado?

  7. Abre tu proyecto de Apps Script.

  8. Haz clic en Ejecuciones .

    El activador debería estar ejecutado y debe mostrarse con un estado Completed.

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

    Console

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

      Ir a Workflows

    2. En la página Flujos de trabajo, haz clic en el flujo de trabajo create-vm-from-form para ir a la página de detalles.

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

      El Estado de ejecución debería ser Sin errores y, en el panel de entrada, deberías ver las especificaciones de la VM que solicitaste.

    gcloud

    Recupera una lista de los intentos de ejecución de tu flujo de trabajo:

    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 creó una VM nueva como se esperaba:

    Console

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

    Ir a Instancias de VM

    Tu instancia de VM debe aparecer con un estado que indique que se está ejecutando.

    gcloud

    Recupera una lista agregada de todas las VMs en todas las zonas de un proyecto:

    gcloud compute instances list

    Tu instancia de VM debe aparecer con un estado que indique que se está ejecutando.

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

Limpia

Si creaste un proyecto nuevo para este instructivo, bórralo. Si usaste un proyecto existente y deseas conservarlo sin los cambios que se agregaron en este instructivo, borra los recursos creados para el instructivo.

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Para borrar el proyecto, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra los recursos que se crearon en este instructivo

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

¿Qué sigue?