Cómo trabajar con el productor de sucesos de temporizador periódico (cron)

El productor de sucesos de temporizador periódico (cron) genera un suceso a intervalos regulares. Este intervalo se puede planificar por minuto, hora, día o mes o una combinación de varios intervalos de tiempo diferentes. Puedes suscribirte a las aplicaciones, funciones y tareas de Code Engine para recibir eventos cron.

La suscripción al evento de temporizador periódico utiliza la sintaxis estándar de crontab para especificar los detalles del intervalo, con el formato « * * * * * », donde los campos son: minuto, hora, día del mes, mes del año y día de la semana. Por ejemplo, para planificar un suceso para medianoche, especifique 0 0 * * *. Para planificar un suceso para cada viernes a medianoche, especifique 0 0 * * 5.

Al suscribirte a un generador de eventos programados, debes indicar un destino (aplicación, función o tarea) y un tipo de destino para la suscripción. Si no proporciona una planificación, se utiliza como valor predeterminado * * * * * (cada minuto).

Code Engine establece cuotas para las suscripciones al temporizador periódico dentro de un proyecto y límites de suscripción. Para obtener más información sobre los límites de Code Engine, consulte Límites y cuotas de Code Engine.

Suscripción a sucesos de temporizador periódico (cron) para una aplicación

Puedes gestionar las suscripciones a temporizadores periódicos desde la consola o mediante la CLI.

Los sucesos se envían a las aplicaciones como solicitudes HTTP POST. Para obtener más información sobre la información que se incluye con el suceso, consulte Cabeceras HTTP e información de cuerpo para sucesos.

Suscripción a sucesos de temporizador periódico (cron) para una aplicación desde la consola

Desde la consola puedes crear y actualizar suscripciones a eventos de temporizador periódicos para una aplicación.

Antes de empezar

Sigue los siguientes pasos para crear y actualizar una suscripción a un evento de temporizador periódico para una aplicación desde la consola.

  1. Desde la página «Proyectos» de Code Engine, accede a tu proyecto.

  2. En la página Visión general, pulse Suscripciones de sucesos.

  3. En la página Suscripciones de sucesos, pulse Crear para crear la suscripción.

  4. En la página «Crear suscripción a eventos», sigue estos pasos:

    1. En Tipo de suceso, seleccione el mosaico Temporizador periódico. Pulse Siguiente.
    2. Para General, proporcione un nombre para la suscripción de temporizador periódico, por ejemplo, myptimer. Opcionalmente, puede proporcionar atributos de suceso. Tenga en cuenta que si el consumidor de sucesos de temporizador periódico es una aplicación, los atributos de sucesos están disponibles como cabeceras HTTP. Si el consumidor de sucesos es un trabajo, los atributos de sucesos están disponibles como variables de entorno. Pulse Siguiente para continuar.
    3. Para Planificar, proporcione información sobre la temporización de los sucesos. El generador de eventos de temporizador periódico utiliza la sintaxis estándar de crontab para especificar los detalles del intervalo. Elija el intervalo entre los patrones proporcionados o proporcione su propia expresión cron personalizada, como por ejemplo 0 0 * * *, que especifica que el suceso se producirá todos los días a medianoche. Para este ejemplo, seleccione el patrón de planificación para cada día, cada hora, cada minuto. Observe que la expresión cron se genera por usted. Los patrones de día, hora y minuto y la expresión Cron están en Hora universal coordinada (UTC). Si no especifica una planificación, esta suscripción de suceso envía un suceso cada minuto. Se muestra una lista de los próximos sucesos planificados. Tenga en cuenta que estos próximos sucesos planificados se visualizan en su huso horario. Pulse Siguiente para continuar.
    4. Para Datos de sucesos personalizados, proporcione datos para incluir en el cuerpo del mensaje de suceso. Puede especificar el mensaje como texto sin formato o en formato base64. Para este ejemplo, especifique el texto, hello stranger como el cuerpo del mensaje de suceso. Si el mensaje está en formato base64, puede optar por tener el mensaje decodificado cuando se envíe el suceso. También puede especificar el tipo de contenido para los datos de sucesos personalizados. Pulse Siguiente para continuar.
    5. Para Consumidor de sucesos, especifique la aplicación o el trabajo para recibir sucesos. Observe que puede elegir entre una lista de aplicaciones y trabajos definidos. Para este ejemplo, utilice la aplicación myapp que hace referencia a la imagen icr.io/codeengine/cron. Si aún no has creado tu aplicación o tu tarea, puedes especificar el nombre de la misma y crearla una vez que hayas creado la suscripción al temporizador periódico. Solo para las aplicaciones, puede especificar opcionalmente una vía de acceso. De forma predeterminada, los sucesos se direccionan al URL raíz de la aplicación de destino. Puede enviar sucesos a un destino diferente dentro de la app especificando una vía de acceso. Por ejemplo, si la vía de acceso de suscripción especifica /events, los sucesos se envían a https://<base application URL>/events. Pulse Siguiente para continuar.
    6. Para Resumen, revise los valores de la suscripción de sucesos de temporizador periódico y realice los cambios si es necesario. Cuando estés listo, haz clic en «Crear» para crear la suscripción al temporizador periódico.
  5. Ahora que ya has creado tu suscripción al temporizador periódico, ve a la página «Suscripciones a eventos» para ver una lista de las suscripciones definidas.

  6. Para actualizar una suscripción, ve a la página de tu suscripción al temporizador periódico. En la página Suscripciones de sucesos, pulse el nombre de la suscripción que desea actualizar.

  7. Desde la página de suscripción al temporizador periódico, modifica los datos del mensaje del evento. En el separador Datos de suceso personalizados, cambie los datos de suceso a hello sunshine. Pulse Guardar para guardar los cambios.

  8. Dado que la aplicación myapp hace referencia a la aplicación de ejemplo cron, que imprime información en los archivos de registro, puede ver los registros. Consulte los registros de la aplicación para la aplicación de consumidor de sucesos myapp y vea que el mensaje de suceso es hello sunshine. Consulte Visualización de registros de aplicaciones desde la consola.

Suscripción a sucesos de temporizador periódico (cron) para una aplicación con la CLI

Antes de empezar

ibmcloud ce application create --name myapp --image icr.io/codeengine/cron

Para conectar tu aplicación a la suscripción al temporizador periódico mediante la CLI, utiliza el ibmcloud ce sub cron create comando.

ibmcloud ce sub cron create --name NAME --destination-type APP --destination APPLICATION_NAME --schedule CRON

Por ejemplo, para crear una suscripción cron que envíe un evento a una aplicación llamada myapp todos los días a medianoche:

ibmcloud ce sub cron create --name mycronevent --destination-type app --destination myapp --schedule '0 0 * * *'

Debe ajustar el valor de la planificación entre comillas para asegurarse de que se trata como una sola serie.

En la tabla siguiente se resumen las opciones que se utilizan en el ejemplo anterior con el mandato sub cron create. Para obtener más información sobre el mandato y sus opciones, consulte el mandato ibmcloud ce subscription cron create.

Opciones de mandato
Opción Descripción
--name Nombre del origen de sucesos de cron. Este valor es obligatorio.
--destination El nombre de una aplicación o trabajo de Code Engine en el proyecto actual para recibir los sucesos del productor de sucesos. Este valor es obligatorio.
--destination-type El tipo del destination, en este caso, app. El valor predeterminado es app.
--schedule Planificar la frecuencia con la que se desencadena el suceso, en formato crontab. Por ejemplo, especifique */2 * * * * (en formato de serie) para cada 2 minutos. De forma predeterminada, el suceso de cron se desencadena cada minuto y se establece en el huso horario de UTC . Para modificar el huso horario, utilice la opción --time-zone. Este valor es opcional.
Consejos para utilizar los mandatos de sub cron
  • De forma predeterminada, los sucesos se direccionan al URL raíz de la aplicación de destino. Puede enviar sucesos a un destino diferente dentro de la app utilizando la opción --path. Por ejemplo, si la suscripción indica --path /events, los sucesos se envían a https://<base application URL>/events.
  • El tamaño de los datos de los eventos del temporizador periódico está limitado a un máximo de 4096 bytes. Por lo tanto, si utiliza la opción --data o la opción --data-base64, puede enviar un máximo de 4096 bytes. Para obtener más información, consulte Límites y cuotas para Code Engine.
  • Las suscripciones de cron utilizan la zona horaria UTC de forma predeterminada. Puede cambiar el huso horario especificando la opción --time-zone con los mandatos sub cron create o sub cron update. Para conocer los valores válidos de zonas horarias, consulta la base de datos TZ. Tenga en cuenta que si crea una suscripción utilizando kubectl y no especifica un huso horario, se asigna el uso horario UTC.
  • Si todavía no ha creado la app o el consumidor de sucesos de trabajo, utilice la opción --force con el mandato sub cron create para forzar la creación de la suscripción de sucesos de cron. Puede especificar el nombre de la aplicación o el trabajo y crear la aplicación o crear su trabajo después de crear la suscripción de cron.

Para verificar que la suscripción de cron se ha creado correctamente, ejecute el mandato ibmcloud ce sub cron get --name mycronevent .

Salida de ejemplo

Getting cron source 'mycronevent'...
OK
Name:          mycronevent
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           2m21s
Created:       2021-03-14T13:37:51-05:00
Destination Type:  app
Destination:       myapp
Schedule:          0 0 * * *
Time Zone:         UTC
Ready:             true
Events:
    Type     Reason            Age        Source                 Messages
    Normal   FinalizerUpdate   12s        pingsource-controller  Updated "mycronevent" finalizers

Desde esta salida, puede ver que la aplicación de destino es myapp, la planificación es 0 0 * * * (todos los días a medianoche) y el estado Ready (Preparado) es true (verdadero).

Actualizar la suscripción de cron con la CLI

Para actualizar la suscripción de cron con la CLI, utilice el mandatoibmcloud ce subscription cron update. Por ejemplo, actualice la suscripción de mycronevent para cambiar la planificación para enviar un suceso a una app denominada myapp cada 2 minutos.

ibmcloud ce sub cron update --name mycronevent --schedule '*/2 * * * *'

Para verificar que la suscripción de cron se ha actualizado correctamente, ejecute el mandato ibmcloud ce sub cron get --name mycronevent. Se actualiza la planificación de la suscripción.

Salida de ejemplo

Getting cron source 'mycronevent'...
OK
Name:          mycronevent
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           2m21s
Created:       2021-08-31T16:00:49-04:00
Destination Type:  app
Destination:       myapp
Schedule:          */2 * * * *
Time Zone:         UTC
Ready:             true
Events:
  Type    Reason                       Age               Source                 Messages
  Normal  PingSourceSynchronized       7s (x3 over 13m)  pingsource-controller  PingSource adapter is synchronized

¿Desea probar una guía de aprendizaje? Consulte Suscripción a sucesos de temporizador periódico (cron). ¿Desea ver más ejemplos de código? Echa un vistazo a Ejemplos para el repositorio « IBM Cloud Code Engine GitHub ».

Visualización de la información de sucesos para una aplicación desde la consola

Para ver información sobre las suscripciones de sucesos,

  1. Desde la página «Proyectos» de Code Engine, accede a tu proyecto.
  2. En la página Visión general, pulse Suscripciones de sucesos para ver una lista de suscripciones definidas.

Si la aplicación imprime información en los archivos de registro, como lo hace la aplicación cron de ejemplo, visualice los archivos de registro de la aplicación consumidora de sucesos. Consulte Visualización de registros de aplicaciones desde la consola.

Visualización de información de sucesos para una aplicación con la CLI

Si la aplicación imprime información en los archivos de registro, como la aplicación cronde ejemplo, consulte los archivos de registro para la aplicación de consumidor de sucesos con el mandato de CLI ibmcloud ce app logs. Por ejemplo, para ver los registros de la aplicación que ha creado en el ejemplo anterior,

ibmcloud ce application logs --application myapp

Salida de ejemplo

Getting logs for all instances of application 'myapp'...
OK
myapp-mw25y-1-deployment-8579d868f4-ssfnr/user-container:
Listening on port 8080
2021-04-13 17:22:08 - Received:
URL: /
Header: Accept-Encoding=[gzip]
Header: Ce-Id=[d2faa29c-8088-410f-bb30-416085c52a0b]
Header: Ce-Source=[/apis/v1/namespaces/81fvkfqi3n6/pingsources/mycronevent]
Header: Ce-Specversion=[1.0]
Header: Ce-Time=[2021-04-13T17:22:00.059682656Z]
Header: Ce-Type=[dev.knative.sources.ping]
Header: Content-Length=[0]
Header: Forwarded=[for=172.30.136.209;proto=http, for=172.30.48.203]
Header: K-Proxy-Request=[activator]
Header: Traceparent=[00-b13196fe439b6d7d67f3205b2f655788-e9fee441cd41158c-00]
Header: User-Agent=[Go-http-client/1.1]
Header: X-B3-Sampled=[0]
Header: X-B3-Spanid=[1dd2d76079811204]
Header: X-B3-Traceid=[710b7c383682d0cd1dd2d76079811204]
Header: X-Envoy-Attempt-Count=[1]
Header: X-Envoy-Decorator-Operation=[myapp-mw25y-1.81fvkfqi3n6.svc.cluster.local:80/*]
Header: X-Envoy-Internal=[true]
Header: X-Envoy-Peer-Metadata=[ChQKDkFQUF9DT05UQUlORVJTEgIaAAoaCgpDTFVTVEVSX0lEEgwaCkt1YmVybmV0ZXMKGAoNSVNUSU9fVkVSU0lPThIHGgUxLjkuMQq+AwoGTEFCRUxTErMDKrADCh0KA2FwcBIWGhRpc3Rpby1pbmdyZXNzZ2F0ZXdheQoTCgVjaGFydBIKGghnYXRld2F5cwoUCghoZXJpdGFnZRIIGgZUaWxsZXIKNgopaW5zdGFsbC5vcGVyYXRvci5pc3Rpby5pby9vd25pbmctcmVzb3VyY2USCRoHdW5rbm93bgoZCgVpc3RpbxIQGg5pbmdyZXNzZ2F0ZXdheQoZCgxpc3Rpby5pby9yZXYSCRoHZGVmYXVsdAowChtvcGVyYXRvci5pc3Rpby5pby9jb21wb25lbnQSERoPSW5ncmVzc0dhdGV3YXlzCiAKEXBvZC10ZW1wbGF0ZS1oYXNoEgsaCTU1YjU0N2Y0ZgoSCgdyZWxlYXNlEgcaBWlzdGlvCjkKH3NlcnZpY2UuaXN0aW8uaW8vY2Fub25pY2FsLW5hbWUSFhoUaXN0aW8taW5ncmVzc2dhdGV3YXkKLwojc2VydmljZS5pc3Rpby5pby9jYW5vbmljYWwtcmV2aXNpb24SCBoGbGF0ZXN0CiIKF3NpZGVjYXIuaXN0aW8uaW8vaW5qZWN0EgcaBWZhbHNlChoKB01FU0hfSUQSDxoNY2x1c3Rlci5sb2NhbAouCgROQU1FEiYaJGlzdGlvLWluZ3Jlc3NnYXRld2F5LTU1YjU0N2Y0Zi10aHN4cAobCglOQU1FU1BBQ0USDhoMaXN0aW8tc3lzdGVtCl0KBU9XTkVSElQaUmt1YmVybmV0ZXM6Ly9hcGlzL2FwcHMvdjEvbmFtZXNwYWNlcy9pc3Rpby1zeXN0ZW0vZGVwbG95bWVudHMvaXN0aW8taW5ncmVzc2dhdGV3YXkKFwoRUExBVEZPUk1fTUVUQURBVEESAioACicKDVdPUktMT0FEX05BTUUSFhoUaXN0aW8taW5ncmVzc2dhdGV3YXk=]
Header: X-Envoy-Peer-Metadata-Id=[router~172.30.48.203~istio-ingressgateway-55b547f4f-thsxp.istio-system~istio-system.svc.cluster.local]
Header: X-Forwarded-For=[172.30.136.209, 172.30.48.203, 172.30.167.171]
Header: X-Forwarded-Proto=[http]
Header: X-Request-Id=[fe8d6cec-f0e4-47c2-b9ae-81764cb377bc]

Para obtener más información sobre el registro, consulte Visualización de registros.

¿Desea ver más ejemplos de código? Echa un vistazo a Ejemplos para el repositorio « IBM Cloud Code Engine GitHub ».

Información de cabecera y cuerpo de cron para sucesos entregados a aplicaciones

Todos los sucesos que se entregan a aplicaciones se reciben como mensajes HTTP POST. Los sucesos contienen determinadas cabeceras HTTP que le ayudan a determinar rápidamente los bits clave de información sobre los sucesos sin mirar el cuerpo (lógica empresarial) del suceso. Para obtener más información, consulta la especificación « CloudEvents ».

Cabeceras

En la siguiente tabla se describen los encabezados de los eventos del temporizador periódico (cron):

Campos de cabecera de los eventos
Cabecera Descripción
ce-id Un identificador exclusivo para el suceso, a menos que se vuelva a reproducir un suceso, en cuyo caso se le asigna el mismo ID.
ce-source Una referencia de URI que indica dónde se ha originado este suceso en el generador de sucesos. Para los sucesos de cron, esta cabecera es una referencia de URI con subdominio para el proyecto y el nombre de la suscripción de cron, en el formato siguiente: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/pingsources/[SUBSCRIPTION_NAME].
ce-specversion La versión de la especificación de CloudEvents. Este valor siempre es 1.0.
ce-time La hora a la que se ha generado el suceso.
ce-type El tipo del suceso. Para los sucesos de cron, se trata de dev.knative.sources.ping.

Salida de ejemplo

ce-id: c329ed76-5004-4383-a3cc-c7a9b82e3ac6
ce-source: /apis/v1/namespaces/6b0v3x9xek5/pingsources/mycronevent
ce-specversion: 1.0
ce-time: 2021-02-26T19:19:00.497637287Z
ce-type: dev.knative.sources.ping

Cuerpo HTTP

El cuerpo HTTP contiene el propio suceso y está en el formato que especifique al crear o actualizar la suscripción.

Suscribirse a eventos periódicos del temporizador (cron) para una función

Puedes gestionar las suscripciones a temporizadores periódicos desde la consola o mediante la CLI.

Los eventos se envían a las funciones como solicitudes POST de tipo « HTTP ». Para obtener más información sobre la información que se incluye con el suceso, consulte Cabeceras HTTP e información de cuerpo para sucesos.

Suscribirse a eventos periódicos del temporizador (cron) para una función desde la consola

Puedes crear y actualizar suscripciones a eventos de temporizador periódicos para una función desde la consola.

Antes de empezar

/**
 * The `main` function is the entry-point into the function.
 * It has one optional argument 'params', which carries all the
 * parameters the function was invoked with.
*/
async function main(params) {
  // add process environment variables
  params.env = process.env
  // print recognizable string to the log
  console.log('Function invocation via cron subscription');
  // log params object, so invocation can be observed in the logs
  console.dir(params);
  // craft a simple HTTP RC 200 response,
  // which also echos the params object
  response = {
    statusCode: 200,
    headers: {
      'Content-Type': 'application/json;charset=utf-8'
    },
    body: params
  };
  return response
}

Sigue los siguientes pasos para crear y actualizar una suscripción a un evento de temporizador periódico para una función desde la consola.

  1. Desde la página «Proyectos» de Code Engine, accede a tu proyecto.

  2. En la página Visión general, pulse Suscripciones de sucesos.

  3. En la página Suscripciones de sucesos, pulse Crear para crear la suscripción.

  4. En la página «Crear suscripción a eventos», sigue estos pasos:

    1. En Tipo de suceso, seleccione el mosaico Temporizador periódico. Pulse Siguiente.
    2. Para General, proporcione un nombre para la suscripción de temporizador periódico, por ejemplo, myptimer. Opcionalmente, puede proporcionar atributos de suceso. Tenga en cuenta que si el consumidor de sucesos de temporizador periódico es una aplicación, los atributos de sucesos están disponibles como cabeceras HTTP. Si el consumidor de sucesos es una función, los atributos de suceso están disponibles como pares de clave-valor en la propiedad __ce_headers del objeto params. Pulse Siguiente para continuar.
    3. Para Planificar, proporcione información sobre la temporización de los sucesos. El generador de eventos de temporizador periódico utiliza la sintaxis estándar de crontab para especificar los detalles del intervalo. Elija el intervalo entre los patrones proporcionados o proporcione su propia expresión cron personalizada, como por ejemplo 0 0 * * *, que especifica que el suceso se producirá todos los días a medianoche. Para este ejemplo, seleccione el patrón de planificación para cada día, cada hora, cada minuto. Observe que la expresión cron se genera por usted. Los patrones de día, hora y minuto y la expresión Cron están en Hora universal coordinada (UTC). Si no especifica una planificación, esta suscripción de suceso envía un suceso cada minuto. Se muestra una lista de los próximos sucesos planificados. Tenga en cuenta que estos próximos sucesos planificados se visualizan en su huso horario. Pulse Siguiente para continuar.
    4. Para Datos de sucesos personalizados, proporcione datos para incluir en el cuerpo del mensaje de suceso. Puede especificar el mensaje como texto sin formato o en formato base64. Para este ejemplo, especifique el texto, hello stranger como el cuerpo del mensaje de suceso. Si el mensaje está en formato base64, puede optar por tener el mensaje decodificado cuando se envíe el suceso. También puede especificar el tipo de contenido para los datos de sucesos personalizados. Pulse Siguiente para continuar.
    5. Para Consumidor de sucesos, elija el tipo de componente Function y especifique la función para recibir sucesos. Ten en cuenta que puedes elegir entre una lista de funciones definidas. Para este ejemplo, utilice la función myfun que utiliza el código en línea de ejemplo. Si todavía no ha creado la función, puede especificar el nombre de la función y Creación de cargas de trabajo de función con código en línea después de crear la suscripción de temporizador periódico. Pulse Siguiente para continuar.
    6. Para Resumen, revise los valores de la suscripción de sucesos de temporizador periódico y realice los cambios si es necesario. Cuando estés listo, haz clic en «Crear» para crear la suscripción al temporizador periódico.
  5. Ahora que ya has creado tu suscripción al temporizador periódico, ve a la página «Suscripciones a eventos» para ver una lista de las suscripciones definidas.

  6. Para actualizar una suscripción, ve a la página de tu suscripción al temporizador periódico. En la página Suscripciones de sucesos, pulse el nombre de la suscripción que desea actualizar.

  7. Desde la página de suscripción al temporizador periódico, modifica los datos del mensaje del evento. En la pestaña Datos de suceso personalizados, cambie los datos de suceso a { "hello": "world" } y elija application/json como Tipo de contenido de datos de suceso personalizados. Pulse Guardar para guardar los cambios.

  8. Puesto que la función myfun utiliza el código en línea de ejemplo, que imprime el objeto params completo en los archivos de registro, puede ver los registros para verificar que se ha invocado la función. Vea los registros de función para la función de consumidor de sucesos de myfun y compruebe que el objeto params contiene un par de clave-valor hello: world. También puede ver que el campo body del objeto params contiene el valor codificado Base64 { "hello": "world" } Consulte Visualización de registros de función desde la consola.

Suscribirse a eventos periódicos del temporizador (cron) para una función mediante la CLI

Antes de empezar

/**
 * The `main` function is the entry-point into the function.
 * It has one optional argument 'params', which carries all the
 * parameters the function was invoked with.
*/
async function main(params) {
  // add process environment variables
  params.env = process.env
  // print recognizable string to the log
  console.log('Function invocation via cron subscription');
  // log params object, so invocation can be observed in the logs
  console.dir(params);
  // craft a simple HTTP RC 200 response,
  // which also echos the params object
  response = {
    statusCode: 200,
    headers: {
      'Content-Type': 'application/json;charset=utf-8'
    },
    body: params
  };
  return response
}

Guarde el código en un archivo denominado sample_inline_code.js y cree la función utilizando el mandato siguiente:

ibmcloud ce function create --name myfun --runtime nodejs --inline-code ./sample_inline_code.js

Para vincular tu función a la suscripción al temporizador periódico mediante la CLI, utiliza el ibmcloud ce sub cron create siguiente comando :

ibmcloud ce sub cron create --name NAME --destination-type function --destination FUNCTION_NAME --schedule CRON

Por ejemplo, para crear una suscripción cron que envíe un evento a una aplicación llamada myfun todos los días a medianoche:

ibmcloud ce sub cron create --name mycronevent --destination-type function --destination myfun --schedule '0 0 * * *'

Debe ajustar el valor de la planificación entre comillas para asegurarse de que se trata como una sola serie.

En la tabla siguiente se resumen las opciones que se utilizan en el ejemplo anterior con el mandato sub cron create. Para obtener más información sobre el mandato y sus opciones, consulte el mandato ibmcloud ce subscription cron create.

Opciones de mandato
Opción Descripción
--name Nombre del origen de sucesos de cron. Este valor es obligatorio.
--destination El nombre de una aplicación, función o tarea de Code Engine en el proyecto actual que recibirá los eventos del generador de eventos. Este valor es obligatorio.
--destination-type El tipo del destination, en este caso, function. El valor predeterminado es app.
--schedule Planificar la frecuencia con la que se desencadena el suceso, en formato crontab. Por ejemplo, especifique */2 * * * * (en formato de serie) para cada 2 minutos. De forma predeterminada, el suceso de cron se desencadena cada minuto y se establece en el huso horario de UTC . Para modificar el huso horario, utilice la opción --time-zone. Este valor es opcional.
Consejos para utilizar los mandatos de sub cron
  • El tamaño de los datos de los eventos del temporizador periódico está limitado a un máximo de 4096 bytes. Por lo tanto, si utiliza la opción --data o la opción --data-base64, puede enviar un máximo de 4096 bytes. Para obtener más información, consulte Límites y cuotas para Code Engine.
  • Las suscripciones de cron utilizan la zona horaria UTC de forma predeterminada. Puede cambiar el huso horario especificando la opción --time-zone con los mandatos sub cron create o sub cron update. Para conocer los valores válidos de zonas horarias, consulta la base de datos TZ. Tenga en cuenta que si crea una suscripción utilizando kubectl y no especifica un huso horario, se asigna el uso horario UTC.
  • Si todavía no ha creado la app o el consumidor de sucesos de trabajo, utilice la opción --force con el mandato sub cron create para forzar la creación de la suscripción de sucesos de cron. Puede especificar el nombre de la función Crear una función después de crear la suscripción cron.

Para verificar que la suscripción de cron se ha creado correctamente, ejecute el mandato ibmcloud ce sub cron get --name mycronevent .

Salida de ejemplo

Getting cron event subscription 'mycronevent'...
OK
Name:          mycronevent
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           2m21s
Created:       2024-03-14T13:37:51-05:00
Destination Type:  function
Destination:       myfun
Schedule:          0 0 * * *
Time Zone:         UTC
Ready:             true
Events:
  Type    Reason                  Age                Source                 Messages
  Normal  FinalizerUpdate         20s                pingsource-controller  Updated "mycronevent" finalizers
  Normal  PingSourceSynchronized  20s                pingsource-controller  PingSource adapter is synchronized

En esta salida se puede ver que la función de destino es myfun, la programación es 0 0 * * * (todos los días a medianoche) y el estado «Ready» es true.

Actualizar la suscripción de cron con la CLI

Para actualizar la suscripción de cron con la CLI, utilice el mandatoibmcloud ce subscription cron update. Por ejemplo, actualiza la suscripción « mycronevent » para cambiar la programación de modo que envíe un evento a una función llamada « myfun » cada 2 minutos:

ibmcloud ce sub cron update --name mycronevent --schedule '*/2 * * * *'

Para verificar que la suscripción de cron se ha actualizado correctamente, ejecute el mandato ibmcloud ce sub cron get --name mycronevent. Se actualiza la planificación de la suscripción.

Salida de ejemplo

Getting cron event subscription 'mycronevent'...
OK
Name:          mycronevent
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           37m41s
Created:       2024-03-14T14:04:51-05:00
Destination Type:  function
Destination:       myfun
Schedule:          */2 * * * *
Time Zone:         UTC
Ready:             true
Events:
  Type    Reason                  Age                Source                 Messages
  Normal  FinalizerUpdate         20s                pingsource-controller  Updated "mycronevent" finalizers
  Normal  PingSourceSynchronized  20s                pingsource-controller  PingSource adapter is synchronized

¿Desea probar una guía de aprendizaje? Consulte Suscripción a sucesos de temporizador periódico (cron). ¿Desea ver más ejemplos de código? Echa un vistazo a Ejemplos para el repositorio « IBM Cloud Code Engine GitHub ».

Visualización de la información de eventos de una función desde la consola

Para consultar la información sobre tus suscripciones a eventos:

  1. Desde la página «Proyectos» de Code Engine, accede a tu proyecto.
  2. En la página Visión general, pulse Suscripciones de sucesos para ver una lista de suscripciones definidas.

Si tu función registra información en archivos de registro, tal y como hace el trabajo de ejemplo « codeengine », consulta los archivos de registro de tu función. Consulte Visualización de registros de trabajo desde la consola.

Información del encabezado y el cuerpo de Cron para los eventos enviados a las funciones

Todos los eventos que se envían a las funciones se reciben como mensajes POST de HTTP. Los eventos contienen determinados encabezados de tipo « HTTP » que te ayudan a identificar rápidamente datos clave sobre los mismos. HTTP Los encabezados se almacenan en la propiedad « __ce_headers » del objeto « params » con el que se invoca la función. Para obtener más información, consulta la especificación « CloudEvents ».

Cabeceras

La tabla siguiente describe los pares de clave-valor en __ce_headers para sucesos de temporizador periódico (cron):

Archivos de cabecera para eventos
Cabecera Descripción
Ce-Id Un identificador exclusivo para el suceso, a menos que se vuelva a reproducir un suceso, en cuyo caso se le asigna el mismo ID.
Ce-Source Una referencia de URI que indica dónde se ha originado este suceso en el generador de sucesos. Para los sucesos de cron, esta cabecera es una referencia de URI con subdominio para el proyecto y el nombre de la suscripción de cron, en el formato siguiente: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/pingsources/[SUBSCRIPTION_NAME].
Ce-Specversion La versión de la especificación de CloudEvents. Este valor siempre es 1.0.
Ce-Time La hora a la que se ha generado el suceso.
Ce-Type El tipo del suceso. Para los sucesos de cron, se trata de dev.knative.sources.ping.

Salida de ejemplo

  __ce_headers: {
     "Ce-Id": "b861440f-0e17-44ab-9bab-826da0c9713f",
     "Ce-Source": "/apis/v1/namespaces/7iuw2furi55/pingsources/mycronevent",
     "Ce-Specversion": "1.0",
     "Ce-Time": "2024-06-02T10:56:00.062572905Z",
     "Ce-Type": "dev.knative.sources.ping"
  }

Cuerpo HTTP

El cuerpo « HTTP » contiene los datos del evento personalizado y tiene el formato que se especifica al crear o actualizar la suscripción. Puede acceder a los datos de sucesos personalizados desde la propiedad body en el objeto params.

Ejemplo de objeto params para una invocación de suceso con un conjunto de datos de suceso personalizado en hello stranger y Tipo de contenido de datos de suceso personalizado establecido en text/plain:

  {
    "__ce_headers": {
        "Ce-Id": "b861440f-0e17-44ab-9bab-826da0c9713f",
        "Ce-Source": "/apis/v1/namespaces/7iuw2furi55/pingsources/mycronevent",
        "Ce-Specversion": "1.0",
        "Ce-Time": "2024-06-02T10:56:00.062572905Z",
        "Ce-Type": "dev.knative.sources.ping",
        "Content-Length": "14",
        "Content-Type": "text/plain"
    },
    "body": "hello stranger"
  }

El valor de « body » se codifica como « Base64 » si el tipo de contenido de los datos del evento personalizado está establecido en « application/json ».

Suscripción a sucesos de temporizador periódico (cron) para un trabajo

Puedes gestionar las suscripciones a temporizadores periódicos desde la consola o mediante la CLI.

El trabajo recibe sucesos como variables de entorno. Para obtener más información sobre las variables de entorno enviadas por cron, consulte Variables de entorno para sucesos.

Suscripción a sucesos de temporizador periódico (cron) para un trabajo desde la consola

Desde la consola puedes crear y actualizar suscripciones a eventos de temporizador periódicos para un trabajo.

Antes de empezar

Sigue los siguientes pasos para crear y actualizar una suscripción a un evento de temporizador periódico para un trabajo desde la consola.

  1. Desde la página «Proyectos» de Code Engine, accede a tu proyecto.

  2. En la página Visión general, pulse Suscripciones de sucesos.

  3. En la página Suscripciones de sucesos, pulse Crear para crear la suscripción.

  4. En la página «Crear suscripción a eventos», sigue estos pasos:

    1. Para General, proporcione un nombre para la suscripción de temporizador periódico, por ejemplo, myptimer2. Opcionalmente, puede proporcionar atributos de suceso. Tenga en cuenta que si el consumidor de sucesos de temporizador periódico es una aplicación, los atributos de sucesos están disponibles como cabeceras HTTP. Si el consumidor de sucesos es un trabajo, los atributos de sucesos están disponibles como variables de entorno. Pulse Siguiente para continuar.
    2. Para Planificar, proporcione información sobre la temporización de los sucesos. El generador de eventos de temporizador periódico utiliza la sintaxis estándar de crontab para especificar los detalles del intervalo. Elija el intervalo entre los patrones proporcionados o proporcione su propia expresión cron personalizada, como por ejemplo 0 0 * * *, que especifica que el suceso se producirá todos los días a medianoche. Para este ejemplo, seleccione el patrón de planificación para cada día, cada hora, cada minuto. Observe que la expresión cron se genera por usted. Los patrones de día, hora y minuto y la expresión Cron están en Hora universal coordinada (UTC). Si no especifica una planificación, esta suscripción de suceso envía un suceso cada minuto. Se muestra una lista de los próximos sucesos planificados. Tenga en cuenta que estos próximos sucesos planificados se visualizan en su huso horario. Pulse Siguiente para continuar.
    3. Para Datos de sucesos personalizados, proporcione datos para incluir en el cuerpo del mensaje de suceso. Puede especificar el mensaje como texto sin formato o en formato base64. Para este ejemplo, especifique el texto, hello stranger como el cuerpo del mensaje de suceso. Si el mensaje está en formato base64, puede optar por tener el mensaje decodificado cuando se envíe el suceso. También puede especificar el tipo de contenido para los datos de sucesos personalizados. Pulse Siguiente para continuar.
    4. Para Consumidor de sucesos, especifique la aplicación o el trabajo para recibir sucesos. Observe que puede elegir entre una lista de aplicaciones y trabajos definidos. Para este ejemplo, utilice el trabajo myjob que aparece en la imagen icr.io/codeengine/codeengine. Si aún no has creado tu trabajo, puedes especificar el nombre del mismo y crearlo una vez que hayas creado la suscripción al temporizador periódico. Pulse Siguiente para continuar.
    5. Para Resumen, revise los valores de la suscripción de sucesos de temporizador periódico y realice los cambios si es necesario. Cuando estés listo, haz clic en «Crear» para crear la suscripción al temporizador periódico.
  5. Ahora que ya has creado tu suscripción al temporizador periódico, ve a la página «Suscripciones a eventos» para ver una lista de las suscripciones definidas.

  6. Para actualizar una suscripción, ve a la página de tu suscripción al temporizador periódico. En la página Suscripciones de sucesos, pulse el nombre de la suscripción que desea actualizar.

  7. Desde la página de suscripción al temporizador periódico, modifica los datos del mensaje del evento. En el separador Datos de suceso personalizados, cambie los datos de suceso a hello sunshine. Pulse Guardar para guardar los cambios.

  8. Puesto que el trabajo myjob hace referencia a la aplicación codeengine de ejemplo, que imprime información en los archivos de registro, puede ver los registros. Consulte los registros de trabajo para el trabajo de consumidor de sucesos myjob y vea que el mensaje de suceso es hello sunshine. Consulte Visualización de registros de trabajo desde la consola.

Suscripción a sucesos de temporizador periódico (cron) para un trabajo con la CLI

Antes de empezar

ibmcloud ce job create --name myjob --image icr.io/codeengine/codeengine

Para vincular tu trabajo a la suscripción al temporizador periódico mediante la CLI utilizando el ibmcloud ce sub cron create comando.

ibmcloud ce sub cron create --name NAME --destination-type job --destination JOB_NAME --schedule CRON

Por ejemplo, para crear una suscripción de cron que envíe un suceso a un trabajo llamado myjob cada 5 minutos,

ibmcloud ce sub cron create --name mycronevent --destination-type job --destination myjob --schedule '*/5 * * * *' --data '{ "message": "Hello world!" }' --content-type application/json

Debe ajustar el valor de la planificación entre comillas para asegurarse de que se trata como una sola serie.

En la tabla siguiente se resumen las opciones que se utilizan con el mandato sub cron create en este ejemplo. Para obtener más información sobre el mandato y sus opciones, consulte el mandato ibmcloud ce subscription cron create.

Opciones de mandato
Opción Descripción
--name Nombre del origen de sucesos de cron.
--destination-type El tipo del destination, en este caso, job.
--destination El nombre de un trabajo de Code Engine en el proyecto actual para recibir los sucesos del generador de sucesos.
--schedule Planificar la frecuencia con la que se desencadena el suceso, en formato crontab. Por ejemplo, especifique */2 * * * * (en formato de serie) para cada 2 minutos. De forma predeterminada, el suceso de cron se desencadena cada minuto y se establece en el huso horario de UTC . Para modificar el huso horario, utilice la opción --time-zone. Este valor es opcional.
Consejos para utilizar los mandatos de sub cron
  • El tamaño de los datos de los eventos del temporizador periódico está limitado a un máximo de 4096 bytes. Por lo tanto, si utiliza la opción --data o la opción --data-base64, puede enviar un máximo de 4096 bytes. Para obtener más información, consulte Límites y cuotas para Code Engine.
  • Las suscripciones de cron utilizan la zona horaria UTC de forma predeterminada. Puede cambiar el huso horario especificando la opción --time-zone con los mandatos sub cron create o sub cron update. Para conocer los valores válidos de zonas horarias, consulta la base de datos TZ. Tenga en cuenta que si crea una suscripción utilizando kubectl y no especifica un huso horario, se asigna el uso horario UTC.
  • Si todavía no ha creado la app o el consumidor de sucesos de trabajo, utilice la opción --force con el mandato sub cron create para forzar la creación de la suscripción de sucesos de cron. Puede especificar el nombre de la aplicación o el trabajo y crear la aplicación o crear su trabajo después de crear la suscripción de cron.

Para verificar que la suscripción de cron se ha creado correctamente, ejecute ibmcloud ce sub cron get --name mycronevent.

Salida de ejemplo

Getting cron source 'mycronevent'...
OK
Name:          mycronevent
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           54s
Created:       2021-04-13T11:38:50-05:00
Destination Type:  job
Destination:       myjob
Schedule:          */5 * * * *
Time Zone:         UTC
Content Type:      application/json
Data:              { "message": "Hello world!" }
Ready:             true
Events:
    Type     Reason            Age        Source                 Messages
    Normal   FinalizerUpdate   12s        pingsource-controller  Updated "mycronevent" finalizers

En esta salida, puede ver que el trabajo de destino es myjob, la planificación es */5 * * * * (cada 5 minutos) y el estado Listo es true.

Las ejecuciones de trabajo creadas por suscripciones se suprimen al cabo de 10 minutos.

Actualizar la suscripción de cron con la CLI (trabajo)

Para actualizar la suscripción de cron con la CLI, utilice el mandatoibmcloud ce subscription cron update. Por ejemplo, actualice la suscripción de mycronevent para cambiar la planificación para enviar un suceso a una app denominada myapp cada 2 minutos.

ibmcloud ce sub cron update --name mycronevent --schedule '*/2 * * * *'

Para verificar que la suscripción de cron se ha actualizado correctamente, ejecute el mandato ibmcloud ce sub cron get --name mycronevent. Se actualiza la planificación de la suscripción.

Salida de ejemplo

Getting cron source 'mycronevent'...
OK
Name:          mycronevent
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           2m21s
Created:       2021-08-31T16:00:49-04:00
Destination Type:  job
Destination:       myjob
Schedule:          */2 * * * *
Time Zone:         UTC
Content Type:      application/json
Data:              { "message": "Hello world!" }
Ready:             true
Events:
  Type    Reason                       Age               Source                 Messages
  Normal  PingSourceSynchronized       7s (x3 over 13m)  pingsource-controller  PingSource adapter is synchronized

Visualización de información de sucesos para un trabajo desde la consola

Para ver información sobre las suscripciones de sucesos,

  1. Desde la página «Proyectos» de Code Engine, accede a tu proyecto.
  2. En la página Visión general, pulse Suscripciones de sucesos para ver una lista de suscripciones definidas.

Si el trabajo imprime información en los archivos de registro, como el trabajo de ejemplo codeengine, consulte los archivos de registro para el trabajo de consumidor de sucesos. Consulte Visualización de registros de trabajo desde la consola.

Visualización de la información de sucesos para un trabajo con la CLI

Si el trabajo imprime información en los archivos de registro, como el trabajo de ejemplo codeengine, puede encontrar la ejecución del trabajo que se ha creado a partir del suceso de temporizador periódico (cron) y, a continuación, ver los registros de ejecución del trabajo. Por ejemplo, para encontrar la ejecución del trabajo para el trabajo en el ejemplo anterior,

ibmcloud ce jobrun list

Salida de ejemplo

Listing job runs...
OK
Name         Failed  Pending  Requested  Running  Succeeded  Unknown  Age
myjob-kd829  0       0        0          0        1          0        43s

Visualice los registros de la ejecución del trabajo especificando el nombre de la ejecución del trabajo.

ibmcloud ce jobrun logs --jobrun myjob-kd829

Salida de ejemplo

Hello from helloworld! I'm a batch job! Index: 0
Hello World from:
. ___  __  ____  ____
./ __)/  \(    \(  __)
( (__(  O )) D ( ) _)
.\___)\__/(____/(____)
.____  __ _   ___  __  __ _  ____
(  __)(  ( \ / __)(  )(  ( \(  __)
.) _) /    /( (_ \ )( /    / ) _)
(____)\_)__) \___/(__)\_)__)(____)
Some Env Vars:
--------------
CE_DATA={ "message": "Hello world!" }
CE_ID=abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
CE_SOURCE=/apis/v1/namespaces/1234abcd1a2/pingsources/mycroneventjob
CE_SPECVERSION=1.0
CE_TIME=2021-04-13T17:41:00.429658447Z
CE_TYPE=dev.knative.sources.ping
CONTENT_TYPE=application/json
HOME=/root
HOSTNAME=myjob-mpps4-0-0
JOB_INDEX=0
KUBERNETES_PORT=tcp://172.21.0.1:443
KUBERNETES_PORT_443_TCP=tcp://172.21.0.1:443
KUBERNETES_PORT_443_TCP_ADDR=172.21.0.1
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_HOST=172.21.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
SHLVL=1

Ten en cuenta que la información de registro de las ejecuciones de los trabajos solo se conserva durante una hora. Para obtener más información sobre el registro, consulte Visualización de registros.

Para obtener más información sobre las variables de entorno enviadas por cron, consulte Variables de entorno para sucesos.

¿Desea ver más ejemplos de código? Echa un vistazo a Ejemplos para el repositorio « IBM Cloud Code Engine GitHub ».

Variables de entorno para sucesos que se entregan a trabajos

Todos los sucesos que se entregan a un trabajo se reciben como variables de entorno. Estas variables de entorno incluyen el prefijo « CE_ » y se basan en la especificación CloudEvents.

Cada suceso contiene algunas variables de entorno comunes que aparecen cada vez que se entrega el suceso a un trabajo. El conjunto real de variables en cada suceso puede incluir más opciones. Para obtener más información, consulta los atributos de « CloudEvent ».

En la tabla siguiente se describen las variables de entorno específicas de los sucesos de cron.

Variables de entorno para sucesos
Variable Descripción
CE_DATA Los datos (cuerpo) para el suceso. Consulte CE_DATA para sucesos de cron.
CE_ID Un identificador exclusivo para el suceso, a menos que se vuelva a reproducir un suceso, en cuyo caso se le asigna el mismo ID.
CE_SOURCE Una referencia de URI que indica dónde se ha originado este suceso en el generador de sucesos. Para sucesos de cron, se trata de una referencia de URI con subdominio para el proyecto y el nombre de la suscripción de cron, en el formato siguiente: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/pingsources/[SUBSCRIPTION_NAME].
CE_SPECVERSION La versión de la especificación de CloudEvents. Este valor siempre es 1.0.
CE_TIME La hora a la que se ha generado el suceso.
CE_TYPE El tipo del suceso. Para los sucesos de cron, se trata de dev.knative.sources.ping.

Variable de entorno de CE_DATA

En el caso de los eventos periódicos programados, la variable de entorno CE_DATA contiene el propio evento y tiene el formato que se especifica al crear o actualizar la suscripción.

Salida de ejemplo

CE_DATA={ "message": "Hello world!" }
CE_ID=abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
CE_SOURCE=/apis/v1/namespaces/1234abcd1a2/pingsources/mycroneventjob
CE_SPECVERSION=1.0
CE_TIME=2021-04-13T17:41:00.429658447Z
CE_TYPE=dev.knative.sources.ping

Definición de atributos de suceso adicionales

Al crear una suscripción, puede definir atributos de suceso adicionales que se incluirán en los sucesos generados. Estos atributos de suceso parecen similares a cualquier otro atributo de CloudEvent en la entrega de sucesos. Si elige especificar el nombre de un atributo CloudEvent existente, prevalece sobre el valor original incluido en el suceso. Para obtener más información, consulte ¿Puedo utilizar otras especificaciones de CloudEvents?

Desde la consola, puede especificar atributos de suceso como pares de clave-valor desde el separador General para la suscripción de sucesos de temporizador periódico (cron).

Con la CLI, para definir atributos adicionales, utilice las opciones --extension con el mandato de CLI ibmcloud ce sub cron create.

Supresión de un suscripción

Cuando ya no necesite una suscripción de temporizador periódico (cron), puede suprimirla.

Supresión de una suscripción desde la consola

  1. Desde la página «Proyectos» de Code Engine, accede a tu proyecto.
  2. En la página Visión general, pulse Suscripciones de sucesos para ver una lista de suscripciones definidas.
  3. En la lista de suscripciones, suprima la suscripción que desea eliminar de la aplicación o del trabajo.

Si suprime una app o un trabajo, la suscripción no se suprime.

Supresión de una suscripción con la CLI

Puede suprimir una suscripción ejecutando el mandato ibmcloud ce sub cron delete o el mandato ibmcloud ce sub cos delete.

Por ejemplo, suprima una suscripción de cron denominada mycronevent2,

ibmcloud ce subscription cron delete --name mycronevent2

Si suprime una app o un trabajo, la suscripción no se suprime. En su lugar, en la CLI, la suscripción pasa al estado preparado de false porque la suscripción depende de la disponibilidad de la aplicación o del trabajo. Si vuelve a crear la app o el trabajo (u otra app o trabajo con el mismo nombre), la reconexión de la suscripción y el estado preparado son true.