Dirigir eventos de Cloud Storage a Cloud Run

Un activador de Eventarc declara tu interés en un evento o en un conjunto de eventos concretos. Puede configurar el enrutamiento de eventos especificando filtros para el activador, incluida la fuente del evento y el servicio de Cloud Run de destino.

Eventarc envía eventos al receptor de eventos en formato CloudEvents a través de una solicitud HTTP.

En estas instrucciones se explica cómo configurar el enrutamiento de eventos a tu servicio de Cloud Run, que se activa mediante un eventoCloud Storage directo. Para obtener más información, consulta la lista de eventos directos admitidos.

Prepararse para crear un activador

Antes de crear un activador, completa estos requisitos previos:

Consola

  1. En la Google Cloud consola, en la página del selector de proyectos, selecciona o crea un Google Cloud proyecto.

    Ir al selector de proyectos

  2. Habilita las APIs Cloud Logging, Eventarc y Eventarc Publishing.

    Habilita las APIs

  3. Si procede, habilita la API relacionada con los eventos directos. Por ejemplo, para los eventos de Cloud Storage , habilita la APICloud Storage .

  4. Si aún no tienes una, crea una cuenta de servicio gestionada por el usuario y, a continuación, concédele los roles y permisos necesarios para que Eventarc pueda gestionar eventos de tu servicio de destino.

    1. En la Google Cloud consola, ve a la página Crear cuenta de servicio.

      Ir a Crear cuenta de servicio

    2. Selecciona el proyecto.

    3. En el campo Nombre de cuenta de servicio, escribe un nombre. La Google Cloud consola rellena el campo ID de cuenta de servicio con este nombre.

      En el campo Descripción de la cuenta de servicio, escribe una descripción. Por ejemplo, Service account for event trigger.

    4. Haz clic en Crear y continuar.

    5. Para proporcionar el acceso adecuado, en la lista Selecciona un rol, elige los roles de gestión de identidades y accesos (IAM) que quieras asignar a tu cuenta de servicio para las invocaciones autenticadas o no autenticadas. Para obtener más información, consulta Roles y permisos para destinos de Cloud Run.

      Para añadir más roles, haz clic en Añadir otro rol y añade cada rol adicional.

    6. Haz clic en Continuar.

    7. Para terminar de crear la cuenta, haga clic en Hecho.

  5. Asigna el rol Publicador de Pub/Sub al agente de servicio de Cloud Storage. Normalmente, es service-PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com. Puedes obtener la dirección de correo del agente de servicio de Cloud Storage.

    1. En la consola, ve a la página Gestión de identidades y accesos. Google Cloud

      Ir a IAM

    2. En la fila del agente de servicio de Cloud Storage, haz clic en Editar principal. Si el agente de servicio no aparece en la lista, ve al paso siguiente. Se abrirá el panel Editar acceso.

      1. Haz clic en Añadir otro rol y, a continuación, busca el rol Editor de Pub/Sub.
      2. Selecciona el rol.
      3. Haz clic en Guardar.
    3. Si el agente de servicio no aparece en la lista, haz clic en Dar acceso. Se abrirá el panel Dar acceso.

      1. En el campo Principales nuevos, introduce la dirección de correo del agente de servicio.
      2. En la lista Selecciona un rol, busca el rol Editor de Pub/Sub.
      3. Selecciona el rol.
      4. Haz clic en Guardar.

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. Habilita las APIs Cloud Logging, Eventarc y Eventarc Publishing.

    gcloud services enable logging.googleapis.com \
      eventarc.googleapis.com \
      eventarcpublishing.googleapis.com

  3. Si procede, habilita la API relacionada con los eventos directos. Por ejemplo, para los eventos, habilita Cloud Storage .storage.googleapis.com

  4. Si aún no tienes una, crea una cuenta de servicio gestionada por el usuario y, a continuación, concédele los roles y permisos necesarios para que Eventarc pueda gestionar eventos de tu servicio de destino.

    1. Crea la cuenta de servicio:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Sustituye SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio. Debe tener entre 6 y 30 caracteres, y puede contener caracteres alfanuméricos en minúscula y guiones. Una vez que hayas creado una cuenta de servicio, no podrás cambiar su nombre.

    2. Concede los roles o permisos de gestión de identidades y accesos necesarios para las invocaciones autenticadas o no autenticadas. Para obtener más información, consulta Roles y permisos para destinos de Cloud Run.

  5. Asigna el rol pubsub.publisher a la cuenta de servicio de Cloud Storage:

    SERVICE_ACCOUNT="$(gcloud storage service-agent --project=PROJECT_ID)"
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="serviceAccount:${SERVICE_ACCOUNT}" \
      --role="roles/pubsub.publisher"
    

Crear activador

Puedes crear un activador de Eventarc mediante la CLI de Google Cloud o a través de la Google Cloud consola.

Consola

  1. En la Google Cloud consola, ve a la página Triggers (Activadores) de Eventarc.

    Ir a Activadores

  2. Haz clic en Crear activador.
  3. Escribe un Nombre del activador.

    Es el ID del activador y debe empezar por una letra. Puede contener hasta 63 letras minúsculas, números o guiones.

  4. En Tipo de activador, selecciona Fuentes de Google.
  5. En la lista Event provider (Proveedor de eventos), seleccione Cloud Storage.

    Tenga en cuenta que el nombre del proveedor de eventos que se usa en la documentaciónGoogle Cloud asociada puede no tener el prefijo Cloud o Google Cloud. Por ejemplo, en la consola, Memorystore para Redis se denomina Google Cloud Memorystore para Redis.

  6. En la lista Tipo de evento, en los eventos Directos, selecciona un tipo de evento:
    • google.cloud.storage.object.v1.archived este evento se envía cuando una versión activa de un objeto se convierte en una versión no actual. Para obtener más información, consulta Gestión de versiones de objetos.
    • google.cloud.storage.object.v1.delete el evento se envía cuando se elimina un objeto de forma no definitiva. Para obtener más información, consulta Eliminación temporal.
    • google.cloud.storage.object.v1.finalized el evento se envía cuando se crea un objeto (o se sobrescribe un objeto ya disponible y se crea una nueva generación de ese objeto) en el segmento.
    • google.cloud.storage.object.v1.metadataUpdated se envía cuando cambian los [metadatos](/storage/docs/metadata) de un objeto.
  7. En la lista Tipo de contenido de datos de evento, seleccione la codificación de la carga útil del evento.

    En el caso de los eventos directos de Cloud Storage, este valor debe ser application/json.

  8. Especifica o busca el identificador único global del segmento de Cloud Storage.

    El segmento de Cloud Storage debe estar en el mismoGoogle Cloud proyecto y en la misma región o multirregión que el activador de Eventarc.

  9. Selecciona una región.

    Los activadores de Cloud Storage para Eventarc están disponibles en ubicaciones de una sola región, dos regiones y varias regiones. Ten en cuenta que el segmento de Cloud Storage debe estar en el mismo proyecto y en la misma región o multirregión que el activador de Eventarc. Google Cloud

    Los eventos se envían mediante notificaciones de Pub/Sub de Cloud Storage. Si se configuran demasiadas notificaciones registradas en el mismo contenedor, se puede agotar el límite de notificaciones del contenedor, tal como se indica en el error Cloud Storage bucket ...: Pub/Sub notification limit reached. Cada segmento puede tener un máximo de 10 configuraciones de notificaciones que se activen con un evento concreto. Consulta más cuotas y limitaciones en la página de cuotas y límites de Cloud Storage.

  10. Selecciona la cuenta de servicio que invocará tu servicio o flujo de trabajo.

    También puedes crear una cuenta de servicio.

    Especifica la dirección de correo de la cuenta de servicio de Gestión de Identidades y Accesos (IAM) asociada al activador y a la que has concedido roles específicos necesarios para Eventarc.

  11. En la lista Destino del evento, selecciona Cloud Run.
  12. Selecciona un servicio.

    Es el nombre del servicio que recibe los eventos del activador. El servicio debe estar en el mismo proyecto que el activador y recibirá eventos como solicitudes HTTP POST enviadas a la ruta de la URL raíz (/) cada vez que se genere el evento.

  13. También puede especificar la ruta de URL del servicio a la que se enviará la solicitud entrante.

    Es la ruta relativa del servicio de destino al que se deben enviar los eventos del activador. Por ejemplo: /, /route, route, route/subroute.

  14. Si quieres añadir una etiqueta, puedes hacer clic en Añadir etiqueta. Las etiquetas son pares clave-valor que te ayudan a organizar tus recursosGoogle Cloud . Para obtener más información, consulta ¿Qué son las etiquetas?
  15. Haz clic en Crear.
  16. Una vez creado un activador, no se pueden modificar los filtros de origen de eventos. En su lugar, cree un nuevo activador y elimine el antiguo. Para obtener más información, consulta Gestionar activadores.

gcloud

Para crear un activador, ejecuta un comando gcloud eventarc triggers create junto con las marcas obligatorias y opcionales.

gcloud eventarc triggers create TRIGGER \
    --location=LOCATION \
    --destination-run-service=DESTINATION_RUN_SERVICE \
    --destination-run-region=DESTINATION_RUN_REGION \
    --event-filters="type=EVENT_FILTER_TYPE" \
    --event-filters="bucket=BUCKET" \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

Haz los cambios siguientes:

  • TRIGGER: el ID del activador o un identificador completo.
  • LOCATION: la ubicación del activador de Eventarc. También puedes definir la propiedad eventarc/location ; por ejemplo, gcloud config set eventarc/location us-central1.

    El segmento de Cloud Storage debe estar en el mismo Google Cloud proyecto y región o multirregión que el activador de Eventarc. Para obtener más información, consulta Ubicaciones de Eventarc.

  • DESTINATION_RUN_SERVICE: el nombre del servicio de Cloud Run que recibe los eventos del activador. El servicio puede estar en cualquiera de las ubicaciones admitidas de Cloud Run y no tiene por qué estar en la misma ubicación que el activador. Sin embargo, el servicio debe estar en el mismo proyecto que el activador y recibirá eventos como solicitudes HTTP POST enviadas a la ruta de URL raíz (/) cada vez que se genere el evento.
  • DESTINATION_RUN_REGION: (opcional) la región en la que se puede encontrar el servicio de Cloud Run de destino. Si no se especifica, se presupone que el servicio está en la misma región que el activador.
  • EVENT_FILTER_TYPE: el identificador del evento de Cloud Storage. Puede ser uno de los siguientes:
    • google.cloud.storage.object.v1.finalized: el evento se envía cuando se crea un objeto (o se sobrescribe un objeto ya disponible y se crea una nueva generación de ese objeto) en el segmento.
    • google.cloud.storage.object.v1.archived: el evento se envía cuando la versión activa de un objeto se convierte en una versión no actual. Para obtener más información, consulta Gestión de versiones de objetos.
    • google.cloud.storage.object.v1.deleted: el evento se envía cuando se elimina un objeto de forma no definitiva. Para obtener más información, consulta Eliminación lógica.
    • google.cloud.storage.object.v1.metadataUpdated: event se envía cuando cambian los metadatos de un objeto.
  • BUCKET es el identificador único global del segmento de Cloud Storage.
  • SERVICE_ACCOUNT_NAME: el nombre de tu cuenta de servicio gestionada por el usuario.
  • PROJECT_ID: tu ID de proyecto Google Cloud .

Notas:

  • En el caso de los eventos directos de Cloud Storage, la codificación de la carga útil del evento es application/json.
  • Estas marcas son obligatorias:
    • --event-filters="type=EVENT_FILTER_TYPE"
    • --event-filters="bucket=BUCKET"
  • Cada activador puede tener varios filtros de eventos separados por comas en una --event-filters=[ATTRIBUTE=VALUE,...] marca, o bien puede repetir la marca para añadir más filtros. Solo se envían al destino los eventos que coinciden con todos los filtros. No se admiten comodines ni expresiones regulares.
  • Una vez creado un activador, no se puede cambiar el tipo de filtro de eventos. Si quieres usar otro tipo de evento, debes crear un nuevo activador.
  • Los eventos se envían mediante notificaciones de Pub/Sub de Cloud Storage. Si se configuran demasiadas notificaciones registradas en el mismo contenedor, se puede agotar el límite de notificaciones del contenedor, tal como indica el error Cloud Storage bucket ...: Pub/Sub notification limit reached. Cada segmento puede tener un máximo de 10 configuraciones de notificaciones que se activen con un evento concreto. Consulta más cuotas y limitaciones en la página de cuotas y límites de Cloud Storage.
  • La marca --service-account se usa para especificar la dirección de correo de la cuenta de servicio de gestión de identidades y accesos (IAM) asociada al activador.
  • También puede especificar una ruta relativa en el servicio Cloud Run de destino al que se deben enviar los eventos del activador mediante la marca --destination-run-path.

Ejemplo:

gcloud eventarc triggers create helloworld-trigger \
    --location=us-central1 \
    --destination-run-service=helloworld-events \
    --destination-run-region=us-central1 \
    --event-filters="type=google.cloud.storage.object.v1.finalized" \
    --event-filters="bucket=my-bucket" \
    --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com

Este comando crea un activador llamado helloworld-trigger para el segmento de Cloud Storage my-bucket y el evento identificado como google.cloud.storage.object.v1.finalized.

Terraform

Puedes crear un activador para un destino de Cloud Run con Terraform. Para obtener más información, consulta el artículo sobre cómo crear un activador con Terraform.

Mostrar un activador

Para confirmar que se ha creado un activador, puedes enumerar los activadores de Eventarc con la CLI de Google Cloud o a través de la Google Cloud consola.

Consola

  1. En la Google Cloud consola, ve a la página Triggers (Activadores) de Eventarc.

    Ir a Activadores

    En esta página se muestran todos tus activadores de todas las ubicaciones, así como detalles como nombres, regiones, proveedores de eventos, destinos y más.

  2. Para filtrar tus activadores, sigue estos pasos:

    1. Haz clic en Filtrar o en el campo Activar filtros.
    2. En la lista Propiedades, seleccione una opción para filtrar los activadores.

    Puede seleccionar una sola propiedad o usar el operador lógico OR para añadir más propiedades.

  3. Para ordenar los activadores, junto al encabezado de cualquier columna admitida, haz clic en Ordenar.

gcloud

Ejecuta el siguiente comando para ver una lista de tus activadores:

gcloud eventarc triggers list --location=-

Este comando muestra los activadores de todas las ubicaciones e incluye detalles como nombres, tipos, destinos y estados.

Siguientes pasos