Crie um acionador com o Terraform

Este documento descreve como usar o Terraform e o recurso google_eventarc_trigger para criar acionadores do Eventarc para os seguintes destinos Google Cloud:

Para mais informações sobre a utilização do Terraform, consulte a documentação do Terraform no Google Cloud.

Os exemplos de código neste guia encaminham eventos diretos do Cloud Storage, mas podem ser adaptados para qualquer fornecedor de eventos. Por exemplo, para saber como encaminhar eventos diretos do Pub/Sub para o Cloud Run, consulte o início rápido do Terraform.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Enable the Cloud Resource Manager and Identity and Access Management (IAM) APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  7. 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.

  8. O Terraform está integrado no ambiente do Cloud Shell e pode usar o Cloud Shell para implementar os seus recursos do Terraform sem ter de instalar o Terraform.

    Prepare-se para implementar o Terraform

    Antes de implementar quaisquer recursos do Terraform, tem de criar um ficheiro de configuração do Terraform. Um ficheiro de configuração do Terraform permite-lhe definir o estado final preferido para a sua infraestrutura através da sintaxe do Terraform.

    Prepare o Cloud Shell

    No Cloud Shell, defina o projeto Google Cloud predefinido onde quer aplicar as configurações do Terraform. Só tem de executar este comando uma vez por projeto e pode executá-lo em qualquer diretório:

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Substitua PROJECT_ID pelo ID do seu Google Cloud projeto.

    Tenha em atenção que as variáveis de ambiente são substituídas se definir valores explícitos no ficheiro de configuração do Terraform.

    Prepare o diretório

    Cada ficheiro de configuração do Terraform tem de ter o seu próprio diretório (também denominado módulo raiz). No Cloud Shell, crie um diretório e um novo ficheiro nesse diretório:

    mkdir DIRECTORY && cd DIRECTORY && touch main.tf

    O nome do ficheiro tem de ter a extensão .tf. Por exemplo, neste documento, o ficheiro é referido como main.tf.

    Defina a configuração do Terraform

    Copie os exemplos de código do Terraform aplicáveis para o ficheiro main.tf recém-criado. Opcionalmente, pode copiar o código do GitHub. Isto é recomendado quando o fragmento do Terraform faz parte de uma solução completa.

    Normalmente, aplica toda a configuração de uma só vez. No entanto, também pode segmentar um recurso específico. Por exemplo:

    terraform apply -target="google_eventarc_trigger.default"

    Tenha em atenção que os exemplos de código do Terraform usam a interpolação para substituições, como variáveis de referência, atributos de recursos e funções de chamada.

    Ativar APIs

    Normalmente, os exemplos do Terraform partem do princípio de que as APIs necessárias estão ativadas no seu Google Cloud projeto. Use o seguinte código para ativar as APIs:

    Cloud Run

    # Enable Cloud Run API
    resource "google_project_service" "run" {
      service            = "run.googleapis.com"
      disable_on_destroy = false
    }
    
    # Enable Eventarc API
    resource "google_project_service" "eventarc" {
      service            = "eventarc.googleapis.com"
      disable_on_destroy = false
    }
    
    # Enable Pub/Sub API
    resource "google_project_service" "pubsub" {
      service            = "pubsub.googleapis.com"
      disable_on_destroy = false
    }

    GKE

    # Enable GKE API
    resource "google_project_service" "container" {
      service            = "container.googleapis.com"
      disable_on_destroy = false
    }
    
    # Enable Eventarc API
    resource "google_project_service" "eventarc" {
      service            = "eventarc.googleapis.com"
      disable_on_destroy = false
    }
    
    # Enable Pub/Sub API
    resource "google_project_service" "pubsub" {
      service            = "pubsub.googleapis.com"
      disable_on_destroy = false
    }

    Workflows

    # Enable Workflows API
    resource "google_project_service" "workflows" {
      service            = "workflows.googleapis.com"
      disable_on_destroy = false
    }
    
    # Enable Eventarc API
    resource "google_project_service" "eventarc" {
      service            = "eventarc.googleapis.com"
      disable_on_destroy = false
    }
    
    # Enable Pub/Sub API
    resource "google_project_service" "pubsub" {
      service            = "pubsub.googleapis.com"
      disable_on_destroy = false
    }

    Crie uma conta de serviço e configure o respetivo acesso

    Cada acionador do Eventarc está associado a uma conta de serviço do IAM no momento em que o acionador é criado. Use o seguinte código para criar uma conta de serviço dedicada e conceder à conta de serviço gerida pelo utilizador funções de gestão de identidade e de acesso específicas para gerir eventos:

    Cloud Run

    # Used to retrieve project information later
    data "google_project" "project" {}
    
    # Create a dedicated service account
    resource "google_service_account" "eventarc" {
      account_id   = "eventarc-trigger-sa"
      display_name = "Eventarc Trigger Service Account"
    }
    
    # Grant permission to receive Eventarc events
    resource "google_project_iam_member" "eventreceiver" {
      project = data.google_project.project.id
      role    = "roles/eventarc.eventReceiver"
      member  = "serviceAccount:${google_service_account.eventarc.email}"
    }
    
    # Grant permission to invoke Cloud Run services
    resource "google_project_iam_member" "runinvoker" {
      project = data.google_project.project.id
      role    = "roles/run.invoker"
      member  = "serviceAccount:${google_service_account.eventarc.email}"
    }

    O agente de serviço do Pub/Sub é criado automaticamente quando a API Pub/Sub é ativada. Se o agente de serviço do Pub/Sub foi criado a 8 de abril de 2021 ou antes, e a conta de serviço não tiver a função de agente de serviço do Cloud Pub/Sub (roles/pubsub.serviceAgent), conceda a função de criador de tokens de conta de serviço (roles/iam.serviceAccountTokenCreator) ao agente de serviço. Para mais informações, consulte o artigo Crie e conceda funções a agentes de serviço.

    resource "google_project_iam_member" "tokencreator" {
      project  = data.google_project.project.id
      role     = "roles/iam.serviceAccountTokenCreator"
      member   = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com"
    }

    GKE

    1. Antes de criar a conta de serviço, ative o Eventarc para gerir clusters do GKE:

      # Used to retrieve project_number later
      data "google_project" "project" {}
      
      # Enable Eventarc to manage GKE clusters
      # This is usually done with: gcloud eventarc gke-destinations init
      #
      # Eventarc creates a separate Event Forwarder pod for each trigger targeting a
      # GKE service, and  requires explicit permissions to make changes to the
      # cluster. This is done by granting permissions to a special service account
      # (the Eventarc P4SA) to manage resources in the cluster. This needs to be done
      # once per Google Cloud project.
      
      # This identity is created with: gcloud beta services identity create --service eventarc.googleapis.com
      # This local variable is used for convenience
      locals {
        eventarc_sa = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-eventarc.iam.gserviceaccount.com"
      }
      
      resource "google_project_iam_member" "computeViewer" {
        project = data.google_project.project.id
        role    = "roles/compute.viewer"
        member  = local.eventarc_sa
      }
      
      resource "google_project_iam_member" "containerDeveloper" {
        project = data.google_project.project.id
        role    = "roles/container.developer"
        member  = local.eventarc_sa
      }
      
      resource "google_project_iam_member" "serviceAccountAdmin" {
        project = data.google_project.project.id
        role    = "roles/iam.serviceAccountAdmin"
        member  = local.eventarc_sa
      }
    2. Crie a conta de serviço:

      # Create a service account to be used by GKE trigger
      resource "google_service_account" "eventarc_gke_trigger_sa" {
        account_id   = "eventarc-gke-trigger-sa"
        display_name = "Evenarc GKE Trigger Service Account"
      }
      
      # Grant permission to receive Eventarc events
      resource "google_project_iam_member" "eventreceiver" {
        project = data.google_project.project.id
        role    = "roles/eventarc.eventReceiver"
        member  = "serviceAccount:${google_service_account.eventarc_gke_trigger_sa.email}"
      }
      
      # Grant permission to subscribe to Pub/Sub topics
      resource "google_project_iam_member" "pubsubscriber" {
        project = data.google_project.project.id
        role    = "roles/pubsub.subscriber"
        member  = "serviceAccount:${google_service_account.eventarc_gke_trigger_sa.email}"
      }
      

    Workflows

    # Used to retrieve project information later
    data "google_project" "project" {}
    
    # Create a service account for Eventarc trigger and Workflows
    resource "google_service_account" "eventarc" {
      account_id   = "eventarc-workflows-sa"
      display_name = "Eventarc Workflows Service Account"
    }
    
    # Grant permission to invoke Workflows
    resource "google_project_iam_member" "workflowsinvoker" {
      project = data.google_project.project.id
      role    = "roles/workflows.invoker"
      member  = "serviceAccount:${google_service_account.eventarc.email}"
    }
    
    # Grant permission to receive events
    resource "google_project_iam_member" "eventreceiver" {
      project = data.google_project.project.id
      role    = "roles/eventarc.eventReceiver"
      member  = "serviceAccount:${google_service_account.eventarc.email}"
    }
    
    # Grant permission to write logs
    resource "google_project_iam_member" "logwriter" {
      project = data.google_project.project.id
      role    = "roles/logging.logWriter"
      member  = "serviceAccount:${google_service_account.eventarc.email}"
    }

    O agente de serviço do Pub/Sub é criado automaticamente quando a API Pub/Sub é ativada. Se o agente de serviço do Pub/Sub foi criado a 8 de abril de 2021 ou antes, e a conta de serviço não tiver a função de agente de serviço do Cloud Pub/Sub (roles/pubsub.serviceAgent), conceda a função de criador de tokens de conta de serviço (roles/iam.serviceAccountTokenCreator) ao agente de serviço. Para mais informações, consulte o artigo Crie e conceda funções a agentes de serviço.

    resource "google_project_iam_member" "tokencreator" {
      project  = data.google_project.project.id
      role     = "roles/iam.serviceAccountTokenCreator"
      member   = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com"
    }

    Crie um contentor do Cloud Storage como fornecedor de eventos

    Use o seguinte código para criar um contentor do Cloud Storage e conceder a função de publicador do Pub/Sub (roles/pubsub.publisher) ao agente de serviço do Cloud Storage.

    Cloud Run

    # Cloud Storage bucket names must be globally unique
    resource "random_id" "bucket_name_suffix" {
      byte_length = 4
    }
    
    # Create a Cloud Storage bucket
    resource "google_storage_bucket" "default" {
      name          = "trigger-cloudrun-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
      location      = google_cloud_run_v2_service.default.location
      force_destroy = true
    
      uniform_bucket_level_access = true
    }
    
    # Grant the Cloud Storage service account permission to publish pub/sub topics
    data "google_storage_project_service_account" "gcs_account" {}
    resource "google_project_iam_member" "pubsubpublisher" {
      project = data.google_project.project.id
      role    = "roles/pubsub.publisher"
      member  = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"
    }

    GKE

    # Cloud Storage bucket names must be globally unique
    resource "random_id" "bucket_name_suffix" {
      byte_length = 4
    }
    
    # Create a Cloud Storage bucket
    resource "google_storage_bucket" "default" {
      name          = "trigger-gke-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
      location      = "us-central1"
      force_destroy = true
    
      uniform_bucket_level_access = true
    }
    
    # Grant the Cloud Storage service account permission to publish pub/sub topics
    data "google_storage_project_service_account" "gcs_account" {}
    resource "google_project_iam_member" "pubsubpublisher" {
      project = data.google_project.project.id
      role    = "roles/pubsub.publisher"
      member  = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"
    }

    Workflows

    # Cloud Storage bucket names must be globally unique
    resource "random_id" "bucket_name_suffix" {
      byte_length = 4
    }
    
    # Create a Cloud Storage bucket
    resource "google_storage_bucket" "default" {
      name          = "trigger-workflows-${data.google_project.project.name}-${random_id.bucket_name_suffix.hex}"
      location      = google_workflows_workflow.default.region
      force_destroy = true
    
      uniform_bucket_level_access = true
    }
    
    # Grant the Cloud Storage service account permission to publish Pub/Sub topics
    data "google_storage_project_service_account" "gcs_account" {}
    resource "google_project_iam_member" "pubsubpublisher" {
      project = data.google_project.project.id
      role    = "roles/pubsub.publisher"
      member  = "serviceAccount:${data.google_storage_project_service_account.gcs_account.email_address}"
    }

    Crie um recetor de eventos para ser o destino do evento

    Crie um recetor de eventos com um dos seguintes recursos do Terraform:

    Cloud Run

    Crie um serviço do Cloud Run como um destino de eventos para o acionador do Eventarc:

    # Deploy Cloud Run service
    resource "google_cloud_run_v2_service" "default" {
      name     = "hello-events"
      location = "us-central1"
    
      deletion_protection = false # set to "true" in production
    
      template {
        containers {
          # This container will log received events
          image = "us-docker.pkg.dev/cloudrun/container/hello"
        }
        service_account = google_service_account.eventarc.email
      }
    
      depends_on = [google_project_service.run]
    }

    GKE

    Para simplificar este guia, crie um serviço do Google Kubernetes Engine como um destino de eventos fora do Terraform, entre a aplicação de configurações do Terraform.

    1. Se não tiver criado um acionador neste Google Cloud projeto anteriormente, execute o seguinte comando para criar o agente do serviço Eventarc:

      gcloud beta services identity create --service eventarc.googleapis.com
    2. Crie um cluster do GKE:

      # Create an auto-pilot GKE cluster
      resource "google_container_cluster" "gke_cluster" {
        name     = "eventarc-cluster"
        location = "us-central1"
      
        enable_autopilot = true
      
        depends_on = [
          google_project_service.container
        ]
      }
    3. Implemente um serviço Kubernetes no GKE que receba pedidos HTTP e registe eventos através de uma imagem do Cloud Run pré-criada:us-docker.pkg.dev/cloudrun/container/hello

      1. Obtenha credenciais de autenticação para interagir com o cluster:

        gcloud container clusters get-credentials eventarc-cluster \
           --region=us-central1
        
      2. Crie uma implementação com o nome hello-gke:

        kubectl create deployment hello-gke \
           --image=us-docker.pkg.dev/cloudrun/container/hello
        
      3. Exponha a implementação como um serviço do Kubernetes:

        kubectl expose deployment hello-gke \
           --type ClusterIP --port 80 --target-port 8080
        
      4. Certifique-se de que o pod está em execução:

        kubectl get pods
        

        O resultado deve ser semelhante ao seguinte:

        NAME                         READY   STATUS    RESTARTS   AGE
        hello-gke-5b6574b4db-rzzcr   1/1     Running   0          2m45s
        

        Se o valor de STATUS for Pending ou ContainerCreating, o pod está a ser implementado. Aguarde um minuto para que a implementação seja concluída e verifique novamente o estado.

      5. Certifique-se de que o serviço está em execução:

        kubectl get svc
        

        O resultado deve ser semelhante ao seguinte:

        NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
        hello-gke    ClusterIP   34.118.230.123   <none>        80/TCP    4m46s
        kubernetes   ClusterIP   34.118.224.1     <none>        443/TCP   14m
        

    Workflows

    Implemente um fluxo de trabalho que é executado quando um objeto é atualizado no contentor do Cloud Storage:

    # Create a workflow
    resource "google_workflows_workflow" "default" {
      name            = "storage-workflow-tf"
      region          = "us-central1"
      description     = "Workflow that returns information about storage events"
      service_account = google_service_account.eventarc.email
    
      deletion_protection = false # set to "true" in production
    
      # Note that $$ is needed for Terraform
      source_contents = <<EOF
      main:
        params: [event]
        steps:
          - log_event:
              call: sys.log
              args:
                text: $${event}
                severity: INFO
          - gather_data:
              assign:
                - bucket: $${event.data.bucket}
                - name: $${event.data.name}
                - message: $${"Received event " + event.type + " - " + bucket + ", " + name}
          - return_data:
              return: $${message}
      EOF
    
      depends_on = [
        google_project_service.workflows
      ]
    }

    Defina um acionador do Eventarc

    Um acionador do Eventarc encaminha eventos de um fornecedor de eventos para um destino de eventos. Use o recurso google_eventarc_trigger para especificar atributos CloudEvents no matching_criteria e filtrar os eventos. Para mais informações, siga as instruções quando criar um acionador para um fornecedor, um tipo de evento e um destino específicos. Os eventos que correspondem a todos os filtros são enviados para o destino.

    Cloud Run

    Crie um acionador do Eventarc que encaminhe eventos do Cloud Storage para o serviço do Cloud Run.hello-event

    # Create an Eventarc trigger, routing Cloud Storage events to Cloud Run
    resource "google_eventarc_trigger" "default" {
      name     = "trigger-storage-cloudrun-tf"
      location = google_cloud_run_v2_service.default.location
    
      # Capture objects changed in the bucket
      matching_criteria {
        attribute = "type"
        value     = "google.cloud.storage.object.v1.finalized"
      }
      matching_criteria {
        attribute = "bucket"
        value     = google_storage_bucket.default.name
      }
    
      # Send events to Cloud Run
      destination {
        cloud_run_service {
          service = google_cloud_run_v2_service.default.name
          region  = google_cloud_run_v2_service.default.location
        }
      }
    
      service_account = google_service_account.eventarc.email
      depends_on = [
        google_project_service.eventarc,
        google_project_iam_member.pubsubpublisher
      ]
    }

    GKE

    Crie um acionador do Eventarc que encaminhe eventos do Cloud Storage para o serviço do GKE.hello-gke

    # Create an Eventarc trigger, routing Storage events to GKE
    resource "google_eventarc_trigger" "default" {
      name     = "trigger-storage-gke-tf"
      location = "us-central1"
    
      # Capture objects changed in the bucket
      matching_criteria {
        attribute = "type"
        value     = "google.cloud.storage.object.v1.finalized"
      }
      matching_criteria {
        attribute = "bucket"
        value     = google_storage_bucket.default.name
      }
    
      # Send events to GKE service
      destination {
        gke {
          cluster   = "eventarc-cluster"
          location  = "us-central1"
          namespace = "default"
          path      = "/"
          service   = "hello-gke"
        }
      }
    
      service_account = google_service_account.eventarc_gke_trigger_sa.email
    }

    Workflows

    Crie um acionador do Eventarc que encaminhe eventos do Cloud Storage para o fluxo de trabalho denominado storage-workflow-tf.

    # Create an Eventarc trigger, routing Cloud Storage events to Workflows
    resource "google_eventarc_trigger" "default" {
      name     = "trigger-storage-workflows-tf"
      location = google_workflows_workflow.default.region
    
      # Capture objects changed in the bucket
      matching_criteria {
        attribute = "type"
        value     = "google.cloud.storage.object.v1.finalized"
      }
      matching_criteria {
        attribute = "bucket"
        value     = google_storage_bucket.default.name
      }
    
      # Send events to Workflows
      destination {
        workflow = google_workflows_workflow.default.id
      }
    
      service_account = google_service_account.eventarc.email
    
      depends_on = [
        google_project_service.eventarc,
        google_project_service.workflows,
      ]
    }

    Aplique o Terraform

    Use a CLI do Terraform para aprovisionar a infraestrutura com base no ficheiro de configuração.

    Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.

    1. Inicialize o Terraform. Só tem de fazer isto uma vez por diretório.

      terraform init

      Opcionalmente, para usar a versão mais recente do fornecedor Google, inclua a opção -upgrade:

      terraform init -upgrade
    2. Reveja a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expetativas:

      terraform plan

      Faça as correções necessárias à configuração.

    3. Aplique a configuração do Terraform executando o seguinte comando e introduzindo yes no comando:

      terraform apply

      Aguarde até que o Terraform apresente a mensagem "Apply complete!" (Aplicação concluída!).

    Valide a criação de recursos

    Cloud Run

    1. Confirme que o serviço foi criado:

      gcloud run services list --region us-central1
      
    2. Confirme que o acionador foi criado:

      gcloud eventarc triggers list --location us-central1
      

      O resultado deve ser semelhante ao seguinte:

      NAME: trigger-storage-cloudrun-tf
      TYPE: google.cloud.storage.object.v1.finalized
      DESTINATION: Cloud Run service: hello-events
      ACTIVE: Yes
      LOCATION: us-central1
      

    GKE

    1. Confirme que o serviço foi criado:

      kubectl get service hello-gke
      
    2. Confirme que o acionador foi criado:

      gcloud eventarc triggers list --location us-central1
      

      O resultado deve ser semelhante ao seguinte:

      NAME: trigger-storage-gke-tf
      TYPE: google.cloud.storage.object.v1.finalized
      DESTINATION: GKE: hello-gke
      ACTIVE: Yes
      LOCATION: us-central1
      

    Workflows

    1. Confirme que o fluxo de trabalho foi criado:

      gcloud workflows list --location us-central1
      
    2. Confirme que o acionador do Eventarc foi criado:

      gcloud eventarc triggers list --location us-central1
      

      O resultado deve ser semelhante ao seguinte:

      NAME: trigger-storage-workflows-tf
      TYPE: google.cloud.storage.object.v1.finalized
      DESTINATION: Workflows: storage-workflow-tf
      ACTIVE: Yes
      LOCATION: us-central1
      

    Gere e veja um evento

    Pode gerar um evento e confirmar se o acionador do Eventarc está a funcionar conforme esperado.

    1. Recupere o nome do contentor do Cloud Storage que criou anteriormente:

      gcloud storage ls
      
    2. Carregue um ficheiro de texto para o contentor do Cloud Storage:

      echo "Hello World" > random.txt
      gcloud storage cp random.txt gs://BUCKET_NAME/random.txt
      

      Substitua BUCKET_NAME pelo nome do contentor do Cloud Storage que obteve no passo anterior. Por exemplo:

      gcloud storage cp random.txt gs://BUCKET_NAME/random.txt

      O carregamento gera um evento e o serviço de receção de eventos regista a mensagem do evento.

    3. Verifique se um evento é recebido:

      Cloud Run

      1. Filtre as entradas de registo criadas pelo seu serviço:

        gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.storage.object.v1.finalized."'
        
      2. Procure uma entrada de registo semelhante à seguinte:

        Received event of type google.cloud.storage.object.v1.finalized.
        Event data: { "kind": "storage#object", "id": "trigger-cloudrun-BUCKET_NAME/random.txt", ...}
        

      GKE

      1. Encontre o ID do pod:

        POD_NAME=$(kubectl get pods -o custom-columns=":metadata.name" --no-headers)
        

        Este comando usa a saída formatada do kubectl.

      2. Verifique os registos do pod:

        kubectl logs $POD_NAME
        
      3. Procure uma entrada de registo semelhante à seguinte:

        {"severity":"INFO","eventType":"google.cloud.storage.object.v1.finalized","message":
        "Received event of type google.cloud.storage.object.v1.finalized. Event data: ...}
        

      Workflows

      1. Verifique se a execução de fluxos de trabalho é acionada listando as últimas cinco execuções:

        gcloud workflows executions list storage-workflow-tf --limit=5
        

        O resultado deve incluir uma lista de execuções com um NAME, STATE, START_TIME e END_TIME.

      2. Obtenha os resultados da execução mais recente:

        EXECUTION_NAME=$(gcloud workflows executions list storage-workflow-tf --limit=1 --format "value(name)")
        gcloud workflows executions describe $EXECUTION_NAME
        
      3. Confirme se o resultado é semelhante ao seguinte:

        ...
        result: '"Received event google.cloud.storage.object.v1.finalized - BUCKET_NAME, random.txt"'
        startTime: '2024-12-13T17:23:50.451316533Z'
        state: SUCCEEDED
        ...
        

    Limpar

    Remova os recursos aplicados anteriormente com a sua configuração do Terraform executando o seguinte comando e introduzindo yes no comando:

    terraform destroy

    Também pode eliminar o seu Google Cloud projeto para evitar incorrer em custos. A eliminação do seu Google Cloud projeto interrompe a faturação de todos os recursos usados nesse 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.

    O que se segue?