Acione um fluxo de trabalho a partir do Google Sheets


O Google Sheets é uma solução de folha de cálculo baseada na nuvem que suporta a colaboração em tempo real e oferece ferramentas para visualizar, processar e comunicar dados.

Este tutorial demonstra como acionar fluxos de trabalho a partir do Sheets.

Objetivos

Neste tutorial, vai:

  1. Use o Google Forms, uma solução de questionários e inquéritos baseada na nuvem, para criar um formulário que possa enviar pedidos para criar instâncias de máquinas virtuais (VMs).
  2. Associe uma folha de cálculo do Google Sheets ao formulário para recolher e guardar todas as respostas.
  3. Use o Google Apps Script, uma plataforma JavaScript baseada na nuvem que lhe permite criar, ler e editar produtos do Google Workspace de forma programática, para acionar um fluxo de trabalho sempre que um pedido for aprovado através de uma atualização da folha de cálculo.
  4. Implemente um fluxo de trabalho que chame o conetor da API Compute Engine e crie uma instância de VM do Compute Engine com base nas especificações recolhidas através do formulário. Os conetores simplificam a chamada de outras Google Cloud APIs. Saiba mais sobre os conetores do Workflows.
  5. Teste todo o processo e confirme se é criada uma instância de VM conforme esperado.

Custos

Neste documento, usa os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

O tutorial também usa o Google Workspace. Os serviços de nível empresarial que não estão incluídos nas apps de consumidor gratuitas da Google são faturáveis.

Antes de começar

Pode executar alguns dos seguintes comandos na Google Cloud consola ou através da CLI Google Cloud no terminal ou no Cloud Shell.

As restrições de segurança definidas pela sua organização podem impedir a conclusão dos seguintes passos. Para informações de resolução de problemas, consulte o artigo Desenvolva aplicações num ambiente Google Cloud restrito.

Consola

  1. Na Google Cloud consola, na página do seletor de projetos, selecione ou crie um Google Cloud projeto.

    Aceder ao seletor de projetos

  2. Certifique-se de que a faturação está ativada para o seu Google Cloud projeto. Saiba como verificar se a faturação está ativada num projeto.

  3. Ative as APIs Compute Engine e Workflows.

    Ative as APIs

  4. Tome nota da conta de serviço predefinida do Compute Engine uma vez que a vai associar ao fluxo de trabalho neste tutorial para fins de teste. Os novos projetos que ativaram a API Compute Engine têm esta conta de serviço criada com a função básica de editor do IAM e com o seguinte formato de email:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Pode encontrar o número do projeto na página Boas-vindas da Google Cloud consola.

    Para ambientes de produção, recomendamos vivamente que crie uma nova conta de serviço e lhe conceda uma ou mais funções do IAM que contenham as autorizações mínimas necessárias e siga o princípio do privilégio 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. Certifique-se de que a faturação está ativada para o seu Google Cloud projeto. Saiba como verificar se a faturação está ativada num projeto.

  3. Ative as APIs Compute Engine e Workflows.

    gcloud services enable \
        compute.googleapis.com \
        workflows.googleapis.com
  4. Tome nota da conta de serviço predefinida do Compute Engine uma vez que a vai associar ao fluxo de trabalho neste tutorial para fins de teste. Os novos projetos que ativaram a API Compute Engine têm esta conta de serviço criada com a função básica de editor do IAM e com o seguinte formato de email:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Pode obter o número do projeto:

    gcloud projects describe PROJECT_ID

    Para ambientes de produção, recomendamos vivamente que crie uma nova conta de serviço e lhe conceda uma ou mais funções do IAM que contenham as autorizações mínimas necessárias e siga o princípio do privilégio mínimo.

Crie um formulário para pedir instâncias de VM

Crie um formulário que possa ser usado para enviar um pedido de criação de uma instância de máquina virtual (VM) do Compute Engine. Por predefinição, quando cria um formulário através do Google Forms, este é guardado no Google Drive.

  1. Aceda a forms.google.com.
  2. Clique em Em branco Plus.

    É aberto um novo formulário.

  3. Criar um formulário com cinco secções obrigatórias. O formulário deve ter um aspeto semelhante ao seguinte:

    Veja o formulário de exemplo

    Exemplo de formulário para pedir a criação de uma máquina virtual do Google Cloud
    Nome do computador

    Texto de resposta curta

    Zona

    Menu pendente:

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

    Menu pendente:

    1. e2-micro
    2. e2-small
    3. e2-medium
    4. e2-standard-2
    5. e2-standard-4
    Tamanho do disco (GB)

    Texto de resposta curta

    Sistema operativo

    Menu pendente:

    1. debian-10
    2. centos-stream-9
    3. cos-93-lts
    4. cos-97-lts
  4. Ative a recolha de emails para registar os endereços de email das pessoas que preenchem o seu formulário:
    1. Clique em Definições.
    2. Expanda a secção Respostas.
    3. Clique no botão Recolher endereços de email.

Depois de criar um formulário, associe-lhe uma folha de cálculo para poder guardar as respostas do formulário nessa folha de cálculo. A folha de cálculo é guardada no Drive.

  1. Abra o formulário no Forms.
  2. Clique em Respostas.
  3. Clique em Associar ao Sheets.
  4. Na caixa de diálogo Selecionar o destino das respostas, selecione Criar uma nova folha de cálculo.
  5. Clique em Criar.

    A folha de cálculo associada é aberta.

  6. Na coluna H, adicione um cabeçalho Approved?.

  7. Coloque o cursor na primeira linha da coluna H e selecione Inserir > Caixa de verificação.

    A folha de cálculo deve ter um aspeto semelhante ao seguinte:

    Exemplo de folha de cálculo associada para recolher pedidos

    Sempre que a folha é atualizada com uma resposta, a caixa de verificação também aparece na linha dessa resposta.

Expanda o Google Sheets com o Apps Script

O Apps Script permite-lhe criar, ler e editar folhas de cálculo de forma programática. A maioria dos scripts concebidos para o Sheets manipulam matrizes para interagir com as células, as linhas e as colunas numa folha de cálculo. Para uma introdução à utilização do Apps Script com o Sheets, consulte o Início rápido de funções personalizadas.

  1. Crie um projeto do Apps Script a partir do Sheets:

    1. Abra a folha de cálculo do Sheets.
    2. Selecione Extensões > Apps Script.
    3. No editor de scripts, clique em Projeto sem título.
    4. Atribua um nome ao projeto e clique em Mudar o nome.

    O seu script está agora associado à folha de cálculo, o que confere ao script a capacidade de alterar a interface do utilizador ou responder quando a folha de cálculo é aberta.

    Um projeto de script representa uma coleção de ficheiros e recursos do Apps Script. Os ficheiros de código num projeto de script têm uma extensão..gs

  2. Pode usar o Apps Script para escrever funções personalizadas que pode usar no Sheets tal como uma função incorporada. As funções personalizadas são criadas com JavaScript padrão. Crie uma função:

    1. Abra o seu projeto do Apps Script.
    2. Clique em Editor .
    3. Um ficheiro de script é apresentado como um ficheiro de projeto com o nome Code.gs. Para editar o ficheiro, selecione-o.
    4. Substitua qualquer código no editor de scripts pelo seguinte código que lê os dados na sua folha de cálculo e transmite-os como entrada para uma execução do fluxo de trabalho:

      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. Substitua your-project-id pelo ID do seu Google Cloud projeto.

      Pode encontrar o ID do projeto na página Boas-vindas da Google Cloud consola.

    6. Clique em Guardar .

  3. Os acionadores instaláveis do Apps Script permitem que um projeto de script execute uma função especificada quando determinadas condições são cumpridas, como quando uma folha de cálculo é aberta ou editada. Crie um acionador:

    1. Abra o seu projeto do Apps Script.
    2. Clique em Acionadores .
    3. Clique em Adicionar acionador.
    4. Na caixa de diálogo Adicionar acionador para YOUR_PROJECT_NAME, configure o acionador:
      1. Na lista Escolha a função a executar, selecione handleEdit.
      2. Na lista Escolha a implementação que deve ser executada, selecione Principal.
      3. Na lista Selecionar origem do evento, selecione Da folha de cálculo.
      4. Na lista Selecionar tipo de evento, selecione Na edição.
      5. Na lista Definições de notificação de falhas, selecione Notificar-me diariamente.
    5. Clique em Guardar.
    6. Se receber um pedido para escolher uma Conta Google, selecione a conta adequada e, de seguida, clique em Permitir.

      Isto permite que o seu projeto do Apps Script veja, edite, crie e elimine as suas folhas de cálculo do Sheets, bem como se ligue a um serviço externo.

  4. Um ficheiro de manifesto de um projeto do Apps Script é um ficheiro JSON que especifica informações básicas do projeto que o Apps Script precisa para executar um script com êxito. Tenha em atenção que o editor do Apps Script oculta os ficheiros de manifesto por predefinição para proteger as definições do seu projeto do Apps Script. Edite o ficheiro de manifesto:

    1. Abra o seu projeto do Apps Script.
    2. Clique em Definições do projeto .
    3. Selecione a caixa de verificação Mostrar ficheiro de manifesto "appsscript.json" no editor.
    4. Clique em Editor .
    5. O ficheiro de manifesto aparece como um ficheiro de projeto com o nome appsscript.json. Para editar o ficheiro, selecione-o.
    6. O campo oauthScopes especifica uma matriz de strings. Para definir os âmbitos de autorização que o seu projeto usa, adicione uma matriz com os âmbitos que quer suportados. Por exemplo:

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

      Isto define âmbitos explícitos para:

      • Ligar a um serviço externo
      • Ver, editar, configurar e eliminar os seus Google Cloud dados e ver o endereço de email da sua Conta Google
      • Ver, editar, criar e eliminar todas as suas folhas de cálculo do Sheets
    7. Clique em Guardar .

Implemente um fluxo de trabalho que crie uma instância de VM

Implemente um fluxo de trabalho acionado quando um pedido de criação de uma instância de VM é aprovado. O fluxo de trabalho chama o conetor da API Compute Engine para criar uma instância de VM do Compute Engine com base nas especificações recolhidas através do formulário.

Consola

  1. Na Google Cloud consola, aceda à página Fluxos de trabalho:

    Aceda a Fluxos de trabalho

  2. Clique em Criar.

  3. Introduza um nome para o novo fluxo de trabalho: create-vm-from-form.

  4. Na lista Região, selecione us-central1 (Iowa).

  5. Para a Conta de serviço, selecione a conta de serviço predefinida do Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com).

  6. Clicar em Seguinte.

  7. No editor de fluxos de trabalho, introduza a seguinte definição para o seu fluxo de trabalho:

    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. Clique em Implementar.

gcloud

  1. Crie um ficheiro de código-fonte para o seu fluxo de trabalho:

    touch create-vm-from-form.yaml
  2. Num editor de texto, copie o seguinte fluxo de trabalho para o ficheiro de código-fonte:

    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. Implemente o fluxo de trabalho introduzindo o seguinte 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

    Substitua PROJECT_NUMBER pelo seu Google Cloud número do projeto. Pode obter o número do projeto:

    gcloud projects describe PROJECT_ID

Teste o fluxo integral

Para confirmar que tudo está a funcionar como esperado, experimente executar todo o processo.

  1. Envie o formulário para si e responda às perguntas de forma adequada.

    Certifique-se de que as especificações que usa para criar uma instância de VM são válidas; caso contrário, a execução do fluxo de trabalho falha. Para mais informações, consulte o artigo Família de máquinas de uso geral do Compute Engine.

  2. Para enviar a sua resposta, clique em Enviar.

  3. Abra o formulário no Forms.

  4. Clique em Respostas.

  5. Clique em Ver no Sheets.

    A folha de cálculo associada é aberta.

  6. Na linha da sua resposta, selecione a caixa de verificação Aprovado?.

  7. Abra o seu projeto do Apps Script.

  8. Clique em Execuções .

    O acionador deve ser executado e apresentado com o estado Completed.

  9. Confirme que o fluxo de trabalho create-vm-from-form foi concluído com êxito:

    Consola

    1. Na Google Cloud consola, aceda à página Fluxos de trabalho.

      Aceda a Fluxos de trabalho

    2. Na página Fluxos de trabalho, clique no fluxo de trabalho create-vm-from-form para aceder à respetiva página de detalhes.

    3. Na página Detalhes do fluxo de trabalho, para aceder aos detalhes de uma execução específica, clique no ID de execução adequado.

      O Estado de execução deve ser Succeeded e, no painel Input, deve ver as especificações da VM que pediu.

    gcloud

    Recupere uma lista das tentativas de execução do seu fluxo de trabalho:

    gcloud workflows executions list create-vm-from-form

    O resultado deve ser semelhante ao seguinte:

    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. Confirme que foi criada uma nova VM conforme esperado:

    Consola

    Na Google Cloud consola, aceda à página Instâncias de VM.

    Aceder às instâncias de VM

    A sua instância de VM deve ser apresentada com um estado que indica que está em execução.

    gcloud

    Apresente uma lista agregada de todas as VMs em todas as zonas de um projeto:

    gcloud compute instances list

    A sua instância de VM deve ser apresentada com um estado que indica que está em execução.

    Para mais informações sobre o comando gcloud compute instances list, consulte a respetiva página de referência.

Limpar

Se criou um novo projeto para este tutorial, elimine o projeto. Se usou um projeto existente e quer mantê-lo sem as alterações adicionadas neste tutorial, elimine os recursos criados para o tutorial.

Elimine o projeto

A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.

Para eliminar o projeto:

  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.

Elimine os recursos criados neste tutorial

  1. Elimine ficheiros no Drive.
  2. Elimine uma instância de VM do Compute Engine.
  3. Elimine um fluxo de trabalho.

O que se segue?