IBM Cloud Docs
Trabalhando com o produtor de eventos de cronômetro periódico (cron)

Trabalhando com o produtor de eventos de cronômetro periódico (cron)

O produtor de eventos de cronômetro periódico (cron) gera um evento em intervalos regulares. Esse intervalo pode ser planejado por minuto, hora, dia, mês ou por uma combinação de vários intervalos de tempos diferentes. Você pode assinar aplicativos, funções e trabalhos Code Engine para receber eventos cron.

A assinatura do evento Periodic timer usa a sintaxe padrão do crontab para especificar detalhes do intervalo, no formato ' * * * * *, em que os campos são minuto, hora, dia do mês, mês do ano e dia da semana. Por exemplo, para planejar um evento para a meia-noite, especifique 0 0 * * *. Para programar um evento para todas as sextas-feiras à meia-noite, especifique 0 0 * * 5. Para obter mais informações sobre o crontab, consulte CRONTAB.

Ao assinar um produtor de eventos do timer Periodic, você deve fornecer um destino (aplicativo, função ou trabalho) e um tipo de destino para a assinatura. Se você não fornecer um planejamento, o padrão de * * * * * (a cada minuto) será usado.

Code Engine tem cotas para assinaturas de cronômetro periódico em um projeto e limites de assinatura. Para obter mais informações sobre limites do Code Engine, consulte Limites e cotas para o Code Engine.

Inscrevendo-se em eventos de cronômetro periódico (cron) para um aplicativo

É possível trabalhar com assinaturas de temporizador periódico no console ou com a CLI.

Os eventos são enviados para aplicativos como solicitações de POST HTTP. Para obter mais informações sobre as informações que estão incluídas com o evento, consulte cabeçalhos de HTTP e informações do corpo para eventos.

Inscrevendo-se em eventos de cronômetro periódico (cron) para um aplicativo a partir do console

É possível criar e atualizar assinaturas de eventos do timer Periodic para um aplicativo no console.

Antes de Iniciar

Conclua as etapas a seguir para criar e atualizar uma assinatura de evento de timer periódico para um aplicativo no console.

  1. Na página Code Engine Acesse seu projeto.

  2. A partir da página Visão Geral, clique em Assinaturas de eventos.

  3. A partir da página de Assinaturas de eventos, clique em Criar para criar sua assinatura.

  4. Na página Criar assinatura de evento, conclua as etapas a seguir:

    1. Para Tipo de evento, selecione o tile Cronômetro periódico. Clique em Avançar.
    2. Para Geral, forneça um nome para a assinatura de cronômetro Periódico, por exemplo, myptimer. É possível, opcionalmente, fornecer atributos de eventos. Observe que, se o consumidor de evento de cronômetro periódico for um aplicativo, os atributos do evento estarão disponíveis como cabeçalhos HTTP. Se o consumidor do evento for uma tarefa, os atributos do evento estarão disponíveis como variáveis de ambiente. Clique em Avançar para continuar.
    3. Para Programação, forneça informações sobre o horário dos eventos. O produtor de eventos do timer Periodic usa a sintaxe padrão do crontab para especificar os detalhes do intervalo. Escolha seu intervalo a partir dos padrões fornecidos ou forneça sua própria expressão cron customizada, como 0 0 * * *, que especifica que o evento ocorra todos os dias à meia-noite. Para este exemplo, selecione o padrão de programação para todos os dias, todas as horas, todos os minutos. Observe que a expressão cron é gerada para você. Os padrões de dia, hora e minuto e a expressão Cron estão em Hora Universal Coordenada (UTC). Se você não especificar uma programação, então esta assinatura de evento enviará um evento a cada minuto. Uma lista dos próximos eventos programados é exibida. Observe que esses próximos eventos programados são exibidos em seu fuso horário. Clique em Avançar para continuar.
    4. Para Dados de eventos customizados, forneça dados para incluir no corpo da sua mensagem do evento. É possível especificar a mensagem como texto simples ou em formato Base64. Para este exemplo, especifique o texto, hello stranger como o corpo da mensagem do evento. Se a mensagem estiver em formato Base64, é possível optar por ter a mensagem decodificada quando o evento for enviado. Também é possível especificar o tipo de conteúdo para seus dados de eventos customizados. Clique em Avançar para continuar.
    5. Para Consumidor de evento, especifique o aplicativo ou a tarefa a receber eventos. Observe que você pode escolher a partir de uma lista de aplicativos e tarefas definidos. Para este exemplo, use o aplicativo myapp que referencia a imagem icr.io/codeengine/cron. Se ainda não tiver criado o aplicativo ou o trabalho, você poderá especificar o nome do aplicativo ou do trabalho e criar o aplicativo ou o trabalho depois de criar a assinatura do Periodic Timer. Apenas para aplicativos, é possível especificar opcionalmente um caminho. Por padrão, os eventos são encaminhados para a URL raiz do aplicativo de destino. É possível enviar eventos para um destino diferente dentro do app especificando um caminho. Por exemplo, se o seu caminho de assinatura especificar /events, os eventos serão enviados para https://<base application URL>/events. Clique em Avançar para continuar.
    6. Para Resumo, revise as configurações de sua assinatura de evento de cronômetro periódico e faça as alterações, se necessário. Quando estiver pronto, clique em Criar para criar a assinatura do cronômetro periódico.
  5. Agora que a assinatura do cronômetro Periodic foi criada, acesse a página Assinaturas de eventos para visualizar uma listagem da assinatura definida.

  6. Para atualizar uma assinatura, navegue até a página de assinatura do Periodic Timer. Na página Assinaturas de eventos, clique no nome da assinatura que deseja atualizar.

  7. Na página de assinatura do cronômetro periódico, altere os dados na mensagem do evento. Na guia Dados do evento customizado, altere os dados do evento para hello sunshine. Clique em Salvar para salvar suas mudanças.

  8. Como o aplicativo myapp faz referência ao aplicativo cron de amostra, que imprime informações nos arquivos de log, é possível visualizar os logs. Visualize os logs do aplicativo para o aplicativo consumidor de evento myapp e veja se a mensagem do evento é hello sunshine. Consulte Visualizando logs do aplicativo a partir do console.

Inscrevendo-se em eventos de cronômetro periódico (cron) para um aplicativo com a CLI

Antes de Iniciar

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

Para conectar seu aplicativo à assinatura do timer Periodic com a CLI, use o comando ' ibmcloud ce sub cron create.

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

Por exemplo, para criar uma assinatura cron que envia um evento para um aplicativo chamado " myapp todos os dias à meia-noite:

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

Deve-se agrupar o valor da programação entre aspas para garantir que ele seja tratado como uma única sequência.

A tabela a seguir resume as opções usadas no exemplo anterior com o comando sub cron sub cron create. Para obter mais informações sobre o comando e suas opções, consulte o comando ibmcloud ce subscription cron create.

Opções de comando
Opção Descrição
--name O nome da origem de eventos de cron Este valor é necessário.
--destination O nome de um aplicativo ou tarefa do Code Engine no projeto atual para receber os eventos do produtor do evento. Este valor é necessário.
--destination-type O tipo do destination, neste caso, o app. O valor padrão é app.
--schedule Planeje com que frequência o evento é acionado, em formato crontab. Por exemplo, especifique */2 * * * * (em formato de sequência) para cada 2 minutos. Por padrão, o evento de cron é acionado a cada minuto e é configurado para o fuso horário UTC. Para modificar o fuso horário, use a opção --time-zone. Este valor é opcional.
Dicas para usar os comandos sub cron
  • Por padrão, os eventos são encaminhados para a URL raiz do aplicativo de destino. É possível enviar eventos para um destino diferente dentro do app, usando a opção --path. Por exemplo, se a sua assinatura especificar --path /events, os eventos serão enviados para https://<base application URL>/events.
  • O tamanho dos dados dos eventos do timer Periodic é limitado a um máximo de 4096 bytes. Portanto, se você usar a opção --data ou --data-base64, poderá enviar um máximo de 4096 bytes. Para obter mais informações, consulte Limites e cotas para o Code Engine.
  • As assinaturas de cron usam o fuso horário UTC por padrão. É possível mudar o fuso horário especificando a opção --time-zone com os comandos**sub cron create** ou sub cron update. Para obter valores válidos de fuso horário, consulte o banco de dados TZ. Observe que, se você criar uma assinatura usando kubectl e não especificar um fuso horário, o fuso horário UTC será designado.
  • Se você ainda não criou seu aplicativo ou consumidor de evento de tarefa, use a opção --force com o comando sub cron create para forçar a criação da assinatura de evento de cron. É possível especificar o nome do seu aplicativo ou tarefa e criar seu aplicativo ou criar sua tarefa depois de criar a assinatura de cron.

Para verificar se a sua assinatura de cron foi criada com sucesso, execute o comando ibmcloud ce sub cron get --name mycronevent.

Saída de exemplo

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

A partir desta saída, é possível ver que o aplicativo de destino é o myapp, a programação é 0 0 * * * (todos os dias à meia-noite) e o estado Pronto é true.

Atualizando sua assinatura de cron com a CLI

Para atualizar a assinatura de cron com a CLI, use o comando ibmcloud ce subscription cron update. Por exemplo, atualize a assinatura mycronevent para alterar a programação para enviar um evento a um aplicativo chamado myapp a cada 2 minutos.

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

Para verificar se a sua assinatura de cron foi atualizada com sucesso, execute o comando ibmcloud ce sub cron get --name mycronevent. A programação da assinatura foi atualizada.

Saída de exemplo

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

Deseja experimentar um tutorial? Consulte Inscrevendo-se em eventos de cronômetro periódico (cron). Procurando mais exemplos de código? Confira as Amostras para IBM Cloud Code Engine GitHub repo.

Visualizando informações de eventos para um aplicativo a partir do console

Para visualizar informações sobre suas assinaturas de eventos,

  1. Na página Code Engine Acesse seu projeto.
  2. A partir da página Visão Geral, clique em Assinaturas de eventos para visualizar uma listagem de assinaturas definidas.

Se o seu aplicativo imprimir informações em arquivos de log, como o aplicativo cron de amostra faz, visualize os arquivos de log para o seu aplicativo de consumidor de eventos. Consulte Visualizando logs do aplicativo a partir do console.

Visualizando informações de evento para um aplicativo com a CLI

Se seu aplicativo imprimir informações em arquivos de log, como o aplicativo cron de amostra faz, visualize os arquivos de log para seu aplicativo de consumidor de evento com o comando da CLI ibmcloud ce app logs. Por exemplo, para visualizar os logs para o aplicativo que você criou no exemplo anterior.

ibmcloud ce application logs --application myapp

Saída de exemplo

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 obter mais informações sobre a criação de log, consulte Visualizando logs.

Procurando mais exemplos de código? Confira as Amostras para IBM Cloud Code Engine GitHub repo.

Informações de cabeçalho e corpo do cron para eventos entregues a aplicativos

Todos os eventos que são entregues aos aplicativos são recebidos como mensagens HTTP POST. Os eventos contêm certos cabeçalhos de HTTP que o ajudam a determinar rapidamente os bits de chave de informações sobre os eventos sem olhar para o corpo (lógica de negócios) do evento. Para obter mais informações, consulte a especificação 'CloudEvents.

Cabeçalhos

A tabela a seguir descreve os cabeçalhos dos eventos de cronômetro periódico (cron):

Campos de cabeçalho para eventos
Cabeçalho Descrição
ce-id Um identificador exclusivo para o evento, a menos que um evento seja reproduzido. Nesse caso, ele é designado com o mesmo ID.
ce-source Uma referência de URI que indica de que local esse evento teve origem dentro do produtor de evento. Para eventos de cron, este cabeçalho é uma referência de URI com subdomínio para o projeto e o nome da assinatura de cron, no seguinte formato: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/pingsources/[SUBSCRIPTION_NAME].
ce-specversion A versão da especificação CloudEvents. Esse valor é sempre 1.0.
ce-time O horário no qual o evento foi gerado.
ce-type O tipo do evento. Para eventos de cron, este é dev.knative.sources.ping.

Saída de exemplo

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

Corpo HTTP

O corpo HTTP contém o próprio evento e está no formato que você especifica ao criar ou ao atualizar a assinatura.

Assinatura de eventos de cronômetro periódico (cron) para uma função

É possível trabalhar com assinaturas de temporizador periódico no console ou com a CLI.

Os eventos são enviados às funções como solicitações HTTP POST. Para obter mais informações sobre as informações que estão incluídas com o evento, consulte cabeçalhos de HTTP e informações do corpo para eventos.

Assinatura de eventos de cronômetro periódico (cron) para uma função no console

É possível criar e atualizar assinaturas de eventos do timer Periodic para uma função no console.

Antes de Iniciar

/**
 * 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
}

Conclua as etapas a seguir para criar e atualizar uma assinatura de evento de timer periódico para uma função no console.

  1. Na página Code Engine Acesse seu projeto.

  2. A partir da página Visão Geral, clique em Assinaturas de eventos.

  3. A partir da página de Assinaturas de eventos, clique em Criar para criar sua assinatura.

  4. Na página Criar assinatura de evento, conclua as etapas a seguir:

    1. Para Tipo de evento, selecione o tile Cronômetro periódico. Clique em Avançar.
    2. Para Geral, forneça um nome para a assinatura de cronômetro Periódico, por exemplo, myptimer. É possível, opcionalmente, fornecer atributos de eventos. Observe que, se o consumidor de evento de cronômetro periódico for um aplicativo, os atributos do evento estarão disponíveis como cabeçalhos HTTP. Se o consumidor de eventos for uma função, os atributos de eventos estarão disponíveis como pares chave-valor na propriedade __ce_headers do objeto params. Clique em Avançar para continuar.
    3. Para Programação, forneça informações sobre o horário dos eventos. O produtor de eventos do timer Periodic usa a sintaxe padrão do crontab para especificar os detalhes do intervalo. Escolha seu intervalo a partir dos padrões fornecidos ou forneça sua própria expressão cron customizada, como 0 0 * * *, que especifica que o evento ocorra todos os dias à meia-noite. Para este exemplo, selecione o padrão de programação para todos os dias, todas as horas, todos os minutos. Observe que a expressão cron é gerada para você. Os padrões de dia, hora e minuto e a expressão Cron estão em Hora Universal Coordenada (UTC). Se você não especificar uma programação, então esta assinatura de evento enviará um evento a cada minuto. Uma lista dos próximos eventos programados é exibida. Observe que esses próximos eventos programados são exibidos em seu fuso horário. Clique em Avançar para continuar.
    4. Para Dados de eventos customizados, forneça dados para incluir no corpo da sua mensagem do evento. É possível especificar a mensagem como texto simples ou em formato Base64. Para este exemplo, especifique o texto, hello stranger como o corpo da mensagem do evento. Se a mensagem estiver em formato Base64, é possível optar por ter a mensagem decodificada quando o evento for enviado. Também é possível especificar o tipo de conteúdo para seus dados de eventos customizados. Clique em Avançar para continuar.
    5. Para Consumidor de evento, escolha o tipo de componente Function e especifique a função para receber eventos. Observe que você pode escolher em uma lista de funções definidas. Para este exemplo, use a função myfun que usa o código sequencial de amostra Se você ainda não tiver criado sua função, será possível especificar o nome de sua função e Criando cargas de trabalho de função com código sequencial depois de criar a assinatura do cronômetro periódico. Clique em Avançar para continuar.
    6. Para Resumo, revise as configurações de sua assinatura de evento de cronômetro periódico e faça as alterações, se necessário. Quando estiver pronto, clique em Criar para criar a assinatura do cronômetro periódico.
  5. Agora que a assinatura do cronômetro Periodic foi criada, acesse a página Assinaturas de eventos para visualizar uma listagem da assinatura definida.

  6. Para atualizar uma assinatura, navegue até a página de assinatura do Periodic Timer. Na página Assinaturas de eventos, clique no nome da assinatura que deseja atualizar.

  7. Na página de assinatura do cronômetro periódico, altere os dados na mensagem do evento. Na guia Dados do evento customizado, altere os dados do evento para { "hello": "world" } e escolha application/json como o Tipo de conteúdo de dados do evento customizado. Clique em Salvar para salvar suas mudanças.

  8. Como a função myfun usa o código sequencial de amostra, que imprime o objeto params completo para os arquivos de log, é possível visualizar os logs para verificar se a função foi chamada Visualize os logs de função para a função do consumidor de eventos do myfun e veja se o objeto params contém um par chave-valor hello: world.. Também é possível ver que o campo body do objeto params contém o valor codificado Base64 { "hello": "world" } Consulte Visualizando logs de função do console.

Assinatura de eventos de cronômetro periódico (cron) para uma função com a CLI

Antes de Iniciar

/**
 * 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
}

Salve o código em um arquivo chamado sample_inline_code.js e crie a função usando o comando a seguir:

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

Para conectar sua função à assinatura do timer periódico com a CLI, use o comando ' ibmcloud ce sub cron create:

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

Por exemplo, para criar uma assinatura cron que envia um evento para um aplicativo chamado " myfun todos os dias à meia-noite:

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

Deve-se agrupar o valor da programação entre aspas para garantir que ele seja tratado como uma única sequência.

A tabela a seguir resume as opções usadas no exemplo anterior com o comando sub cron sub cron create. Para obter mais informações sobre o comando e suas opções, consulte o comando ibmcloud ce subscription cron create.

Opções de comando
Opção Descrição
--name O nome da origem de eventos de cron Este valor é necessário.
--destination O nome de um aplicativo, função ou trabalho Code Engine no projeto atual para receber os eventos do produtor de eventos. Este valor é necessário.
--destination-type O tipo do destination, neste caso, o function. O valor padrão é app.
--schedule Planeje com que frequência o evento é acionado, em formato crontab. Por exemplo, especifique */2 * * * * (em formato de sequência) para cada 2 minutos. Por padrão, o evento de cron é acionado a cada minuto e é configurado para o fuso horário UTC. Para modificar o fuso horário, use a opção --time-zone. Este valor é opcional.
Dicas para usar os comandos sub cron
  • O tamanho dos dados dos eventos do timer Periodic é limitado a um máximo de 4096 bytes. Portanto, se você usar a opção --data ou --data-base64, poderá enviar um máximo de 4096 bytes. Para obter mais informações, consulte Limites e cotas para o Code Engine.
  • As assinaturas de cron usam o fuso horário UTC por padrão. É possível mudar o fuso horário especificando a opção --time-zone com os comandos**sub cron create** ou sub cron update. Para obter valores válidos de fuso horário, consulte o banco de dados TZ. Observe que, se você criar uma assinatura usando kubectl e não especificar um fuso horário, o fuso horário UTC será designado.
  • Se você ainda não criou seu aplicativo ou consumidor de evento de tarefa, use a opção --force com o comando sub cron create para forçar a criação da assinatura de evento de cron. É possível especificar o nome de sua função Criar uma função depois de criar a assinatura cron.

Para verificar se a sua assinatura de cron foi criada com sucesso, execute o comando ibmcloud ce sub cron get --name mycronevent.

Saída de exemplo

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

Nessa saída, você pode ver que a função de destino é ' myfun, a programação é ' 0 0 * * * (todos os dias à meia-noite) e o estado Ready é ' true.

Atualizando sua assinatura de cron com a CLI

Para atualizar a assinatura de cron com a CLI, use o comando ibmcloud ce subscription cron update. Por exemplo, atualize a assinatura " mycronevent para alterar a programação e enviar um evento para uma função chamada " myfun a cada 2 minutos:

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

Para verificar se a sua assinatura de cron foi atualizada com sucesso, execute o comando ibmcloud ce sub cron get --name mycronevent. A programação da assinatura foi atualizada.

Saída de exemplo

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

Deseja experimentar um tutorial? Consulte Inscrevendo-se em eventos de cronômetro periódico (cron). Procurando mais exemplos de código? Confira as Amostras para IBM Cloud Code Engine GitHub repo.

Visualização de informações de eventos de uma função no console

Para visualizar informações sobre suas assinaturas de eventos:

  1. Na página Code Engine Acesse seu projeto.
  2. A partir da página Visão Geral, clique em Assinaturas de eventos para visualizar uma listagem de assinaturas definidas.

Se a sua função imprime informações em arquivos de registro, como faz o trabalho de exemplo " codeengine, visualize os arquivos de registro da sua função. Consulte Visualizando logs de tarefas a partir do console.

Informações de cabeçalho e corpo do Cron para eventos entregues a funções

Todos os eventos que são entregues às funções são recebidos como mensagens HTTP POST. Os eventos contêm determinados cabeçalhos HTTP que ajudam a determinar rapidamente bits de informações chave sobre os eventos. Cabeçalhos HTTP são armazenados na propriedade __ce_headers do objeto params com o qual a função é chamada. Para obter mais informações, consulte a especificação 'CloudEvents.

Cabeçalhos

A tabela a seguir descreve os pares chave-valor em __ce_headers para eventos de cronômetro periódico (cron):

Arquivos de cabeçalho para eventos
Cabeçalho Descrição
Ce-Id Um identificador exclusivo para o evento, a menos que um evento seja reproduzido. Nesse caso, ele é designado com o mesmo ID.
Ce-Source Uma referência de URI que indica de que local esse evento teve origem dentro do produtor de evento. Para eventos de cron, este cabeçalho é uma referência de URI com subdomínio para o projeto e o nome da assinatura de cron, no seguinte formato: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/pingsources/[SUBSCRIPTION_NAME].
Ce-Specversion A versão da especificação CloudEvents. Esse valor é sempre 1.0.
Ce-Time O horário no qual o evento foi gerado.
Ce-Type O tipo do evento. Para eventos de cron, este é dev.knative.sources.ping.

Saída de exemplo

  __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"
  }

Corpo HTTP

O corpo HTTP contém os dados do evento personalizado e está no formato que você especifica ao criar ou atualizar a assinatura. É possível acessar os dados do evento customizado da propriedade body no objeto params.

Objeto de exemplo params para uma chamada de evento com dados do evento customizado configurado como hello stranger e Tipo de conteúdo de dados do evento customizado configurado como 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"
  }

O valor para body é Base64 codificado, se Tipo de conteúdo de dados do evento customizado for configurado como application/json.

Inscrevendo-se em eventos de cronômetro periódico (cron) para um tarefa

É possível trabalhar com assinaturas de temporizador periódico no console ou com a CLI.

A sua tarefa recebe eventos como variáveis de ambiente. Para obter mais informações sobre as variáveis de ambiente enviadas pelo cron, consulte Variáveis de ambiente para eventos.

Inscrevendo-se em eventos de cronômetro periódico (cron) para uma tarefa a partir do console

É possível criar e atualizar assinaturas de eventos do timer Periodic para um trabalho no console.

Antes de Iniciar

Conclua as etapas a seguir para criar e atualizar uma assinatura de evento de timer periódico para um trabalho no console.

  1. Na página Code Engine Acesse seu projeto.

  2. A partir da página Visão Geral, clique em Assinaturas de eventos.

  3. A partir da página de Assinaturas de eventos, clique em Criar para criar sua assinatura.

  4. Na página Criar assinatura de evento, conclua as etapas a seguir:

    1. Para Geral, forneça um nome para a assinatura de cronômetro Periódico, por exemplo, myptimer2. É possível, opcionalmente, fornecer atributos de eventos. Observe que, se o consumidor de evento de cronômetro periódico for um aplicativo, os atributos do evento estarão disponíveis como cabeçalhos HTTP. Se o consumidor do evento for uma tarefa, os atributos do evento estarão disponíveis como variáveis de ambiente. Clique em Avançar para continuar.
    2. Para Programação, forneça informações sobre o horário dos eventos. O produtor de eventos do timer Periodic usa a sintaxe padrão do crontab para especificar os detalhes do intervalo. Escolha seu intervalo a partir dos padrões fornecidos ou forneça sua própria expressão cron customizada, como 0 0 * * *, que especifica que o evento ocorra todos os dias à meia-noite. Para este exemplo, selecione o padrão de programação para todos os dias, todas as horas, todos os minutos. Observe que a expressão cron é gerada para você. Os padrões de dia, hora e minuto e a expressão Cron estão em Hora Universal Coordenada (UTC). Se você não especificar uma programação, então esta assinatura de evento enviará um evento a cada minuto. Uma lista dos próximos eventos programados é exibida. Observe que esses próximos eventos programados são exibidos em seu fuso horário. Clique em Avançar para continuar.
    3. Para Dados de eventos customizados, forneça dados para incluir no corpo da sua mensagem do evento. É possível especificar a mensagem como texto simples ou em formato Base64. Para este exemplo, especifique o texto, hello stranger como o corpo da mensagem do evento. Se a mensagem estiver em formato Base64, é possível optar por ter a mensagem decodificada quando o evento for enviado. Também é possível especificar o tipo de conteúdo para seus dados de eventos customizados. Clique em Avançar para continuar.
    4. Para Consumidor de evento, especifique o aplicativo ou a tarefa a receber eventos. Observe que você pode escolher a partir de uma lista de aplicativos e tarefas definidos. Para este exemplo, use a tarefa myjob que referencia a imagem icr.io/codeengine/codeengine. Se ainda não tiver criado o trabalho, você poderá especificar o nome do trabalho e criá-lo depois de criar a assinatura do Periodic Timer. Clique em Avançar para continuar.
    5. Para Resumo, revise as configurações de sua assinatura de evento de cronômetro periódico e faça as alterações, se necessário. Quando estiver pronto, clique em Criar para criar a assinatura do cronômetro periódico.
  5. Agora que a assinatura do cronômetro Periodic foi criada, acesse a página Assinaturas de eventos para visualizar uma listagem da assinatura definida.

  6. Para atualizar uma assinatura, navegue até a página de assinatura do Periodic Timer. Na página Assinaturas de eventos, clique no nome da assinatura que deseja atualizar.

  7. Na página de assinatura do cronômetro periódico, altere os dados na mensagem do evento. Na guia Dados do evento customizado, altere os dados do evento para hello sunshine. Clique em Salvar para salvar suas mudanças.

  8. Como a tarefa myjob faz referência ao aplicativo codeengine de amostra, que imprime informações em arquivos de log, é possível visualizar os logs. Visualize os logs da tarefa para a tarefa do consumidor de evento myjob e veja se a mensagem do evento é hello sunshine. Consulte Visualizando logs de tarefas a partir do console.

Inscrevendo-se em eventos de cronômetro periódico (cron) para uma tarefa com a CLI

Antes de Iniciar

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

Para conectar seu trabalho à assinatura do timer Periodic com a CLI, use o comando ' ibmcloud ce sub cron create.

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

Por exemplo, para criar uma assinatura de cron que envia um evento para uma tarefa chamada myjob a cada 5 minutes minutos,

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

Deve-se agrupar o valor da programação entre aspas para garantir que ele seja tratado como uma única sequência.

A tabela a seguir resume as opções que são usadas com o comando sub cron create neste exemplo. Para obter mais informações sobre o comando e suas opções, consulte o comando ibmcloud ce subscription cron create.

Opções de comando
Opção Descrição
--name O nome da origem de eventos de cron
--destination-type O tipo do destination, neste caso, o job.
--destination O nome de uma tarefa do Code Engine no projeto atual para receber os eventos do produtor de evento.
--schedule Planeje com que frequência o evento é acionado, em formato crontab. Por exemplo, especifique */2 * * * * (em formato de sequência) para cada 2 minutos. Por padrão, o evento de cron é acionado a cada minuto e é configurado para o fuso horário UTC. Para modificar o fuso horário, use a opção --time-zone. Este valor é opcional.
Dicas para usar os comandos sub cron
  • O tamanho dos dados dos eventos do timer Periodic é limitado a um máximo de 4096 bytes. Portanto, se você usar a opção --data ou --data-base64, poderá enviar um máximo de 4096 bytes. Para obter mais informações, consulte Limites e cotas para o Code Engine.
  • As assinaturas de cron usam o fuso horário UTC por padrão. É possível mudar o fuso horário especificando a opção --time-zone com os comandos**sub cron create** ou sub cron update. Para obter valores válidos de fuso horário, consulte o banco de dados TZ. Observe que, se você criar uma assinatura usando kubectl e não especificar um fuso horário, o fuso horário UTC será designado.
  • Se você ainda não criou seu aplicativo ou consumidor de evento de tarefa, use a opção --force com o comando sub cron create para forçar a criação da assinatura de evento de cron. É possível especificar o nome do seu aplicativo ou tarefa e criar seu aplicativo ou criar sua tarefa depois de criar a assinatura de cron.

Para verificar se sua assinatura de cron foi criada com sucesso, execute ibmcloud ce sub cron get --name mycronevent.

Saída de exemplo

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

Por meio dessa saída, é possível ver que a tarefa de destino é myjob, o planejamento é */5 * * * * (a cada cinco minutos) e o estado Pronto é true.

As execuções de tarefas que são criadas por assinaturas são excluídas após 10 minutos.

Atualizando a assinatura do cron com a CLI (tarefa)

Para atualizar a assinatura de cron com a CLI, use o comando ibmcloud ce subscription cron update. Por exemplo, atualize a assinatura mycronevent para alterar a programação para enviar um evento a um aplicativo chamado myapp a cada 2 minutos.

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

Para verificar se a sua assinatura de cron foi atualizada com sucesso, execute o comando ibmcloud ce sub cron get --name mycronevent. A programação da assinatura foi atualizada.

Saída de exemplo

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

Visualizando informações do evento para uma tarefa a partir do console

Para visualizar informações sobre suas assinaturas de eventos,

  1. Na página Code Engine Acesse seu projeto.
  2. A partir da página Visão Geral, clique em Assinaturas de eventos para visualizar uma listagem de assinaturas definidas.

Se a sua tarefa imprime informações em arquivos de log, como a tarefa codeengine de amostra faz, visualize os arquivos de log para sua tarefa de consumidor de evento. Consulte Visualizando logs de tarefas a partir do console.

Visualizando informações de evento para uma tarefa com a CLI

Se a sua tarefa imprimir informações em arquivos de log, como a tarefa codeengine de amostra faz, é possível localizar a execução da tarefa que foi criada a partir do evento de cronômetro periódico e, em seguida, visualizar os logs de execução da tarefa. Por exemplo, para localizar a execução da tarefa para a tarefa no exemplo anterior.

ibmcloud ce jobrun list

Saída de exemplo

Listing job runs...
OK

Name         Failed  Pending  Requested  Running  Succeeded  Unknown  Age
myjob-kd829  0       0        0          0        1          0        43s

Visualize os logs para a execução da tarefa especificando o nome de execução da tarefa.

ibmcloud ce jobrun logs --jobrun myjob-kd829

Saída de exemplo

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

Observe que as informações de registro para execuções de trabalho duram apenas uma hora. Para obter mais informações sobre a criação de log, consulte Visualizando logs.

Para obter mais informações sobre as variáveis de ambiente enviadas pelo cron, consulte Variáveis de ambiente para eventos.

Procurando mais exemplos de código? Confira as Amostras para IBM Cloud Code Engine GitHub repo.

Variáveis de ambiente para eventos que são entregues a tarefas

Todos os eventos que são entregues a uma tarefa são recebidos como variáveis de ambiente. Essas variáveis de ambiente incluem um prefixo de " CE_ e são baseadas no " especificação CloudEvents.

Cada evento contém algumas variáveis de ambiente comuns que aparecem sempre que o evento é entregue a uma tarefa. O conjunto real de variáveis em cada evento pode incluir mais opções. Para obter mais informações, consulte o ' atributos CloudEvent.

A tabela a seguir descreve as variáveis de ambiente que são específicas para eventos de cron.

Variáveis de ambiente para eventos
Variável Descrição
CE_DATA Os dados (corpo) do evento. Consulte CE_DATA para eventos de cron.
CE_ID Um identificador exclusivo para o evento, a menos que um evento seja reproduzido. Nesse caso, ele é designado com o mesmo ID.
CE_SOURCE Uma referência de URI que indica de que local esse evento teve origem dentro do produtor de evento. Para eventos de cron, esta é uma referência de URI com subdomínio para o projeto e o nome da assinatura de cron, no formato a seguir: /apis/v1/namespaces/[PROJECT_SUBDOMAIN]/pingsources/[SUBSCRIPTION_NAME].
CE_SPECVERSION A versão da especificação CloudEvents. Esse valor é sempre 1.0.
CE_TIME O horário no qual o evento foi gerado.
CE_TYPE O tipo do evento. Para eventos de cron, este é dev.knative.sources.ping.

CE_DATAVariável de ambiente

Para eventos de cronômetro periódico, a variável de ambiente ' CE_DATA contém o próprio evento e está no formato especificado quando você cria ou atualiza a assinatura.

Saída de exemplo

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

Definindo atributos de eventos adicionais

Ao criar uma assinatura, é possível definir atributos de eventos adicionais a serem incluídos em quaisquer eventos gerados. Esses atributos de evento parecem semelhantes a qualquer outro atributo de CloudEvent na entrega do evento. Se você optar por especificar o nome de um atributo CloudEvent existente, ele substituirá o valor original que foi incluído no evento. Para obter mais informações, consulte É possível usar outras especificações CloudEvents?

No console, é possível especificar atributos de eventos como pares de valores-chave na guia Geral para sua assinatura de evento de cronômetro periódico (cron).

Com a CLI, para definir atributos adicionais, use as opções --extension com o comando da CLI ibmcloud ce sub cron create.

Excluindo uma assinatura

Quando você não precisar mais de uma assinatura de cronômetro periódico (cron), será possível excluí-la.

Excluindo uma assinatura a partir do console

  1. Na página Code Engine Acesse seu projeto.
  2. A partir da página Visão Geral, clique em Assinaturas de eventos para visualizar uma listagem de assinaturas definidas.
  3. Na lista de assinaturas, exclua a assinatura que deseja remover de seu aplicativo ou tarefa.

Se você excluir um app ou uma tarefa, a assinatura não será excluída.

Excluindo uma assinatura com a CLI

É possível excluir uma assinatura executando o comando ibmcloud ce sub cron delete ou o comando ibmcloud ce sub cos delete.

Por exemplo, exclua uma assinatura de cron chamada mycronevent2,

ibmcloud ce subscription cron delete --name mycronevent2

Se você excluir um app ou uma tarefa, a assinatura não será excluída. Em vez disso, na CLI, a assinatura passa para o estado pronto de false porque a assinatura depende da disponibilidade do aplicativo ou da tarefa. Se você recriar o app ou a tarefa (ou outro app ou tarefa com o mesmo nome), a sua assinatura se reconectará e o estado Pronto será true.