Acionar um fluxo de trabalho nas Planilhas Google


O Planilhas Google é uma solução de planilhas baseada na nuvem compatível com colaboração em tempo real e que oferece ferramentas para visualizar, processar e comunicar dados.

Neste tutorial, mostramos como acionar Workflows no Planilhas.

Objetivos

Com este tutorial, você vai:

  1. Use o Formulários Google, um questionário baseado em nuvem e uma solução de pesquisa, para criar um formulário que pode enviar solicitações para criar instâncias de máquina virtual (VM).
  2. Vincule uma planilha do Planilhas Google ao formulário para coletar e salvar as respostas.
  3. Use o Google Apps Script, uma plataforma JavaScript baseada na nuvem que permite criar, ler e editar produtos do Google Workspace de maneira programática, para acionar um fluxo de trabalho sempre que uma solicitação for aprovada por meio de uma atualização da planilha.
  4. Implante um fluxo de trabalho que chame o conector da API Compute Engine e crie uma instância de VM do Compute Engine com base nas especificações coletadas no formulário. Os conectores simplificam a chamada de outras APIs do Google Cloud. Saiba mais sobre os conectores do Workflows.
  5. Teste todo o processo e confirme se uma instância de VM foi criada conforme esperado.

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados 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 nos apps gratuitos do Google para o consumidor são faturáveis.

Antes de começar

É possível executar alguns dos comandos a seguir no console do Google Cloud ou usando a Google Cloud CLI no seu terminal ou no Cloud Shell.

As restrições de segurança definidas pela sua organização podem impedir que você conclua as etapas a seguir. Para informações sobre solução de problemas, consulte Desenvolver aplicativos em um ambiente restrito do Google Cloud.

Console

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

    Acessar o seletor de projetos

  2. Verifique se a cobrança está ativada para o projeto do Google Cloud. Saiba como verificar se o faturamento está ativado em um projeto.

  3. Ative as APIs Compute Engine e Workflows.

    Ative as APIs

  4. Anote a conta de serviço padrão do Compute Engine, porque você a associará ao fluxo de trabalho deste tutorial para fins de teste. Novos projetos que ativaram a API Compute Engine têm essa conta de serviço criada com o papel Editor básico do IAM e com o seguinte formato de e-mail:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    O número do projeto está na página de boas-vindas do console do Google Cloud.

    Para ambientes de produção, é altamente recomendável criar uma nova conta de serviço e conceder a ela um ou mais papéis do IAM que contenham as permissões mínimas necessárias e sigam o princípio do privilégio mínimo.

gcloud

  1. No Console do Google Cloud, ative o Cloud Shell.

    Ativar o Cloud Shell

    Na parte inferior do Console do Google Cloud, uma sessão do Cloud Shell é iniciada e exibe um prompt de linha de comando. O Cloud Shell é um ambiente shell com a CLI do Google Cloud já instalada e com valores já definidos para o projeto atual. A inicialização da sessão pode levar alguns segundos.

  2. Verifique se a cobrança está ativada para o projeto do Google Cloud. Saiba como verificar se o faturamento está ativado em um projeto.

  3. Ative as APIs Compute Engine e Workflows.

    gcloud services enable \
        compute.googleapis.com \
        workflows.googleapis.com
    
  4. Anote a conta de serviço padrão do Compute Engine, porque você a associará ao fluxo de trabalho deste tutorial para fins de teste. Novos projetos que ativaram a API Compute Engine têm essa conta de serviço criada com o papel Editor básico do IAM e com o seguinte formato de e-mail:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    É possível recuperar o número do projeto:

    gcloud projects describe PROJECT_ID
    

    Para ambientes de produção, é altamente recomendável criar uma nova conta de serviço e conceder a ela um ou mais papéis do IAM que contenham as permissões mínimas necessárias e sigam o princípio do privilégio mínimo.

Criar um formulário para solicitar instâncias de VM

Crie um formulário que possa ser usado para enviar uma solicitação para criar uma instância de máquina virtual (VM) do Compute Engine. Por padrão, quando você cria um formulário nos Formulários Google, ele é salvo no Google Drive.

  1. Acesse forms.google.com.
  2. Clique em Em branco Mais.

    Um novo formulário será aberto.

  3. Crie um formulário com cinco seções obrigatórias. O formulário precisa ser semelhante ao seguinte:

    Veja o exemplo de formulário

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

    Texto de resposta curta

    Zona

    Menu suspenso:

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

    Menu suspenso:

    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 operacional

    Menu suspenso:

    1. debian-10
    2. centos-stream-9
    3. Cos-93-lts
    4. Cos-97-lts
  4. Ative a coleta de e-mails para registrar os endereços de e-mail das pessoas que preencherem seu formulário:
    1. Clique em Configurações.
    2. Expanda a seção Responses (Respostas).
    3. Clique no botão Coletar endereços de e-mail.

Depois de criar um formulário, vincule uma planilha a ele para salvar as respostas. A planilha será salva no Drive.

  1. Abra seu formulário no Formulários.
  2. Clique em Respostas.
  3. Clique em Link para o Planilhas.
  4. Na caixa de diálogo Selecionar destino para as respostas, escolha Criar uma nova planilha.
  5. Clique em Criar.

    A planilha vinculada é aberta.

  6. Na coluna H, adicione o título Aprovados?.

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

    A planilha deve ser semelhante a esta:

    Exemplo de planilha vinculada para coletar solicitações

    Sempre que a planilha for atualizada com uma resposta, a caixa de seleção também vai aparecer na linha dessa resposta.

Ampliar as Planilhas Google com o Apps Script

Com o Apps Script, você pode criar, ler e editar planilhas de maneira programática. A maioria dos scripts do Planilhas manipulam matrizes para interagir com células, linhas e colunas. Para uma introdução ao uso do Apps Script com o Planilhas, consulte o Guia de início rápido de funções personalizadas.

  1. Crie um projeto do Apps Script no app Planilhas:

    1. Abra sua planilha do Planilhas.
    2. Selecione Extensões > Apps Script.
    3. No editor de script, clique em Projeto sem título.
    4. Dê um nome ao projeto e clique em Renomear.

    Seu script agora está vinculado à planilha, o que permite que ele altere a interface do usuário ou responda quando a planilha for aberta.

    Um projeto de script representa um conjunto de arquivos e recursos do Apps Script. Os arquivos de código em um projeto de script têm uma extensão .gs.

  2. Use o Apps Script para criar funções personalizadas que podem ser usadas no app Planilhas como uma função integrada. As funções personalizadas são criadas usando JavaScript padrão. Crie uma função:

    1. Abra seu projeto do Apps Script.
    2. Clique em Editor .
    3. Um arquivo de script aparece como um arquivo de projeto chamado Code.gs. Para editar o arquivo, selecione-o.
    4. Substitua qualquer código no editor de script pelo seguinte código, que lê os dados na sua planilha e os transmite como entrada para a 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 projeto do Google Cloud.

      Encontre o ID do projeto na página Boas-vindas do console do Google Cloud.

    6. Clique em Salvar .

  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 atendidas, como quando uma planilha é aberta ou editada. Crie um gatilho:

    1. Abra seu projeto do Apps Script.
    2. Clique em Gatilhos .
    3. Clique em Adicionar gatilho.
    4. Na caixa de diálogo Adicionar gatilho para YOUR_PROJECT_NAME, configure o acionador:
      1. Na lista Escolher qual função executar, selecione handleEdit.
      2. Na lista Escolher qual implantação deve ser executada, selecione Cabeçalho.
      3. Na lista Selecionar origem do evento, selecione Da planilha.
      4. Na lista Selecionar tipo de evento, escolha Na edição.
      5. Na lista Configurações de notificação de falha, selecione Receber notificação diariamente.
    5. Clique em Salvar.
    6. Se você receber uma solicitação para escolher uma Conta do Google, selecione a opção apropriada e clique em Permitir.

      Isso permite que o projeto do Apps Script veja, edite, crie e exclua suas planilhas do Planilhas, além de se conectar a um serviço externo.

  4. Um arquivo de manifesto de projeto do Apps Script é um arquivo JSON que especifica as informações básicas do projeto necessárias para o Apps Script executar um script. O editor do Apps Script oculta arquivos de manifesto por padrão para proteger as configurações do projeto. Edite o arquivo de manifesto:

    1. Abra seu projeto do Apps Script.
    2. Clique em Configurações do projeto .
    3. Selecione a caixa de seleção Mostrar arquivo de manifesto "appsscript.json" no editor.
    4. Clique em Editor .
    5. O arquivo de manifesto aparece como um arquivo de projeto chamado appsscript.json. Para editar o arquivo, selecione-o.
    6. O campo oauthScopes especifica uma matriz de strings. Para definir os escopos de autorização usados pelo projeto, adicione uma matriz com os escopos que você quer aceitar. 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"
        ]
      }

      Define os escopos explícitos como:

      • Conectar a um serviço externo
      • Consultar, editar, configurar e excluir seus dados do Google Cloud, além de conferir o endereço de e-mail da sua Conta do Google
      • Ver, editar, criar e excluir todas as suas planilhas do Planilhas
    7. Clique em Salvar .

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

Implantar um fluxo de trabalho que é acionado quando uma solicitação para criar uma instância de VM é aprovada. O fluxo de trabalho chama o conector da API Compute Engine para criar uma instância de VM do Compute Engine com base nas especificações coletadas por meio do formulário.

Console

  1. No console do Google Cloud, acesse a página Fluxos de trabalho:

    Acessar fluxos de trabalho

  2. Clique em Criar.

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

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

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

  6. Clique em Próxima.

  7. No editor de fluxo de trabalho, insira a seguinte definição para 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. Selecione Implantar.

gcloud

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

    touch create-vm-from-form.yaml
    
  2. Em um editor de texto, copie o fluxo de trabalho a seguir para o arquivo 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. Implante o fluxo de trabalho digitando 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 número do projeto do Google Cloud. É possível recuperar o número do projeto:

    gcloud projects describe PROJECT_ID
    

Testar o fluxo de ponta a ponta

Para confirmar se tudo está funcionando conforme o esperado, tente executar todo o processo.

  1. Envie o formulário para si mesmo e responda às perguntas adequadamente.

    Verifique se as especificações usadas para criar uma instância de VM são válidas. Caso contrário, a execução do fluxo de trabalho falhará. Para mais informações, consulte a família de máquinas de uso geral do Compute Engine.

  2. Para enviar sua resposta, clique em Enviar.

  3. Abra seu formulário no Formulários.

  4. Clique em Respostas.

  5. Clique em Ver no app Planilhas.

    Sua planilha vinculada é aberta.

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

  7. Abra seu projeto do Apps Script.

  8. Clique em Execuções .

    O gatilho deve ser executado e listado com um status de Completed.

  9. Confirme se o fluxo de trabalho create-vm-from-form foi concluído com sucesso:

    Console

    1. No console do Google Cloud, abra a página Workflows.

      Acessar fluxos de trabalho

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

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

      O estado de execução precisa ser Concluído e, no painel de entrada, você verá as especificações da VM solicitadas.

    gcloud

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

    gcloud workflows executions list create-vm-from-form

    O resultado será semelhante a este:

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

    Console

    No console do Google Cloud, acesse a página Instâncias de VMs.

    Acessar instâncias de VM

    Sua instância de VM precisa estar listada com um status indicando que está em execução.

    gcloud

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

    gcloud compute instances list

    Sua instância de VM precisa estar listada com um status indicando que está em execução.

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

Limpar

Se você criou um novo projeto para este tutorial, exclua o projeto. Se você usou um projeto atual e quer mantê-lo sem as alterações incluídas neste tutorial, exclua os recursos criados para o tutorial.

Exclua o projeto

O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.

Para excluir o projeto:

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

Excluir recursos criados neste tutorial

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

A seguir