Acionar fluxos de trabalho usando os Registros de auditoria do Cloud (CLI gcloud)

Neste guia de início rápido, mostramos como executar um fluxo de trabalho usando um gatilho do Eventarc que recebe eventos dos Registros de auditoria do Cloud do BigQuery. O BigQuery hospeda conjuntos de dados públicos que podem ser acessados e integrados aos seus aplicativos. O gatilho executa o fluxo de trabalho detectando um job do BigQuery que consulta um conjunto de dados público. Em seguida, ele transmite os eventos como argumentos de ambiente de execução para o fluxo de trabalho de destino.

Conclua este guia de início rápido usando a Google Cloud CLI.

  1. Use o Workflows para criar e implantar um fluxo de trabalho que extraia e retorne dados de um evento.
  2. Criar um gatilho do Eventarc que conecte um job do BigQuery a um receptor de eventos do Workflows
  3. Gerar um evento executando um job do BigQuery com a ferramenta de linha de comando bq. Esse evento é transmitido como um argumento de ambiente de execução para o fluxo de trabalho de destino.
  4. Veja os dados de eventos na saída da execução do fluxo de trabalho.

Antes de começar

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.

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. Instale a CLI do Google Cloud.
  3. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  4. Crie ou selecione um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud.

  5. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  6. Instale a CLI do Google Cloud.
  7. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  8. Crie ou selecione um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud.

  9. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  10. Atualize os componentes gcloud:
    gcloud components update
  11. Faça login usando sua conta:
    gcloud auth login
    
  12. Ative as APIs Compute Engine, Eventarc, Pub/Sub e Workflows.

    gcloud services enable \
    compute.googleapis.com \
    eventarc.googleapis.com \
    pubsub.googleapis.com \
    workflows.googleapis.com \
    workflowexecutions.googleapis.com
  13. Defina as variáveis de configuração usadas neste guia de início rápido:
    export WORKFLOW_LOCATION=us-central1
    export TRIGGER_LOCATION=us-central1
    export PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    gcloud config set workflows/location ${WORKFLOW_LOCATION}
    gcloud config set eventarc/location ${TRIGGER_LOCATION}
    
  14. Se você for o criador do projeto, receberá o papel de proprietário básico (roles/owner). Por padrão, esse papel do gerenciamento de identidade e acesso (IAM) inclui as permissões necessárias para acesso total à maioria dos recursos do Google Cloud, e você pode pular esta etapa.

    Se você não é o criador do projeto, as permissões necessárias precisam ser concedidas ao principal apropriado. Por exemplo, um principal pode ser uma Conta do Google (para usuários finais) ou uma conta de serviço (para aplicativos e cargas de trabalho de computação). Para mais informações, consulte a página Papéis e permissões do destino do evento.

    Permissões necessárias

    Para conseguir as permissões necessárias para concluir o guia de início rápido, peça ao administrador para conceder a você os seguintes papéis do IAM no seu projeto:

    Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

    Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.

  15. A conta de serviço padrão do Compute Engine é criada automaticamente depois de ativar ou usar um serviço do Google Cloud que usa o Compute Engine.

    Para fins de teste, é possível anexar essa conta de serviço a um gatilho do Eventarc para representar a identidade do gatilho. Observe o formato de e-mail a ser usado ao criar um acionador:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    Substitua PROJECT_NUMBER pelo número do projeto do Google Cloud. Encontre o número do projeto na página Boas-vindas do console do Google Cloud ou executando o seguinte comando:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    A conta de serviço do Compute Engine recebe o papel básico de Editor (roles/editor) de modo automático no projeto. No entanto, se as concessões automáticas de papéis tiverem sido desativadas, consulte as instruções aplicáveis em Papéis e permissões para criar uma nova conta de serviço e conceder os papéis necessários.

  16. Conceda o papel de receptor de eventos do Eventarc (roles/eventarc.eventReceiver) no projeto à conta de serviço padrão do Compute Engine para que o gatilho do Eventarc possa receber eventos de provedores de eventos.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver
  17. Conceda o papel Invocador do fluxo de trabalho (roles/workflows.invoker) no projeto à conta de serviço padrão do Compute Engine para que ela tenha permissão para acionar a execução do seu fluxo de trabalho.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/workflows.invoker
  18. Conceda o papel Gravador de registros do Logging (roles/logging.logWriter) no projeto à conta de serviço padrão do Compute Engine para que o fluxo de trabalho possa enviar registros ao Cloud Logging.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/logging.logWriter
  19. Se você ativou o agente de serviço do Cloud Pub/Sub até 8 de abril de 2021, para oferecer suporte a solicitações push autenticadas do Pub/Sub, conceda o papel Criador de token da conta de serviço. (roles/iam.serviceAccountTokenCreator) à conta de serviço gerenciada pelo Google. Caso contrário, esse papel é concedido por padrão:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator

Criar e implantar um fluxo de trabalho

Crie e implante um fluxo de trabalho que seja executado quando a conclusão de um job do BigQuery acionar um fluxo de trabalho com uma solicitação HTTP.

  1. Abra um terminal ou o Cloud Shell.
  2. No diretório inicial, crie um novo arquivo chamado myFirstWorkflow.yaml ou myFirstWorkflow.json.
  3. Copie e cole o seguinte no novo arquivo e salve:

    YAML

    main:
      params: [event]
      steps:
          - log_event:
              call: sys.log
              args:
                  text: ${event}
                  severity: INFO
          - extract_data:
              assign:
              - data: ${event.data.protoPayload}
          - return_data:
                  return:
                      data: ${data}

    JSON

    {
      "main": {
        "params": [
          "event"
        ],
        "steps": [
          {
            "log_event": {
              "call": "sys.log",
              "args": {
                "text": "${event}",
                "severity": "INFO"
              }
            }
          },
          {
            "extract_data": {
              "assign": [
                {
                  "data": "${event.data.protoPayload}"
                }
              ]
            }
          },
          {
            "return_data": {
              "return": {
                "data": "${data}"
              }
            }
          }
        ]
      }
    }
  4. Implante o fluxo de trabalho:
    export MY_WORKFLOW=myFirstWorkflow
    gcloud workflows deploy ${MY_WORKFLOW} --source=myFirstWorkflow.yaml
    

    Substitua .yaml por .json se você tiver copiado a versão JSON do fluxo de trabalho do exemplo.

Criar um gatilho do Eventarc

Para criar um gatilho do Eventarc que roteie eventos do BigQuery para um destino do Workflows, execute o comando gcloud eventarc triggers create.

  1. Crie um gatilho que filtre eventos do BigQuery:

    gcloud eventarc triggers create events-cal-trigger \
        --destination-workflow=${MY_WORKFLOW} \
        --destination-workflow-location=${WORKFLOW_LOCATION} \
        --event-filters="type=google.cloud.audit.log.v1.written" \
        --event-filters="serviceName=bigquery.googleapis.com" \
        --event-filters="methodName=google.cloud.bigquery.v2.JobService.InsertJob" \
        --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"
    

    Isso gera um gatilho chamado events-cal-trigger.

    Ao criar um gatilho do Eventarc pela primeira vez em um projeto do Google Cloud, pode haver um atraso no provisionamento do agente de serviço do Eventarc. Esse problema geralmente pode ser resolvido ao tentar criar o acionador novamente. Para mais informações, consulte Erros de permissão negada.

  2. Para confirmar se events-cal-trigger foi criado, execute:

    gcloud eventarc triggers describe events-cal-trigger --location=${TRIGGER_LOCATION}

    A saída lista a hora e o local de criação do gatilho e precisa ser semelhante a esta:

    createTime: '2021-10-14T15:15:43.872360951Z'
    [...]
    name: projects/PROJECT_ID/locations/us-central1/triggers/events-cal-trigger
    

Gerar e visualizar um evento

Execute um job do BigQuery usando a ferramenta de linha de comando bq para gerar eventos e acionar o fluxo de trabalho.

  1. Para acionar um fluxo de trabalho, execute um job do BigQuery que acesse um conjunto de dados público e recupere as informações dele:

    bq query --nouse_legacy_sql \
    'SELECT
    COUNT(*)
    FROM
    `bigquery-public-data`.samples.shakespeare'
    

    Os eventos gerados são transmitidos como argumentos de ambiente de execução para o fluxo de trabalho, que retorna os dados de payload como resultado da execução do fluxo de trabalho.

  2. Para verificar se o fluxo de trabalho foi acionado, liste as duas últimas execuções:

    gcloud workflows executions list ${MY_WORKFLOW} --limit=2
    

    Duas execuções de fluxo de trabalho são acionadas pelo job do BigQuery. Um evento sinaliza a mudança do job, e o outro sinaliza a própria inserção do job. A saída lista um NAME e um STATE igual a SUCCEEDED para cada uma das execuções e precisa ser semelhante a esta:

    NAME: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/a073ad6a-c76b-4437-8d39-2ab3ade289d2
    STATE: SUCCEEDED
    START_TIME: 2024-02-06T14:16:14.390549813Z
    END_TIME: 2024-02-06T14:16:14.870102511Z
    NAME: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/35d7c730-7ba5-4055-afee-c04ed706b179
    STATE: SUCCEEDED
    START_TIME: 2024-02-06T14:16:14.389882601Z
    END_TIME: 2024-02-06T14:16:14.829942525Z

    Na saída, a073ad6a-c76b-4437-8d39-2ab3ade289d2 do campo NAME é o ID da execução do fluxo de trabalho. Copie o ID de execução para usar na próxima etapa.

  3. Para ver o status da execução, execute o seguinte comando:

    gcloud workflows executions describe WORKFLOW_EXECUTION_ID --workflow=${MY_WORKFLOW}
    

    Substitua WORKFLOW_EXECUTION_ID pelo ID da execução do fluxo de trabalho que corresponde ao horário em que o job do BigQuery foi concluído.

    A saída será semelhante a esta:

    argument: [...]
    duration: 0.277917625s
    endTime: '2024-02-06T14:16:14.870102511Z'
    name: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/a073ad6a-c76b-4437-8d39-2ab3ade289d2
    result: '{"data": [...]}'
    startTime: '2024-02-06T14:16:14.390549813Z'
    state: SUCCEEDED
  4. Verifique se o startTime em que o job do BigQuery foi concluído e o START_TIME da execução do fluxo de trabalho correspondem entre si.

Você gerou com êxito um evento do BigQuery que acionou um receptor de eventos do Workflows usando o Eventarc.

Limpar

  1. Exclua o fluxo de trabalho que você criou:
    gcloud workflows delete ${MY_WORKFLOW}
    Quando perguntar se você quer continuar, digite y:
  2. Exclua o gatilho que você criou:
    gcloud eventarc triggers delete events-cal-trigger
  3. Se preferir, exclua o projeto do Google Cloud para evitar cobranças. A exclusão do projeto do Google Cloud interrompe o faturamento de todos os recursos usados nele.

    Exclua um projeto do Google Cloud:

    gcloud projects delete PROJECT_ID

A seguir