Crear activadores con Eventarc

En esta página, se muestra cómo crear un activador de Eventarc para que un servicio de Cloud Run pueda recibir eventos de otro servicio de Google Cloud .

Eventarc es un servicio de Google Cloudque te permite compilar arquitecturas basadas en eventos sin tener que implementar, personalizar ni mantener la infraestructura subyacente.

Puedes crear un activador de Eventarc especificando filtros para el activador y configurando el enrutamiento del evento, incluidos el origen del evento y el servicio Cloud Run de destino. Cuando el evento o el conjunto de eventos especificados coinciden con los filtros, se invoca automáticamente tu servicio de Cloud Run en respuesta a los eventos. Un servicio que utiliza disparadores de Eventarc se denomina servicio controlado por eventos. Los eventos enviados a tu servicio de Cloud Run se reciben en forma de solicitudes HTTP.

Los siguientes tipos de eventos pueden activar solicitudes a tu servicio:

Ubicación del activador

Cuando creas un activador de Eventarc, debes especificar una ubicación para él. Esto debe coincidir con la ubicación del recurso Google Cloud que desea monitorear para eventos. En la mayoría de los casos, también debes implementar tu servicio de Cloud Run basado en eventos en la misma región. Para obtener más información, consulte Entender las ubicaciones de Eventarc.

Identidad del activador

Cuando creas un activador de Eventarc, especificas una cuenta de servicio de Identity and Access Management (IAM) para él. El activador usa esta cuenta de servicio como su identidad predeterminada. Le recomendamos que especifique una cuenta de servicio administrada por el usuario y le otorgue los permisos mínimos necesarios.

Antes de comenzar

  1. Configura tu entorno de Cloud Run.

  2. Habilita las APIs de Artifact Registry, Cloud Build, Cloud Run Admin y Eventarc:

    Habilita las APIs

  3. Otorgar los roles y permisos de IAM necesarios.

Crea un activador para los servicios

Después de implementar un servicio, puede configurar un activador utilizando el Google Cloud consola, Google Cloud CLI o Terraform.

Console

  1. Implementa tu servicio de Cloud Run con contenedores o desde código fuente.

  2. En la Google Cloud consola, ve aCloud Run:

    Ir a Cloud Run

  3. En la lista de servicios, haz clic en un servicio existente.

  4. En la página de detalles del servicio, navega a la pestaña Activadores.

  5. Haz clic en Agregar activador y selecciona una opción.

  6. En el panel Eventarc trigger, modifique los detalles del disparador de la siguiente manera:

    1. En el campo Nombre del activador, introduzca un nombre para el activador o utilice el nombre predeterminado.

    2. Seleccione un Tipo de activador de la lista para especificar uno de los siguientes tipos de activador:

      • Fuentes de Google para especificar activadores para Pub/Sub, Cloud Storage, Firestore y otros proveedores de eventos de Google

      • Terceros para integrarte a proveedores externos a Google que ofrecen una fuente de Eventarc. Para obtener más información, consulta Eventos de terceros en Eventarc.

    3. Selecciona un proveedor de eventos en la lista Proveedor de eventos para elegir un producto que proporcione el tipo de evento para activar tu servicio. Para obtener la lista de proveedores de eventos, consulta Proveedores y destinos de eventos.

    4. Seleccione un tipo de evento de la lista Tipo de evento. La configuración del activador varía según el tipo de evento compatible. Para obtener más información, consulta Tipos de eventos.

    5. Si el campo Región está habilitado, selecciona una ubicación para el activador de Eventarc. En general, la ubicación de un activador de Eventarc debe coincidir con la ubicación del recurso de Google Cloud que deseas supervisar para detectar eventos. En la mayoría de los casos, también debes implementar tu servicio en la misma región. Consulta Información sobre las ubicaciones de Eventarc para obtener más detalles sobre las ubicaciones de activadores de Eventarc.

    6. En el campo Cuenta de servicio, selecciona una cuenta de servicio. Los activadores de Eventarc están vinculados a cuentas de servicio para usarlos como identidad cuando se invoca el servicio. La cuenta de servicio del activador de Eventarc debe tener permiso para invocar tu servicio. De forma predeterminada, Cloud Run usa la cuenta de servicio predeterminada de Compute Engine.

    7. De manera opcional, especifica la ruta de URL del servicio a la que se 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 y route/subroute.

    8. De manera opcional, para habilitar los reintentos si falla el intento de entrega, selecciona la casilla de verificación Habilitar reintento en caso de error. De lo contrario, el comportamiento predeterminado es un solo intento de entrega sin reintentos. Para obtener más información, consulte Eventos de reintento.

    9. Una vez que hayas completado los campos obligatorios, haz clic en Guardar activador.

  7. Después de crear el activador, verifica su estado. Para esto, asegúrate de que haya una marca de verificación en la pestaña Activadores.

gcloud

  1. Implementa tu servicio de Cloud Run con contenedores o desde código fuente.

  2. Ejecuta el siguiente comando para crear un activador que filtre y enrute eventos:

    gcloud eventarc triggers create TRIGGER_NAME  \
        --location=LOCATION \
        --destination-run-service=DESTINATION_RUN_SERVICE  \
        --destination-run-region=DESTINATION_RUN_REGION \
        --event-filters="type=EVENT_FILTER_TYPE" \
        --max-retry-attempts=1 \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.
    

    Reemplaza lo siguiente:

    • TRIGGER_NAME: ID del activador o un identificador completamente calificado.
    • 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.

      Para evitar problemas de rendimiento y residencia de datos, la ubicación debe coincidir con la ubicación del servicio Google Cloud que genera eventos. Para obtener más información, consulta Ubicaciones de Eventarc.

    • 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 ubicación de Cloud Run 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 únicamente si la acción se lleva a cabo correctamente. Para obtener una lista de los tipos de eventos compatibles, consulta Tipos de eventos de Google compatibles con Eventarc.
    • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio administrada por el usuario.
    • PROJECT_ID: Es el ID del proyecto de Google Cloud .

    Notas:

    • 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.
    • De manera opcional, para especificar un solo intento de entrega de eventos sin reintentos, usa la marca --max-retry-attempts. El único valor válido es 1. Si omite el indicador, se aplicará el comportamiento de reintento estándar. Para obtener más información, consulta Eventos de reintento.
    • Hay otras marcas disponibles. Para obtener más información, consulta gcloud eventarc triggers create

Terraform

Para crear un activador de Eventarc para un servicio de Cloud Run, consulta Crea un activador con Terraform.

Crea un activador para funciones

Después de implementar una función, puede configurar un activador utilizando la Google Cloud consola, Google Cloud CLI o Terraform.

Console

Cuando uses el Google Cloud Para crear una función desde la consola, también puedes agregar un disparador a tu función. Sigue estos pasos para crear un activador para tu función:

  1. En la consola Google Cloud , ve a Cloud Run:

    Ir a Cloud Run

  2. Haz clic en Escribir una función y, luego, ingresa los detalles de la función. Para obtener más información sobre la configuración de funciones durante la implementación, consulta Implementa funciones.

  3. En la sección Activador, haga clic en Agregar activador.

  4. Selecciona una opción.

  5. En el panel Activador de Eventarc, modifica los detalles del activador de la siguiente manera:

    1. Ingresa un nombre para el activador en el campo Nombre del activador o usa el nombre predeterminado.

    2. Selecciona un tipo de activador de la lista:

      • Fuentes de Google para especificar activadores para Pub/Sub, Cloud Storage, Firestore y otros proveedores de eventos de Google

      • Terceros para integrarte a proveedores externos a Google que ofrecen una fuente de Eventarc. Para obtener más información, consulta Eventos de terceros en Eventarc.

    3. Selecciona un proveedor de eventos en la lista Proveedor de eventos para elegir un producto que proporcione el tipo de evento para activar tu función. Para obtener la lista de proveedores de eventos, consulta Proveedores y destinos de eventos.

    4. Seleccione un tipo de evento de la lista Tipo de evento. La configuración del activador varía según el tipo de evento compatible. Para obtener más información, consulta Tipos de eventos.

    5. Si el campo Región está habilitado, seleccione una ubicación para el activador de Eventarc. En general, la ubicación de un disparador de Eventarc debe coincidir con la ubicación del recursoGoogle Cloud que desea monitorear para detectar eventos. En la mayoría de los casos, también debes implementar tu función en la misma región. Consulta Información sobre las ubicaciones de Eventarc para obtener más detalles sobre las ubicaciones de activadores de Eventarc.

    6. En el campo Cuenta de servicio, selecciona una cuenta de servicio. Los activadores de Eventarc están vinculados a cuentas de servicio para usarlos como identidad cuando se invoca la función. La cuenta de servicio de tu disparador de Eventarc debe tener permiso para invocar tu función. De forma predeterminada, Cloud Run usa la cuenta de servicio predeterminada de Compute Engine.

    7. De manera opcional, especifica la ruta de URL del servicio a la que se 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 y route/subroute.

    8. De manera opcional, para habilitar los reintentos si falla el intento de entrega, selecciona la casilla de verificación Habilitar reintento en caso de error. De lo contrario, el comportamiento predeterminado es un solo intento de entrega sin reintentos. Para obtener más información, consulte Eventos de reintento.

  6. Una vez que hayas completado los campos obligatorios, haz clic en Guardar activador.

  7. Haz clic en Crear.

  8. En la pestaña Source, edite el código fuente si es necesario y, a continuación, seleccione Save and redeploy.

gcloud

Cuando creas una función con la gcloud CLI, primero debes implementarla y, luego, crear un activador. Sigue estos pasos para crear un activador para tu función:

  1. Ejecuta el siguiente comando en el directorio que contiene el código de muestra para implementar tu función:

    gcloud run deploy FUNCTION \
        --source . \
        --function FUNCTION_ENTRYPOINT \
        --base-image BASE_IMAGE_ID \
        --region REGION
    

    Reemplaza lo siguiente:

    • FUNCTION: Es el nombre de la función que implementas. Puedes omitir este parámetro por completo, pero se te solicitará el nombre si lo haces.

    • FUNCTION_ENTRYPOINT: el punto de entrada a tu función en tu código fuente. Este es el código que ejecuta Cloud Run cuando se ejecuta tu función. El valor de esta marca debe ser un nombre de función o un nombre de clase completamente calificado que exista en tu código fuente.

    • BASE_IMAGE_ID: Es el entorno de imagen base para tu función. Para obtener más detalles sobre las imágenes base y los paquetes incluidos en cada imagen, consulta Imágenes base de los tiempos de ejecución.

    • REGION: la Google Cloud región en la que deseas implementar tu función. Por ejemplo, europe-west1.

  2. Ejecute el siguiente comando para crear un activador que filtre y enrute eventos:

    gcloud eventarc triggers create TRIGGER_NAME \
        --location=LOCATION \
        --destination-run-service=FUNCTION \
        --destination-run-region=DESTINATION_RUN_REGION \
        --event-filters="type=EVENT_FILTER_TYPE" \
        --max-retry-attempts=1 \
        --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.
    

    Reemplaza lo siguiente:

    • TRIGGER_NAME: ID del activador o un identificador completamente calificado.
    • 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.

      Para evitar problemas de rendimiento y residencia de datos, la ubicación debe coincidir con la ubicación del servicio Google Cloud que está generando eventos. Para obtener más información, consulta Ubicaciones de Eventarc.

    • FUNCTION: Es el nombre de la función de Cloud Run implementada que recibe los eventos para el activador.
    • DESTINATION_RUN_REGION: (opcional) la ubicación de Cloud Run en la que se puede encontrar la función de Cloud Run de destino. Si no se especifica, se supone que la función 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 únicamente si la acción se lleva a cabo correctamente. Para obtener una lista de los tipos de eventos compatibles, consulta Tipos de eventos de Google compatibles con Eventarc.
    • SERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio administrada por el usuario.
    • PROJECT_ID: Es el ID del proyecto de Google Cloud .

    Notas:

    • 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.
    • De manera opcional, para especificar un solo intento de entrega de eventos sin reintentos, usa la marca --max-retry-attempts. El único valor válido es 1. Si omites la marca, se aplica el comportamiento de reintento estándar. Para obtener más información, consulta Eventos de reintento.
    • Hay otras marcas disponibles. Para obtener más información, consulta gcloud eventarc triggers create

Terraform

Para crear un activador de Eventarc para una función de Cloud Run, consulta Crea un activador con Terraform.

Cómo establecer el plazo de reconocimiento de Pub/Sub

Las funciones de Cloud Run basadas en eventos se implementan con Eventarc en combinación con una suscripción a Pub/Sub. De forma predeterminada, el plazo de confirmación (ack) de esta suscripción a Pub/Sub es de 10 segundos. Este parámetro de configuración es insuficiente para muchas funciones y puede provocar ejecuciones duplicadas no deseadas.

Le recomendamos que establezca el plazo ack para su servicio o función al valor máximo de 600 segundos de la siguiente manera:

Console

Después de implementar tu función, sigue estos pasos para modificar el plazo ack de la función:

  1. En la Google Cloud consola, ve aCloud Run:

    Ir a Cloud Run

  2. Ubica la función que deseas actualizar en la lista de Servicios y haz clic en ella para abrir sus detalles.

  3. Abre la pestaña Activadores.

  4. Haz clic en el nombre del activador para abrir Detalles del activador.

  5. Haz clic en el enlace Topic para abrir el panel de edición del tema.

  6. Haz clic en el nombre del ID de suscripción para ir al panel de suscripción y, luego, haz clic en Editar en la parte superior de la página.

  7. Establece el valor de Acknowledgement Deadline en 600 y haz clic en Update para guardar el cambio.

gcloud

Actualiza el plazo de ack por activador al valor máximo de 600 segundos. Ten en cuenta que los siguientes comandos hacen referencia a variables (TRIGGER_NAME y LOCATION) cuyos valores configuraste en los pasos anteriores.

## Per Cloud Run function:

# Update Ack Deadline to max (600s)
SUBSCRIPTION_ID=$(gcloud eventarc triggers describe "$TRIGGER_NAME" --location $LOCATION --format json | jq -r '.transport.pubsub.subscription')
gcloud pubsub subscriptions update "$SUBSCRIPTION_ID" --ack-deadline=600

Realice una actualización masiva en todos los activadores de servicios y funciones para establecer sus plazos ack en 600 segundos:

### Match all Cloud Run service triggers and update all deadlines to 600s (max timeout)
### This will change ALL Cloud Run services and Cloud Run functions
TRIGGER_NAMES=($(gcloud eventarc triggers list | awk '/Cloud Run service/ {print $1}'))

if [ ${#TRIGGER_NAMES[@]} -eq 0 ]; then
  echo "No matching triggers found"
fi

for trigger in "${TRIGGER_NAMES[@]}"; do
echo "Updating ack deadline for trigger: $trigger"
SUBSCRIPTION_ID=$(gcloud eventarc triggers describe "$trigger" --location $LOCATION --format json | jq -r '.transport.pubsub.subscription')

if [ -z "$SUBSCRIPTION_ID" ]; then
    echo "Error: Could not retrieve subscription ID for trigger: $trigger"
    continue # Skip to the next trigger
fi
gcloud pubsub subscriptions update "$SUBSCRIPTION_ID" --ack-deadline=600
echo "Ack deadline updated for subscription: $SUBSCRIPTION_ID"
done

Consulta el ID y la fuente del CloudEvent

Para ver el ID y la fuente de CloudEvent que activaron tu servicio, consulta los siguientes recursos en los registros del servicio de Cloud Run:

  • LogEntry.labels.run.googleapis.com/cloud_event_id
  • LogEntry.labels.run.googleapis.com/cloud_event_source

¿Qué sigue?