En este tutorial se muestra cómo activar una función de Cloud Run basada en eventos mediante Cloud Scheduler y dirigiéndola a un tema de Pub/Sub. Usa una función basada en eventos cuando quieras que se active directamente en respuesta a eventos de tu Google Cloud proyecto, como mensajes de un tema de Pub/Sub o cambios en un segmento de Cloud Storage.
Ten en cuenta que también puedes programar una función HTTP dirigiéndote al endpoint HTTP de la función. Usa una función HTTP cuando necesites que tu función tenga un endpoint de URL y responda a solicitudes HTTP, como en el caso de los webhooks. Para obtener más información, consulta Tipos de funciones de Cloud Run.
Programar la ejecución de una función de Cloud Run es un caso de uso habitual de Cloud Scheduler. En este tutorial, aprenderás a hacer lo siguiente:
- Crea una función de Cloud Run sencilla que se suscriba a un tema de Pub/Sub.
- Crea una tarea de Cloud Scheduler que publique un mensaje en el tema de Pub/Sub.
- Ejecuta la tarea de Cloud Scheduler.
- Verifica que la tarea de Cloud Scheduler haya activado la función de Cloud Run.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Antes de empezar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build, Cloud Functions, Cloud Run Admin, Cloud Scheduler, Eventarc APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator
). Learn how to grant roles. -
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the Cloud Run > Cloud Run Invoker role to the service account.
To grant the role, find the Select a role list, then select Cloud Run > Cloud Run Invoker.
- Click Continue.
-
Click Done to finish creating the service account.
-
Ensure that you have the Create Service Accounts IAM role
(
-
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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build, Cloud Functions, Cloud Run Admin, Cloud Scheduler, Eventarc APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Create a service account:
-
Ensure that you have the Create Service Accounts IAM role
(
roles/iam.serviceAccountCreator
). Learn how to grant roles. -
In the Google Cloud console, go to the Create service account page.
Go to Create service account - Select your project.
-
In the Service account name field, enter a name. The Google Cloud console fills in the Service account ID field based on this name.
In the Service account description field, enter a description. For example,
Service account for quickstart
. - Click Create and continue.
-
Grant the Cloud Run > Cloud Run Invoker role to the service account.
To grant the role, find the Select a role list, then select Cloud Run > Cloud Run Invoker.
- Click Continue.
-
Click Done to finish creating the service account.
-
Ensure that you have the Create Service Accounts IAM role
(
- De forma predeterminada, las funciones de Cloud Run usan la cuenta de servicio predeterminada de Compute Engine, que se crea automáticamente, como cuenta de servicio de entorno de ejecución. Puedes usar esta cuenta de servicio para probar este tutorial. Sin embargo, en función de la configuración de la política de tu organización, es posible que no se conceda automáticamente el rol Editor a la cuenta de servicio predeterminada de tu proyecto. Si es así, debes conceder a la cuenta de servicio los siguientes roles:
- Escritor de Artifact Registry (
roles/artifactregistry.writer
) - Editor de registros (
roles/logging.logWriter
) - Lector de objetos de Storage (
roles/storage.objectViewer
)
- Escritor de Artifact Registry (
En la Google Cloud consola, ve a la página Funciones de Cloud Run.
Haz clic en
Crear función.En la sección Información básica, haga lo siguiente:
- En la lista Entorno, selecciona 2.ª gen..
- Escribe el nombre de la función.
- En la lista Región, selecciona una región.
En la sección Activador, haga lo siguiente:
- En la lista Tipo de activador, selecciona Cloud Pub/Sub.
- En la lista Tema de Cloud Pub/Sub, selecciona un tema o haz clic en Crear un tema para crear uno. Anota el nombre del tema, ya que lo necesitarás en un paso posterior.
Haz clic en Más opciones.
Se abrirá el panel Activador de Eventarc.
En el panel Desencadenador de Eventarc, haz lo siguiente:
- Si se te pide que permitas que el servicio Pub/Sub cree los tokens de identidad que necesita para invocar la función, haz clic en Grant (Conceder).
- En la lista Cuenta de servicio, selecciona la cuenta de servicio que hayas creado anteriormente.
- Acepta los demás valores predeterminados.
Haz clic en Guardar activador.
Se cierra el panel Desencadenador de Eventarc.
Acepta los demás valores predeterminados y haz clic en Siguiente.
No modifiques el lenguaje de tiempo de ejecución predeterminado ni el código de ejemplo. El código no usa ningún servicio en la nube y no necesita que se habiliten permisos adicionales. Haz clic en Desplegar.
En la Google Cloud consola, ve a la página Cloud Scheduler.
Haz clic en
Crear trabajo.Escribe el nombre del trabajo.
En la lista Región, selecciona una región.
Especifica la frecuencia de la tarea con el formato cron de UNIX:
30 16 * * 7
Para obtener más información, consulta Formato de las tareas cron y zona horaria.
En la lista Zona horaria, selecciona una zona horaria.
Haz clic en Continuar.
En la lista Tipo de destino, selecciona Pub/Sub.
Selecciona el tema de Pub/Sub que has creado anteriormente.
En el campo Cuerpo del mensaje, introduce una cadena que se enviará al tema de destino de Pub/Sub. Por ejemplo: "Hello world!"
Haz clic en Crear.
En la Google Cloud consola, ve a la página Cloud Scheduler.
Seleccione la casilla del trabajo que ha creado y haga clic en Forzar ejecución.
Cuando se invoca por primera vez, el primer trabajo creado en un proyecto puede tardar unos minutos en configurarse y ejecutarse.
Una vez que se haya ejecutado el trabajo, el Estado de la última ejecución debe indicar
Success
.En la Google Cloud consola, ve a la página Funciones de Cloud Run.
Haz clic en el nombre de la función.
Se abre la página Detalles de la función y el gráfico Invocaciones/segundo muestra la primera invocación de la función.
Haz clic en la pestaña Registros.
Debería ver una entrada de registro similar a
Hello, YOUR_STRING!
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
En la Google Cloud consola, ve a la página Cloud Scheduler.
Selecciona la casilla situada junto al trabajo.
Haz clic en
Eliminar y confirma que quieres eliminarlo.En la Google Cloud consola, ve a la página Pub/Sub.
Selecciona la casilla situada junto al tema.
Haz clic en
Eliminar y confirma que quieres eliminarlo.En la Google Cloud consola, ve a la página Funciones de Cloud Run.
Selecciona la casilla situada junto a la función.
Haz clic en
Eliminar y confirma que quieres eliminarlo.En la Google Cloud consola, ve a la página Cuentas de servicio.
Selecciona la casilla situada junto a la cuenta de servicio que has creado.
Haz clic en
Eliminar y confirma que quieres eliminarlo.
Ten en cuenta que debes conceder el rol Invocador de Cloud Run porque, en Cloud Run functions (2.ª gen.), los permisos de invocación se pueden gestionar mediante el servicio de Cloud Run subyacente.
Crear una función de Cloud Run basada en eventos
Crea una función basada en eventos que se active directamente en respuesta a eventos de tu proyecto. En este caso, se trata de un mensaje publicado en un tema de Pub/Sub. Google Cloud
Crear una tarea de Cloud Scheduler
Crea una tarea de Cloud Scheduler con un destino de Pub/Sub.
Has creado un trabajo cron que envía un mensaje a tu tema de Pub/Sub a las 16:30 los domingos. Tu función de Cloud Run está suscrita a ese tema.
Ejecutar la tarea de Cloud Scheduler
Ahora puedes ejecutar el trabajo que has creado.
Verificar los resultados en Cloud Run Functions
Puedes verificar que tu función de Cloud Run se ha activado y ejecutado correctamente mediante tu tarea cron.
Limpieza
Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.