IBM Cloud Docs
Assinando eventos de cron

Assinando eventos de cron

Com este tutorial, é possível aprender a se inscrever em eventos de cron usando a CLI da IBM Cloud® Code Engine.

Muitas vezes, em ambientes distribuídos, você deseja que os seus aplicativos ou tarefas reajam a mensagens (eventos) que são geradas por meio de outros componentes, que geralmente são chamados de produtores de evento. Com o Code Engine, seus aplicativos ou tarefas podem receber eventos de interesse assinando os produtores de evento. As informações do evento são recebidas como solicitações de HTTP POST para aplicativos e como variáveis de ambiente para tarefas.

Antes de Iniciar

Todos os usuários do Code Engine são obrigados a ter uma conta pré-paga. Os tutoriais podem gerar custos adicionais. Use o Estimador de custos para gerar uma estimativa de custo com base em seu uso planejado. Para obter mais informações, consulte Code Engine preços.

Determine o seu intervalo de cron

O produtor de evento de cron gera eventos 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.

O Cron usa um crontab padrão para especificar os detalhes do intervalo, no formato * * * * *, que significa minuto, hora, dia do mês, mês e dia da semana. Por exemplo, para planejar um evento para a meia-noite, especifique 0 0 * * *. Para planejar um evento para todas as sextas-feiras à meia-noite, especifique 0 0 * * FRI.

Para obter mais informações sobre o crontab, consulte CRONTAB.

É possível configurar o seu intervalo de cron usando a opção --schedule com o comando subscription cron, como mostrado na Etapa 3. Se você não especificar a opção --schedule, por padrão, o evento cron será enviado a cada minuto de cada dia.

Crie seu app (ou tarefa)

Enquanto os eventos podem ser usados para acionar apps ou tarefas, este tutorial usa um app.

Crie seu aplicativo chamado cron-app com o comando ibmcloud ce app create. Este app extrai uma imagem que é chamada icr.io/codeengine/cron. Esse app registra cada evento à medida que ele chega, mostrando o conjunto completo de carga útil de Cabeçalhos de HTTP e de Corpo de HTTP. Para obter mais informações sobre o código usado neste exemplo, consulte ' cron.

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

Execute ibmcloud ce application get --name cron-app para verificar se o seu app está em um estado Ready.

Você pode encontrar mais informações sobre esse aplicativo no arquivo readme do cron.

Criar uma assinatura

Depois que seu aplicativo estiver pronto, crie uma assinatura para o produtor de evento de cron e conecte-o ao seu aplicativo com o comando ibmcloud ce sub cron create.

O exemplo a seguir cria uma assinatura de cron chamada cron-sub e especifica o aplicativo cron-app como seu destino. A assinatura usa a opção --data para incluir uma sequência JSON no evento de cron. Ela também especifica a programação do cron usando a opção --schedule com um valor de * * * * * para enviar um evento a cada minuto de cada dia para o aplicativo cron-app.

ibmcloud ce sub cron create --name cron-sub --destination cron-app --data '{"mydata":"hello world"}' --schedule '* * * * *'

Execute ibmcloud ce sub cron get -n cron-sub para localizar informações sobre a sua assinatura.

Exemplo de saída

Nessa saída, é possível ver que o nome da assinatura, o destino, o planejamento e os dados estão corretos.

Getting cron event subscription 'cron-sub'...
OK

Name:          cron-sub  
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject  
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111  
Age:           2m18s  
Created:       2021-03-14T13:21:13-05:00   

Destination Type:  app  
Destination:       cron-app  
Schedule:          * * * * *  
Time Zone:         UTC  
Data:              {"mydata":"hello world"}  
Ready:             true  

Events:    
    Type     Reason                 Age                Source                 Messages   
    Normal   FinalizerUpdate        65s                pingsource-controller  Updated "cron-sub" finalizers

Testando a sua assinatura

Depois de inscrever com sucesso seu aplicativo para o evento cron, veja os logs para ver se ele funciona.

Obtenha os logs do app com o comando ibmcloud ce app logs.

ibmcloud ce app logs --name cron-app

Exemplo de saída

Na saída a seguir, é possível ver que a data e hora em que o evento foi recebido, bem como os Cabeçalhos HTTP e o JSON do Corpo HTTP que foi transmitido quando a assinatura foi criada.

2021-01-21 20:15:00 - Received:  
Header: Accept-Encoding=[gzip]  
Header: Ce-Id=[7de01e8e-84dc-4409-ad56-90d6e391397c]  
Header: Ce-Source=[/apis/v1/namespaces/50d38123af5/pingsources/cron-sub]  
Header: Ce-Specversion=[1.0]  
Header: Ce-Time=[2021-01-21T20:15:00.392503458Z]  
Header: Ce-Type=[dev.knative.sources.ping]  
Header: Content-Length=[24]  
Header: Content-Type=[application/json]  
Header: Forwarded=[for=172.30.118.174;proto=http, for=172.30.95.204]  
Header: K-Proxy-Request=[activator]  
Header: Traceparent=[00-1bf4b6b1d67f278a4b827e4e00f0cf7c-cbce9df0faedd812-00]  
Header: User-Agent=[Go-http-client/1.1]  
Header: X-B3-Sampled=[0]  
Header: X-B3-Spanid=[fb208eaa6af15ede]  
Header: X-B3-Traceid=[6db074fdaf6a6411fb208eaa6af15ede]  
Header: X-Envoy-Attempt-Count=[1]  
Header: X-Envoy-Decorator-Operation=[cron-app-snva7-1.50d38123af5.svc.cluster.local:80/*]  
Header: X-Envoy-Internal=[true]  
Header: X-Envoy-Peer-Metadata=[ChoKCkNMVVNURVJfSUQSDBoKS3ViZXJuZXRlcwo5CgxJTlNUQU5DRV9JUFMSKRonMTcyLjMwLjk1LjIwNCxmZTgwOjplODBiOjFkZmY6ZmVmMjo1ZjkxCpQCCgZMQUJFTFMSiQIqhgIKHQoDYXBwEhYaFGlzdGlvLWluZ3Jlc3NnYXRld2F5ChMKBWNoYXJ0EgoaCGdhdGV3YXlzChQKCGhlcml0YWdlEggaBlRpbGxlcgoZCgVpc3RpbxIQGg5pbmdyZXNzZ2F0ZXdheQofChFwb2QtdGVtcGxhdGUtaGFzaBIKGghkNzY1NjljOQoSCgdyZWxlYXNlEgcaBWlzdGlvCjkKH3NlcnZpY2UuaXN0aW8uaW8vY2Fub25pY2FsLW5hbWUSFhoUaXN0aW8taW5ncmVzc2dhdGV3YXkKLwojc2VydmljZS5pc3Rpby5pby9jYW5vbmljYWwtcmV2aXNpb24SCBoGbGF0ZXN0ChoKB01FU0hfSUQSDxoNY2x1c3Rlci5sb2NhbAotCgROQU1FEiUaI2lzdGlvLWluZ3Jlc3NnYXRld2F5LWQ3NjU2OWM5LWw5cHZoChsKCU5BTUVTUEFDRRIOGgxpc3Rpby1zeXN0ZW0KXQoFT1dORVISVBpSa3ViZXJuZXRlczovL2FwaXMvYXBwcy92MS9uYW1lc3BhY2VzL2lzdGlvLXN5c3RlbS9kZXBsb3ltZW50cy9pc3Rpby1pbmdyZXNzZ2F0ZXdheQo5Cg9TRVJWSUNFX0FDQ09VTlQSJhokaXN0aW8taW5ncmVzc2dhdGV3YXktc2VydmljZS1hY2NvdW50CicKDVdPUktMT0FEX05BTUUSFhoUaXN0aW8taW5ncmVzc2dhdGV3YXk=]  
Header: X-Envoy-Peer-Metadata-Id=[router~172.30.95.204~istio-ingressgateway-d76569c9-l9pvh.istio-system~istio-system.svc.cluster.local]  
Header: X-Forwarded-For=[172.30.118.174, 172.30.95.204, 172.30.163.42]  
Header: X-Forwarded-Proto=[http]  
Header: X-Request-Id=[ce502e5e-dd89-401e-a4cd-b72a6822f689]  

Body: {"mydata":"hello world"}  

Para obter mais informações sobre cabeçalhos e corpo, consulte Informações de cabeçalhos HTTP e corpo para eventos de cron.

Para obter mais informações sobre visualização de logs com a CLI, consulte Visualização de logs com a CLI.

Observe que as assinaturas podem afetar como um aplicativo é escalado. Para obter mais informações, consulte Configurando o ajuste de escala do aplicativo.

Atualizar a sua assinatura

Agora que você sabe que sua assinatura de cron foi bem-sucedida, é possível atualizar o evento de cron para ser executado em uma programação diferente com o comando ibmcloud ce sub cron update. Por exemplo, atualize a assinatura para que ela seja executada todos os dias à meia-noite.

ibmcloud ce sub cron update -n cron-sub -d cron-app --data '{"mydata":"hello world again"}' -s '0 0 * * *'

Execute o comando ibmcloud ce sub cron get -n cron-sub para localizar informações sobre a sua assinatura.

Exemplo de saída

Nessa saída, é possível ver que o planejamento e os dados são atualizados.

Getting cron event subscription 'cron-sub'...
OK

Name:          cron-sub  
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject  
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           5m7s  
Created:       2021-03-14T13:21:13-05:00   

Destination:  App:cron-app  
Schedule:     0 0 * * *  
Data:         {"mydata":"hello world again"}  
Ready:        true

Events:    
    Type     Reason                 Age                Source                 Messages   
    Normal   FinalizerUpdate        65s                pingsource-controller  Updated "cron-sub" finalizers

Tutorial de limpeza de assinatura de cron

Pronto para excluir sua assinatura de cron e seu aplicativo? É possível usar os comandos ibmcloud ce app delete e ibmcloud ce sub cron delete.

Para remover a sua assinatura,

ibmcloud ce sub cron delete --name cron-sub

Para remover o seu aplicativo,

ibmcloud ce app delete --name cron-app

Procurando mais exemplos de código? Confira as amostras para IBM Cloud Code Engine No repositório GitHub.