Enruta los eventos de Cloud Firestore a Cloud Run

Un activador de Eventarc declara tu interés en un evento o conjunto de eventos determinado. Si deseas configurar el enrutamiento del evento, especifica filtros para el activador, incluidos el origen del evento y el servicio Cloud Run de destino.

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

Cloud Firestore admite Auth Context como un atributo de extensión para el formato de CloudEvents. Cuando creas un activador, puedes aplicar este atributo de tipo de evento para filtrar eventos con información de autenticación.

En estas instrucciones, se muestra cómo configurar el enrutamiento de eventos en el servicio de Cloud Run que activa un evento Cloud Firestore directo. Para obtener más detalles, consulta la lista de eventos directos compatibles.

Prepárate para crear un activador

Antes de crear un activador, completa estos requisitos previos:

Consola

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

    Ir al selector de proyectos

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

    Habilita las API

  3. Si corresponde, habilita la API relacionada con los eventos directos. Por ejemplo, para eventos Cloud Firestore, habilita la API Cloud Firestore.

  4. Si aún no tienes una, crea una cuenta de servicio administrada por el usuario y, luego, otórgale los roles y los permisos necesarios para que Eventarc pueda administrar los eventos para el servicio de destino.

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

      Ve a Crear cuenta de servicio

    2. Elige tu proyecto.

    3. Escribe un nombre en el campo Nombre de cuenta de servicio. La consola de Google Cloud completa el campo ID de la cuenta de servicio en función de este nombre.

      Opcional: 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 Elegir un rol, elige los roles necesarios de Identity and Access Management (IAM) que otorgarás a tu cuenta de servicio para las invocaciones autenticadas o no autenticadas. Si deseas obtener más información, consulta Roles y permisos para destinos de Cloud Run.

      Para obtener roles adicionales, haz clic en Agregar otro rol y agrega cada rol adicional.

    6. Haz clic en Continuar.

    7. Para terminar de crear la cuenta, haz clic en Listo.

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 de Cloud Logging, Eventarc y Eventarc Publishing.

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

  3. Si corresponde, habilita la API relacionada con los eventos directos. Por ejemplo, para los eventos Cloud Firestore, habilita firestore.googleapis.com.

  4. Si aún no tienes una, crea una cuenta de servicio administrada por el usuario y, luego, otórgale los roles y los permisos necesarios para que Eventarc pueda administrar los eventos para el servicio de destino.

    1. Cree la cuenta de servicio:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Reemplaza SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio. Debe tener entre 6 y 30 caracteres y puede contener guiones y caracteres alfanuméricos en minúscula. Después de crear una cuenta de servicio, no podrás cambiar su nombre.

    2. Otorga los roles o permisos necesarios de Identity and Access Management (IAM) para las invocaciones autenticadas o no autenticadas. Si deseas obtener más información, consulta Roles y permisos para destinos de Cloud Run.

Crear un activador

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

Consola

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

    Ir a Activadores

  2. Haz clic en Crear activador.
  3. Escribe un nombre de activador.

    Este es el ID del activador y debe empezar con una letra. Puede contener hasta 63 letras en minúscula, números o guiones.

  4. Para el Tipo de activador, elige Fuentes de Google.
  5. En la lista Proveedor del evento, elige Cloud Firestore.

    Ten en cuenta que el nombre del proveedor de eventos que se usa en la documentación de Google Cloud asociada podría no tener el prefijo Cloud o Google Cloud. Por ejemplo, en la consola, Memorystore for Redis se denomina Google Cloud Memorystore para Redis.

  6. En la lista Tipo de evento, en los eventos Directos, selecciona un tipo de evento.
  7. En la lista Tipo de contenido de datos de eventos, elige la codificación de la carga útil del evento.

    Para los eventos directos de Cloud Firestore, debe ser application/protobuf y los datos de eventos son un array de bytes. Si deseas obtener más información sobre los mensajes protobuf para los eventos de Cloud Firestore, consulta Eventos comunes.

  8. En la lista Región, elige la misma región que el servicio de Google Cloud que genera los eventos.

    Para obtener más información, consulta Ubicaciones de Eventarc.

  9. Si corresponde al proveedor de eventos, haz clic en Agregar filtro y especifica lo siguiente:
    1. En el campo Atributo 1, según el evento directo que elijas, elige un ID de recurso que pueda funcionar como un filtro de evento.
    2. Elige un operador:
    3. En el campo Valor del atributo 1, según el operador que elegiste, escribe el valor exacto o aplica un patrón de ruta de acceso.
    4. Si un campo Atributo 2 es aplicable, especifica los valores adecuados.
  10. Elige la cuenta de servicio que invocará el servicio o el flujo de trabajo.

    O bien, puedes crear una cuenta de servicio nueva.

    Esto especifica el correo electrónico de la cuenta de servicio de Identity and Access Management (IAM) asociado con el activador y al que otorgaste antes roles específicos que requiere Eventarc.

  11. En la lista Destino del evento, elige Cloud Run.
  12. Elige un servicio.

    Este 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 POST HTTP enviadas a su ruta de URL raíz (/) cada vez que se genere el evento.

  13. De manera opcional, puedes especificar la ruta de URL de servicio a la que enviar la solicitud entrante.

    Esta es la ruta de acceso relativa en el servicio de destino al que se deben enviar los eventos del activador. Por ejemplo: /, /route, route, route/subroute.

  14. Haz clic en Crear.
  15. Después de que se crea un activador, los filtros de fuente del evento no se pueden cambiar. En su lugar, crea un activador nuevo y borra el anterior. Para obtener más información, consulta Administra activadores.

gcloud

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

Las marcas difieren según si ejecutas Firestore en modo nativo o en modo Datastore. Para obtener más información, consulta Elige entre el modo nativo y el modo Datastore.

Modo nativo

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="database=DATABASE" \
    --event-filters="namespace=NAMESPACE" \
    --event-filters-path-pattern="document=DOCUMENT" \
    --event-data-content-type="EVENT_DATA_CONTENT_TYPE" \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"

Modo Datastore

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="database=DATABASE" \
    --event-filters="namespace=NAMESPACE" \
    --event-filters-path-pattern="entity=ENTITY" \
    --event-data-content-type="EVENT_DATA_CONTENT_TYPE" \
    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com"

Reemplaza lo siguiente:

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

    Los activadores de Cloud Firestore para Eventarc solo están disponibles en ciertas ubicaciones y el activador debe estar en la misma ubicación que la base de datos de Cloud Firestore. Para obtener más información, consulta Ubicaciones de Eventarc y Ubicaciones de Cloud Firestore.

  • DESTINATION_RUN_SERVICE: el nombre del servicio de Cloud Run que recibe los eventos para el activador. El servicio puede estar en cualquiera de las ubicaciones admitidas de Cloud Run y no es necesario que esté 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 POST HTTP enviadas a su 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 supone que el servicio se encuentra en la misma región que el activador.
  • EVENT_FILTER_TYPE: el identificador del evento. Se genera un evento cuando una llamada a la API para el método se hace de forma correcta. Para las operaciones de larga duración, el evento solo se genera al final de la operación y solo si la acción se hace correctamente. Para obtener una lista de los tipos de eventos compatibles, consulta Tipos de eventos compatibles con Eventarc.
  • Cloud Firestore admite los siguientes tipos de eventos en solo modo nativo.

    • google.cloud.firestore.document.v1.created: el evento se envía cuando se escribe en un documento por primera vez
    • google.cloud.firestore.document.v1.created.withAuthContext: el evento con atributos de información de autenticación se envía cuando se escribe en un documento por primera vez
    • google.cloud.firestore.document.v1.updated: el evento se envía cuando ya existe un documento y se cambia algún valor
    • google.cloud.firestore.document.v1.updated.withAuthContext: el evento con atributos de información de autenticación se envía cuando ya existe un documento y se cambia algún valor
    • google.cloud.firestore.document.v1.deleted: el evento se envía cuando se borra un documento
    • google.cloud.firestore.document.v1.deleted.withAuthContext: el evento con atributos de información de autenticación se envía cuando se borra un documento
    • google.cloud.firestore.document.v1.written: el evento se envía cuando se crea, actualiza o borra un documento
    • google.cloud.firestore.document.v1.written.withAuthContext: el evento con atributos de información de autenticación se envía cuando se crea, actualiza o borra un documento.

    Cloud Firestore admite los siguientes tipos de eventos en solo modo Datastore. Los objetos de datos de Firestore en modo Datastore se conocen como entidades.

    • google.cloud.datastore.entity.v1.created: el evento se envía cuando se escribe una entidad en la primera vez
    • google.cloud.datastore.entity.v1.created.withAuthContext: el evento con atributos de información de autenticación se envía cuando se escribe en una entidad por primera vez
    • google.cloud.datastore.entity.v1.updated: el evento se envía cuando ya existe una entidad y se cambia algún valor
    • google.cloud.datastore.entity.v1.updated.withAuthContext: el evento con atributos de información de autenticación se envía cuando ya existe una entidad y se cambia algún valor
    • google.cloud.datastore.entity.v1.deleted: el evento se envía cuando se borra una entidad
    • google.cloud.datastore.entity.v1.deleted.withAuthContext: el evento con atributos de información de autenticación se envía cuando se borra una entidad
    • google.cloud.datastore.entity.v1.written: el evento se envía cuando se crea, actualiza o borra una entidad
    • google.cloud.datastore.entity.v1.written.withAuthContext: el evento con atributos de información de autenticación se envía cuando se crea, actualiza o borra una entidad
  • DATABASE: la base de datos de Firestore. Para ver el nombre de la base de datos predeterminada, usa (default).

  • NAMESPACE (opcional): el espacio de nombres de la base de datos de Firestore. Para el espacio de nombres predeterminado en el modo Datastore, usa (default). Si no se especifica, se realiza una coincidencia de comodines (*) con cualquier caso.

  • DOCUMENT (opcional): se aplica a instancias de bases de datos que se ejecutan solo en modo nativo. La ruta de la base de datos desde la que deseas recibir eventos desde la creación, actualización o eliminación de datos en esa ruta. El operador puede ser uno de los siguientes:

  • ENTITY (opcional): se aplica a instancias de bases de datos que se ejecutan solo en el modo Datastore. La ruta de la base de datos desde la que deseas recibir eventos desde la creación, actualización o eliminación de datos en esa ruta. El operador puede ser uno de los siguientes:

    • Iguales; por ejemplo, --event-filters="document=ENTITY"
    • Patrón de ruta de acceso; por ejemplo, --event-filters-path-pattern="ENTITY=ENTITY" Para obtener más información, consulta Información sobre los patrones de ruta de acceso.

      Ten en cuenta que es posible que debas descartar los caracteres de IDs de tipo y de IDs de la entidad. Descartar un carácter permite que el filtro de eventos interprete el ID de forma correcta. Para obtener más información, consulta Escape de caracteres.

  • EVENT_DATA_CONTENT_TYPE: la codificación de la carga útil del evento. Para los eventos directos de Firestore, debe ser application/protobuf y los datos de eventos son un array de bytes. Si deseas obtener más información sobre los mensajes protobuf para los eventos de Cloud Firestore, consulta Eventos comunes.

  • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio administrada por el usuario.
  • PROJECT_ID: Es el ID de tu proyecto de Google Cloud.

Notas:

  • Para los eventos directos de Cloud Firestore, la codificación de la carga útil del evento es application/protobuf.
  • La marca --event-filters="type=EVENT_FILTER_TYPE" es obligatoria. Si no se establece ningún otro filtro de eventos, se hace coincidir los eventos de todos los recursos.
  • EVENT_FILTER_TYPE no se puede cambiar después de su creación. Para cambiar EVENT_FILTER_TYPE, crea un activador nuevo y borra el anterior.
  • Cada activador tiene varios filtros de eventos, delimitados por comas en una marca --event-filters=[ATTRIBUTE=VALUE,…], o puedes repetir la marca para agregar más filtros. Solo los eventos que coinciden con todos los filtros se envían al destino. No se admiten comodines ni expresiones regulares. Sin embargo, cuando usas la marca --event-filters-path-pattern, puedes definir un patrón de ruta de acceso de recurso.
  • La marca --service-account se usa para especificar el correo electrónico de la cuenta de servicio de Identity and Access Management (IAM) asociado con el activador.
  • De manera opcional, especifica una ruta de acceso relativa en el servicio de Cloud Run de destino al que se deben enviar los eventos del activador con la marca --destination-run-path.

Ejemplo:

gcloud eventarc triggers create helloworld-trigger \
    --location=us-east1 \
    --destination-run-service=helloworld-events \
    --destination-run-region=us-east1 \
    --event-filters="type=google.cloud.firestore.document.v1.updated" \
    --event-filters="database=my-database" \
    --event-filters-path-pattern="document=users/my-document-*" \
    --event-data-content-type="application/protobuf" \
    --service-account=${SERVICE_ACCOUNT_NAME}@${PROJECT_ID}.iam.gserviceaccount.com

Con este comando, se crea un activador llamado helloworld-trigger para el evento identificado como google.cloud.firestore.document.v1.updated en la instancia de base de datos my-database que se ejecuta en modo nativo y se filtran los eventos de rutas de acceso document que coincidan con users/my-document-.

Enumera un activador

Para confirmar la creación de un activador, enumera los activadores de Eventarc con Google Cloud CLI o a través de la consola de Google Cloud.

Consola

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

    Ir a Activadores

    En esta página, se enumeran tus activadores en todas las ubicaciones y se incluyen detalles, como nombres, regiones, proveedores de eventos, destinos y mucho más.

  2. Para filtrar tus activadores, haz lo siguiente:

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

    Puedes elegir una sola propiedad o usar el operador lógico OR para agregar más propiedades.

  3. Para ordenar los activadores, junto con el encabezado de la columna compatible, haz clic en Ordenar.

gcloud

Ejecuta el siguiente comando para enumerar los activadores:

gcloud eventarc triggers list --location=-

Este comando enumera tus activadores en todas las ubicaciones y, además, incluye detalles como nombres, tipos, destinos y estados.

¿Qué sigue?