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 inscrever aplicativos, funções e taref Code Engine s para receber eventos cron.

A assinatura do evento de temporizador periódico utiliza a sintaxe padrão do crontab para especificar os 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.

Ao assinar um produtor de eventos com temporizador periódico, é necessário especificar um destino (aplicativo, função ou tarefa) 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 possui cotas para assinaturas de temporizadores periódicos dentro de 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

Você pode trabalhar com assinaturas de temporizador periódico pelo console ou pela 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 de temporizador periódico para um aplicativo a partir do console.

Antes de Iniciar

Siga as etapas a seguir para criar e atualizar uma assinatura de evento de temporizador periódico para um aplicativo a partir do console.

  1. Na página “Projetos” do Code Engine, acesse o 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”, siga 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 gerador de eventos de temporizador periódico utiliza 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 você ainda não criou seu aplicativo ou tarefa, pode especificar o nome do aplicativo ou da tarefa e criar o aplicativo ou a tarefa depois de criar a assinatura do temporizador periódico. 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 temporizador periódico.
  5. Agora que sua assinatura do temporizador periódico foi criada, acesse a página “Assinaturas de eventos” para visualizar uma lista das assinaturas definidas.

  6. Para atualizar uma assinatura, acesse a página de assinaturas do Temporizador Periódico. Na página Assinaturas de eventos, clique no nome da assinatura que deseja atualizar.

  7. Na página de assinatura do seu temporizador 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 temporizador periódico por meio da CLI, use o ibmcloud ce sub cron create comando.

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

Por exemplo, para criar uma assinatura cron que envie 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 do evento 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 para eventos do temporizador periódico está limitado a um máximo de 4.096 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 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 os exemplos no repositório “ IBM Cloud Code Engine ” GitHub.

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 “Projetos” do Code Engine, acesse o 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 os exemplos no repositório “ IBM Cloud Code Engine ” GitHub.

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 do CloudEvents.

Cabeçalhos

A tabela a seguir descreve os cabeçalhos dos eventos do temporizador 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.

Inscrição em eventos periódicos do cron para uma função

Você pode trabalhar com assinaturas de temporizador periódico pelo console ou pela CLI.

Os eventos são enviados às funções como solicitações POST d 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.

Inscrição em eventos periódicos do cron para uma função a partir do console

É possível criar e atualizar assinaturas de eventos de temporizador periódico para uma função a partir do 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
}

Siga as etapas a seguir para criar e atualizar uma assinatura de evento de temporizador periódico para uma função a partir do console.

  1. Na página “Projetos” do Code Engine, acesse o 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”, siga 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 gerador de eventos de temporizador periódico utiliza 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 entre 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 temporizador periódico.
  5. Agora que sua assinatura do temporizador periódico foi criada, acesse a página “Assinaturas de eventos” para visualizar uma lista das assinaturas definidas.

  6. Para atualizar uma assinatura, acesse a página de assinaturas do Temporizador Periódico. Na página Assinaturas de eventos, clique no nome da assinatura que deseja atualizar.

  7. Na página de assinatura do seu temporizador 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.

Inscrição em eventos periódicos do cron para uma função usando 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 temporizador periódico por meio da CLI, use o ibmcloud ce sub cron create comando:

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

Por exemplo, para criar uma assinatura cron que envie 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 do evento de cron Este valor é necessário.
--destination O nome de um aplicativo, função ou tarefa do Code Engine no projeto atual que 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 para eventos do temporizador periódico está limitado a um máximo de 4.096 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 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

A partir dessa saída, é possível observar que a função de destino é myfun, 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 de forma que envie 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 os exemplos no repositório “ IBM Cloud Code Engine ” GitHub.

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

Para visualizar informações sobre suas inscrições em eventos:

  1. Na página “Projetos” do Code Engine, acesse o 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 gravar informações em arquivos de log, como faz o exemplo de tarefa “ codeengine ”, consulte os arquivos de log da sua função. Consulte Visualizando logs de tarefas a partir do console.

Informações do cabeçalho e do corpo do Cron para eventos enviados às funções

Todos os eventos que são enviados às funções são recebidos como mensagens POST d HTTP. Os eventos contêm determinados cabeçalhos HTTP que ajudam a identificar rapidamente informações essenciais sobre os eventos. HTTP Os cabeçalhos 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 do 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 do 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 de “ body ” é codificado como “ Base64 ”, caso o tipo de conteúdo dos dados do evento personalizado esteja definido como “ application/json ”.

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

Você pode trabalhar com assinaturas de temporizador periódico pelo console ou pela 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 de temporizador periódico para uma tarefa a partir do console.

Antes de Iniciar

Siga as etapas a seguir para criar e atualizar uma assinatura de evento de temporizador periódico para uma tarefa a partir do console.

  1. Na página “Projetos” do Code Engine, acesse o 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”, siga 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 gerador de eventos de temporizador periódico utiliza 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 você ainda não criou seu trabalho, pode especificar o nome dele e criá-lo depois de criar a assinatura do temporizador periódico. 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 temporizador periódico.
  5. Agora que sua assinatura do temporizador periódico foi criada, acesse a página “Assinaturas de eventos” para visualizar uma lista das assinaturas definidas.

  6. Para atualizar uma assinatura, acesse a página de assinaturas do Temporizador Periódico. Na página Assinaturas de eventos, clique no nome da assinatura que deseja atualizar.

  7. Na página de assinatura do seu temporizador 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 temporizador periódico por meio da CLI, utilizando o ibmcloud ce sub cron create comando.

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 do evento 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 para eventos do temporizador periódico está limitado a um máximo de 4.096 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 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 “Projetos” do Code Engine, acesse o 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 log relativas à execução de tarefas permanecem armazenadas por 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 os exemplos no repositório “ IBM Cloud Code Engine ” GitHub.

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 o prefixo CE_ e seguem a 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 os atributos do 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 temporizador periódicos, a variável de ambiente CE_DATA contém o próprio evento e está no formato que você especifica ao criar ou atualizar 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 “Projetos” do Code Engine, acesse o 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.