Crea activadores a partir de eventos de Pub/Sub

Puedes invocar servicios y funciones de Cloud Run configurando un activador de Pub/Sub.

Cuando configuras el activador, lo vinculas a un tema de Pub/Sub específico. Esto garantiza que se llame a tu servicio o función automáticamente cada vez que se publique un mensaje en ese tema.

Puedes configurar este activador de dos maneras:

  • Activador directo de Pub/Sub (recomendado): Enruta mensajes directamente a tu servicio o función con Pub/Sub. Administras la suscripción directamente, y tu servicio o función recibe la solicitud de envío estándar de Pub/Sub. Usa esta opción si necesitas una configuración más sencilla y una latencia más baja.
  • Activador basado en Eventarc: Enruta los mensajes de Pub/Sub a tu servicio o función con Eventarc. Los activadores de Pub/Sub se administran de la misma manera que otras fuentes de Eventarc, y tu servicio o función recibe eventos como CloudEvents. Usa esta opción si necesitas las funciones avanzadas de filtrado o enrutamiento de Eventarc.

Antes de comenzar

  1. Asegúrate de haber configurado un proyecto nuevo para Cloud Run, como se describe en la página de configuración.

  2. Habilita las APIs de Artifact Registry, Cloud Build, Cloud Run Admin, Cloud Logging y Pub/Sub:

    Habilita las APIs

    Si configuras un activador basado en Eventarc, también debes habilitar la API de Eventarc:

    Habilita la API de Eventarc

Roles obligatorios

Otorga los roles y permisos de IAM necesarios. Si configuras un activador basado en Eventarc, consulta los roles y permisos de IAM necesarios para Eventarc.

Roles necesarios para la cuenta de implementación

Para obtener los permisos que necesitas para activar desde eventos de Pub/Sub, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Ten en cuenta que, de forma predeterminada, los permisos de Cloud Build incluyen permisos para subir y descargar artefactos de Artifact Registry.

Crea un activador de Pub/Sub

Console

  1. En la consola de Google Cloud , ve a la página Servicios de Cloud Run:

    Ir a Cloud Run

  2. Haz clic en el servicio o la función para los que deseas crear un activador de Pub/Sub.

  3. Selecciona la pestaña Activadores.

    Selecciona la pestaña de la configuración del activador que elegiste:

    1. Haz clic en Agregar activador y selecciona Activador de Pub/Sub > Directo.
    2. En el panel Suscripción directa a Pub/Sub, haz lo siguiente:
      • En el campo Tema de Cloud Pub/Sub, selecciona el tema si ya creaste uno o haz clic en Crear tema nuevo para crear uno nuevo.
      • En el campo Cuenta de servicio, selecciona la cuenta de servicio que usa la suscripción para invocar tu servicio. Si en la consola se enumeran los roles faltantes, haz clic en Otorgar todo.
      • En Ruta de URL del servicio, ingresa la ruta de acceso en tu servicio que debería recibir mensajes, como / (predeterminada) o /pubsub. La consola agrega esta ruta de acceso a la URL de tu servicio.
    3. Haz clic en Guardar.

    Eventarc

    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 con proveedores externos a Google que ofrecen una fuente de Eventarc. Para obtener más información, consulta Eventos de terceros en Eventarc.

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

    4. Selecciona google.cloud.pubsub.topic.v1.messagePublished en 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. En la lista Selecciona un tema de Cloud Pub/Sub, elige un tema para que el activador lo supervise. Los mensajes que publiques en este tema activarán llamadas a tu función.

    6. 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 deGoogle Cloud que deseas supervisar 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.

    7. 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 del activador de Eventarc debe tener el permiso para invocar tu función. De forma predeterminada, Cloud Run usa la cuenta de servicio predeterminada de Compute Engine.

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

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

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

gcloud

Para crear un activador para tu servicio o función con la gcloud CLI, sigue estos pasos:

  1. Implementa tu servicio o función si aún no lo has hecho.

  2. Si ya tienes un tema de Pub/Sub, omite este paso. De lo contrario, crea un tema de Pub/Sub:

    gcloud pubsub topics create TOPIC_NAME
  3. Selecciona la pestaña de la configuración del activador que elegiste:

    Directo

    1. Configura los roles necesarios para el agente de servicio de Pub/Sub:

      Roles necesarios para el agente de servicio de Pub/Sub

      En los siguientes pasos, se describe cómo crear y usar una cuenta de servicio que la suscripción a Pub/Sub puede usar para invocar tu servicio o función. Estos pasos son obligatorios cuando se usa Google Cloud CLI para crear un comando de activador de Pub/Sub. Si usas la consola de Google Cloud para crear el activador, puedes omitir estos pasos.

      1. Crea o selecciona una cuenta de servicio para representar la identidad de suscripción a Pub/Sub.

             gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
                --display-name "Cloud Run Pub/Sub Invoker"

        Reemplaza SERVICE_ACCOUNT_NAME por un nombre único para tu cuenta de servicio.

      2. Otorga permiso a la cuenta de servicio de invocador para que invoque tu servicio:

          gcloud run services add-iam-policy-binding SERVICE_NAME \
             --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID. \
             --role=roles/run.invoker

        Los cambios de IAM pueden tardar varios minutos en propagarse. Mientras tanto, es posible que veas errores HTTP 403 en los registros del servicio.

      3. Permite que Pub/Sub cree tokens de autenticación en el proyecto:

          gcloud projects add-iam-policy-binding PROJECT_ID \
             --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub. \
             --role=roles/iam.serviceAccountTokenCreator

        Reemplaza lo siguiente:

        • PROJECT_ID: Es el ID del proyecto de Google Cloud .
        • PROJECT_NUMBER: Es el número del proyecto de Google Cloud .

        El ID y el número del proyecto se enumeran en el panel Información del proyecto en la consola deGoogle Cloud para el proyecto.

    2. Crea una suscripción a Pub/Sub con la cuenta de servicio:

      gcloud pubsub subscriptions create SUBSCRIPTION_NAME \
        --topic TOPIC_NAME \
        --ack-deadline=600 \
        --push-endpoint=SERVICE_URL/ \
        --push-auth-service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.

      Reemplaza lo siguiente:

      • SUBSCRIPTION_NAME: Es el nombre de la suscripción que deseas crear.
      • TOPIC_NAME: Es el nombre del tema que creaste antes.
      • SERVICE_URL: Es la URL HTTPS que se proporciona cuando se implementa el servicio. Esta URL funciona incluso si también agregaste una asignación de dominio.
      • SERVICE_ACCOUNT_NAME: Es el nombre de la cuenta de servicio que creaste antes.
      • PROJECT_ID: Es el ID del proyecto de Google Cloud .

      Notas:

      • La marca --push-auth-service-account activa las funciones de envío de Pub/Sub para la autenticación y la autorización.

      • El dominio de tu servicio de Cloud Run se registra automáticamente para usarlo con suscripciones de Pub/Sub.

      • Solo para Cloud Run, hay una verificación de autenticación integrada de que el token es válido y una verificación de autorización de que la cuenta de servicio tiene permiso para invocar el servicio de Cloud Run.

    Eventarc

    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=google.cloud.pubsub.topic.v1.messagePublished" \
       --transport-topic=projects/PROJECT_ID/topics/TOPIC_NAME \
       --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.

    Reemplaza lo siguiente:

    • TRIGGER_NAME: Es el 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 de Google Cloud que genera eventos. Para obtener más información, consulta Ubicaciones de Eventarc.

    • DESTINATION_RUN_SERVICE: Es el nombre del servicio implementado o de la función de Cloud Run que recibe los eventos para el activador.
    • DESTINATION_RUN_REGION: Es la Cloud Run location en la que se puede encontrar la función de Cloud Run de destino (opcional). Si no se especifica, se supone que la función se encuentra en la misma región que el activador.
    • La marca --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" es obligatoria y no se puede cambiar. Para un tipo de evento diferente, debes crear un activador nuevo.
    • TOPIC_NAME: el ID del tema de Pub/Sub existente. El tema debe estar en el mismo proyecto que el activador.
    • 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:

    • 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 Reintenta eventos.
    • 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.

Próximos pasos