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. Puede suscribirse a aplicaciones, funciones y trabajos de Code Engine para recibir eventos cron.

La suscripción al evento Temporizador periódico utiliza la sintaxis estándar de crontab para especificar los detalles del intervalo, en 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. Para obtener más información sobre crontab, consulte CRONTAB.

Cuando se suscribe a un productor de eventos de temporizador periódico, debe proporcionar un destino (aplicación, función o trabajo) y un tipo de destino para la suscripción. Si no proporciona una planificación, se utiliza como valor predeterminado * * * * * (cada minuto).

Code Engine tiene cuotas para las suscripciones a temporizadores periódicos 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

Puede trabajar con suscripciones a temporizadores periódicos desde la consola o con 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

Puede crear y actualizar suscripciones a eventos de temporizador periódico para una aplicación desde la consola.

Antes de empezar

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

  1. En la página Code Engine Projects, vaya a su 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 un evento, complete los siguientes 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 productor de eventos 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 ha creado su aplicación o trabajo, puede especificar el nombre de su aplicación o trabajo y crear su aplicación o crear su trabajo después de crear 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é listo, haga clic en Crear para crear la suscripción al temporizador Periódico.
  5. Una vez creada la suscripción al temporizador periódico, vaya a la página Suscripciones a eventos para ver una lista de las suscripciones definidas.

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

  7. En la página de suscripción al temporizador periódico, cambie los datos del mensaje de 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 su aplicación a la suscripción del temporizador periódico con la CLI, utilice el comando 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 periódicos del temporizador 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 de zona horaria válidos, consulte 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? Consulte los ejemplos de para 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. En la página Code Engine Projects, vaya a su 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? Consulte los ejemplos de para 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 más información, consulte las especificaciones de CloudEvents.

Cabeceras

La siguiente tabla describe las cabeceras de los eventos de 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.

Suscripción a eventos de temporizador periódico (cron) para una función

Puede trabajar con suscripciones a temporizadores periódicos desde la consola o con la CLI.

Los eventos se envían a las funciones como peticiones POST a 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.

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

Puede crear y actualizar suscripciones a eventos de temporizador periódico 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
}

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

  1. En la página Code Engine Projects, vaya a su 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 un evento, complete los siguientes 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 productor de eventos 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. Observe que puede 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é listo, haga clic en Crear para crear la suscripción al temporizador Periódico.
  5. Una vez creada la suscripción al temporizador periódico, vaya a la página Suscripciones a eventos para ver una lista de las suscripciones definidas.

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

  7. En la página de suscripción al temporizador periódico, cambie los datos del mensaje de 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.

Suscripción a eventos de temporizador periódico (cron) para una función con 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 conectar su función a la suscripción del temporizador periódico con la CLI, utilice el ibmcloud ce sub cron create 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 trabajo de Code Engine en el proyecto actual para recibir los eventos del productor 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 periódicos del temporizador 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 de zona horaria válidos, consulte 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

De esta salida, se puede ver que la función de destino es myfun, el horario es 0 0 * * * (todos los días a medianoche), y el estado Listo 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, actualice la suscripción a mycronevent para cambiar la programación y enviar 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? Consulte los ejemplos de para IBM Cloud Code Engine GitHub.

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

Para ver información sobre sus suscripciones a eventos:

  1. En la página Code Engine Projects, vaya a su proyecto.
  2. En la página Visión general, pulse Suscripciones de sucesos para ver una lista de suscripciones definidas.

Si su función imprime información en archivos de registro, como lo hace el ejemplo de trabajo codeengine, entonces vea los archivos de registro para su función. Consulte Visualización de registros de trabajo desde la consola.

Información de cabecera y cuerpo de Cron para eventos enviados a funciones

Todos los eventos que se entregan a las funciones se reciben como mensajes POST de HTTP. Los eventos contienen ciertas cabeceras HTTP que le ayudarán a determinar rápidamente fragmentos clave de información sobre los eventos. HTTP se almacenan en la propiedad __ce_headers del objeto params con el que se invoca la función. Para más información, consulte las especificaciones de 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 de HTTP contiene los datos del evento personalizado y está en el formato que especifique 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 está codificado en Base64, si Tipo de contenido de datos de sucesos personalizados está establecido en application/json.

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

Puede trabajar con suscripciones a temporizadores periódicos desde la consola o con 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

Puede crear y actualizar suscripciones a eventos de temporizador periódico para un trabajo desde la consola.

Antes de empezar

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

  1. En la página Code Engine Projects, vaya a su 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 un evento, complete los siguientes 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 productor de eventos 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 ha creado el trabajo, puede especificar el nombre del trabajo y crearlo después de crear 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é listo, haga clic en Crear para crear la suscripción al temporizador Periódico.
  5. Una vez creada la suscripción al temporizador periódico, vaya a la página Suscripciones a eventos para ver una lista de las suscripciones definidas.

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

  7. En la página de suscripción al temporizador periódico, cambie los datos del mensaje de 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 conectar su trabajo a la suscripción del temporizador periódico con la CLI mediante el comando 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 periódicos del temporizador 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 de zona horaria válidos, consulte 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. En la página Code Engine Projects, vaya a su 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

Tenga en cuenta que la información de registro de las ejecuciones de trabajo sólo dura 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? Consulte los ejemplos de para 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 más información, consulte los atributos 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

Para los eventos de temporizador periódico, la variable de entorno CE_DATA contiene el evento en sí 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. En la página Code Engine Projects, vaya a su 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.