Crea un activador con Terraform

En este documento, se describe cómo usar Terraform y el recurso google_eventarc_trigger para crear activadores de Eventarc para los siguientes destinos de Google Cloud:

Para obtener más información sobre el uso de Terraform, consulta la documentación de Terraform en Google Cloud.

Las muestras de código de esta guía enrutan eventos directos de Cloud Storage, pero se pueden adaptar a cualquier proveedor de eventos. Por ejemplo, para aprender a enrutar eventos directos de Pub/Sub a Cloud Run, consulta la guía de inicio rápido de Terraform.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  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 role (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 role (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. Habilita las APIs de Cloud Resource Manager y de Identity and Access Management (IAM).

    Roles necesarios para habilitar las APIs

    Para habilitar las APIs, necesitas el rol de IAM de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin), que contiene el permiso serviceusage.services.enable. Obtén más información para otorgar roles.

    Habilitar las API

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

    Activa Cloud Shell

    En la parte inferior de la consola de Google Cloud , se inicia una sesión de Cloud Shell que muestra una ventana emergente con una 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.

  8. Terraform está integrado en el entorno de Cloud Shell, y puedes usar Cloud Shell para implementar tus recursos de Terraform sin tener que instalar Terraform.

Preparación para implementar Terraform

Antes de implementar cualquier recurso de Terraform, debes crear un archivo de configuración de Terraform. Un archivo de configuración de Terraform te permite definir el estado final que prefieras para tu infraestructura con la sintaxis de Terraform.

Prepara Cloud Shell

En Cloud Shell, establece el proyecto Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform. Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio:

export GOOGLE_CLOUD_PROJECT=PROJECT_ID

Reemplaza PROJECT_ID por el ID de tu Google Cloud proyecto.

Ten en cuenta que las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.

Prepara el directorio

Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz). En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio:

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

El nombre del archivo debe tener la extensión .tf; por ejemplo, en este documento, se hace referencia al archivo como main.tf.

Define tu configuración de Terraform

Copia las muestras de código de Terraform aplicables en el archivo main.tf que acabas de crear. De manera opcional, puedes copiar el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.

Por lo general, aplicarás toda la configuración de una sola vez. Sin embargo, también puedes segmentar tus anuncios para que se muestren en un recurso específico. Por ejemplo:

terraform apply -target="google_eventarc_trigger.default"

Ten en cuenta que los ejemplos de código de Terraform usan la interpolación para sustituciones como variables de referencia, atributos de recursos y funciones de llamada.

Habilita las APIs

Por lo general, las muestras de Terraform suponen que las APIs necesarias están habilitadas en tu proyecto deGoogle Cloud . Usa el siguiente código para habilitar las 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
}

Crea una cuenta de servicio y configura su acceso

Cada activador de Eventarc se asocia a una cuenta de servicio de IAM en el momento en que se crea el activador. Usa el siguiente código para crear una cuenta de servicio dedicada y otorgar a la cuenta de servicio administrada por el usuario roles específicos de administración de identidades y accesos para administrar eventos:

Cloud Run

# Used to retrieve project information later
data "google_project" "project" {}

# Create a dedicated service account
resource "google_service_account" "default" {
  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.default.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.default.email}"
}

El agente de servicio de Pub/Sub se crea automáticamente cuando se habilita la API de Pub/Sub. Si el agente de servicio de Pub/Sub se creó el 8 de abril de 2021 o antes de esa fecha, y la cuenta de servicio no tiene el rol de agente de servicio de Cloud Pub/Sub (roles/pubsub.serviceAgent), otorga el rol de creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) al agente de servicio. Para obtener más información, consulta Crea y otorga roles a los agentes de servicio.

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 crear la cuenta de servicio, habilita Eventarc para administrar clústeres de 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. Crea la cuenta de servicio:

    # 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}"
}

El agente de servicio de Pub/Sub se crea automáticamente cuando se habilita la API de Pub/Sub. Si el agente de servicio de Pub/Sub se creó el 8 de abril de 2021 o antes de esa fecha, y la cuenta de servicio no tiene el rol de agente de servicio de Cloud Pub/Sub (roles/pubsub.serviceAgent), otorga el rol de creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator) al agente de servicio. Para obtener más información, consulta Crea y otorga roles a los agentes de servicio.

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

Crear un bucket de Cloud Storage como fuente del evento

Usa el siguiente código para crear un bucket de Cloud Storage y otorgar el rol de publicador de Pub/Sub (roles/pubsub.publisher) al agente de servicio de 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}"

  depends_on = [data.google_storage_project_service_account.gcs_account]
}

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

Crea un receptor de eventos para que sea el destino del evento

Crea un receptor de eventos con uno de los siguientes recursos de Terraform:

Cloud Run

Crea un servicio de Cloud Run como destino del evento para el activador de 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.default.email
  }

  depends_on = [google_project_service.run]
}

GKE

Para simplificar esta guía, crea un servicio de Google Kubernetes Engine como destino de eventos fuera de Terraform, entre la aplicación de las configuraciones de Terraform.

  1. Si no creaste un activador en este proyecto de Google Cloud antes, ejecuta el siguiente comando para crear el agente de servicio de Eventarc:

    gcloud beta services identity create --service eventarc.googleapis.com
  2. Crea un clúster de 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. Implementa un servicio de Kubernetes en GKE que recibirá solicitudes HTTP y eventos de registro mediante una imagen compilada previamente de Cloud Run, us-docker.pkg.dev/cloudrun/container/hello:

    1. Obtén credenciales de autenticación para interactuar con el clúster:

      gcloud container clusters get-credentials eventarc-cluster \
         --region=us-central1
      
    2. Crea una implementación llamada hello-gke:

      kubectl create deployment hello-gke \
         --image=us-docker.pkg.dev/cloudrun/container/hello
      
    3. Expón la implementación como un servicio de Kubernetes:

      kubectl expose deployment hello-gke \
         --type ClusterIP --port 80 --target-port 8080
      
    4. Asegúrate de que el pod se esté ejecutando:

      kubectl get pods
      

      El resultado debería ser similar al siguiente ejemplo:

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

      Si STATUS es Pending o ContainerCreating, el Pod se está implementando. Espera un minuto para que se complete la implementación y vuelve a verificar el estado.

    5. Asegúrate de que el servicio se esté ejecutando:

      kubectl get svc
      

      El resultado debería ser similar al siguiente ejemplo:

      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

Implementa un flujo de trabajo que se ejecute cuando se actualice un objeto en el bucket de 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
  ]
}

Define un activador de Eventarc

Un activador de Eventarc enruta eventos de un proveedor de eventos a un destino de eventos. Usa el recurso google_eventarc_trigger para especificar atributos de CloudEvents en matching_criteria y filtrar los eventos. Si deseas obtener más información, sigue las instrucciones cuando crees un activador para un proveedor, un tipo de evento y un destino específicos. Solo los eventos que coinciden con todos los filtros se envían al destino.

Cloud Run

Crea un activador de Eventarc que enrute los eventos de Cloud Storage al servicio de 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
    }
  }

  # Specify a single delivery attempt with no retries
  retry_policy {
    max_attempts = 1
  }

  service_account = google_service_account.default.email
  depends_on = [
    google_project_service.eventarc,
    google_storage_bucket.default,
    google_project_iam_member.pubsubpublisher
  ]
}

GKE

Crear un activador de Eventarc que enrute los eventos de Cloud Storage al servicio de 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

Crea un activador de Eventarc que enrute los eventos de Cloud Storage al flujo de trabajo llamado 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,
  ]
}

Aplica Terraform

Usa la CLI de Terraform para aprovisionar la infraestructura según el archivo de configuración.

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

  1. Inicializa Terraform. Solo debes hacerlo una vez por directorio.

    terraform init

    De manera opcional, incluye la opción -upgrade para usar la última versión del proveedor de Google:

    terraform init -upgrade
  2. Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:

    terraform plan

    Corrige la configuración según sea necesario.

  3. Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe yes cuando se te solicite:

    terraform apply

    Espera hasta que Terraform muestre el mensaje “¡Aplicación completa!”.

Verifica la creación de recursos

Cloud Run

  1. Confirma que se haya creado el servicio:

    gcloud run services list --region us-central1
    
  2. Confirma que se haya creado el activador:

    gcloud eventarc triggers list --location us-central1
    

    El resultado debería ser similar al siguiente ejemplo:

    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. Confirma que se haya creado el servicio:

    kubectl get service hello-gke
    
  2. Confirma que se haya creado el activador:

    gcloud eventarc triggers list --location us-central1
    

    El resultado debería ser similar al siguiente ejemplo:

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

Workflows

  1. Confirma que se haya creado el flujo de trabajo:

    gcloud workflows list --location us-central1
    
  2. Confirma que se haya creado el activador de Eventarc:

    gcloud eventarc triggers list --location us-central1
    

    El resultado debería ser similar al siguiente ejemplo:

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

Genera y visualiza un evento

Puedes generar un evento y confirmar que el activador de Eventarc funcione según lo esperado.

  1. Recupera el nombre del bucket de Cloud Storage que creaste anteriormente:

    gcloud storage ls
    
  2. Sube un archivo de texto al bucket de Cloud Storage:

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

    Reemplaza BUCKET_NAME por el nombre del bucket de Cloud Storage que recuperaste en el paso anterior. Por ejemplo:

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

    La carga genera un evento y el servicio de receptor de eventos registra el mensaje del evento.

  3. Verifica que se haya recibido un evento:

    Cloud Run

    1. Filtra las entradas de registro creadas por tu servicio:

      gcloud logging read 'jsonPayload.message: "Received event of type google.cloud.storage.object.v1.finalized."'
      
    2. Busca una entrada de registro similar a la que se muestra a continuación:

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

    GKE

    1. Busca el ID del Pod:

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

      Este comando usa el resultado con formato de kubectl.

    2. Verifica los registros del Pod:

      kubectl logs $POD_NAME
      
    3. Busca una entrada de registro similar a la que se muestra a continuación:

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

    Workflows

    1. Para verificar que una ejecución de Workflow se active, enumera las últimas cinco ejecuciones:

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

      El resultado debe incluir una lista de ejecuciones con NAME, STATE, START_TIME y END_TIME.

    2. Para obtener los resultados de la ejecución más reciente, haz lo siguiente:

      EXECUTION_NAME=$(gcloud workflows executions list storage-workflow-tf --limit=1 --format "value(name)")
      gcloud workflows executions describe $EXECUTION_NAME
      
    3. Confirma que el resultado sea similar al siguiente:

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

Realiza una limpieza

Quita los recursos que se aplicaron antes con tu configuración de Terraform a través de la ejecución del siguiente comando y, luego, ingresa yes cuando se te solicite:

terraform destroy

También puedes borrar tu proyecto Google Cloud para evitar que se apliquen cargos. Si borras tu proyecto de Google Cloud , se detendrá la facturación de todos los recursos que se usaron en él.

  1. En la Google Cloud consola, 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.

¿Qué sigue?