IBM Cloud Docs
Abonnement à des événements cron

Abonnement à des événements cron

Ce tutoriel vous explique comment vous abonner aux événements cron à l'aide de l'interface de ligne de commande IBM Cloud® Code Engine.

Souvent, dans les environnements distribués, vous avez besoin que vos applications ou vos travaux réagissent aux messages (événements) générés à partir d'autres composants, qui sont généralement appelés des producteurs d'événements. Avec Code Engine, vos applications ou vos travaux peuvent recevoir des événements d'intérêt grâce à un abonnement à des producteurs d'événements. Les informations relatives aux événements sont reçues sous forme de demandes HTTP POST pour les applications et sous forme de variables d'environnement pour les travaux.

Avant de commencer

Tous les utilisateurs Code Engine doivent avoir un compte de paiement à la carte. Les tutoriels peuvent entraîner des coûts. Utilisez l'estimateur de coût pour générer une estimation du coût en fonction de l'utilisation envisagée. Pour plus d'informations, voir Tarification Code Engine.

Détermination de votre intervalle cron

Le producteur d'événement cron génère des événements à intervalles réguliers. L'intervalle peut être exprimé en minutes, heures, jours ou mois ou correspondre à une combinaison de plusieurs intervalles différents.

Cron utilise un fichier crontab standard pour spécifier les détails de l'intervalle, au format * * * * * (minute, heure, jour du mois, mois et jour de la semaine). Par exemple, pour planifier l'exécution d'un événement à minuit, spécifiez 0 0 * * *. Pour planifier l'exécution d'un événement tous les vendredis à minuit, spécifiez 0 0 * * FRI.

Pour plus d'informations sur la crontab, voir CRONTAB.

Vous pouvez définir votre intervalle cron à l'aide de l'option --schedule avec la commande subscription cron , comme illustré à l'étape 3. Si vous ne spécifiez pas l'option --schedule, par défaut, l'évènement cron est envoyé chaque minute de chaque jour.

Créez votre application (ou votre travail)

Alors que les évènements peuvent être utilisés pour déclencher des applications ou des travaux, ce tutoriel utilise une application.

Créez une application nommée cron-app avec la commande ibmcloud ce app create. Cette application extrait une image appelée icr.io/codeengine/cron. Cette application consigne chaque événement lorsqu'il survient et affiche l'ensemble complet d'en-têtes HTTP et de contenus de corps HTTP. Pour plus d'informations sur le code utilisé dans cet exemple, voir " cron.

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

Exécutez ibmcloud ce application get --name cron-app pour vous assurer que votre application est à l'état Ready.

Vous pouvez trouver plus d'informations sur cette application dans le fichier readme de cron.

Créer un abonnement

Une fois votre application prête, créez un abonnement au producteur d'événement cron et connectez-le à votre application avec la commande ibmcloud ce sub cron create.

L'exemple ci-dessous crée un abonnement cron appelé cron-sub et spécifie l'application cron-app comme destination. L'abonnement utilise l'option --data pour inclure une chaîne JSON dans l'événement cron. Il spécifie également la planification cron à l'aide de l'option --schedule avec la valeur * * * * * pour envoyer un événement à l'application cron-app, toutes les minutes, tous les jours.

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

Exécutez ibmcloud ce sub cron get -n cron-sub pour rechercher des informations sur votre abonnement.

Exemple de sortie

Dans la sortie ci-dessous, vous pouvez constater que le nom de l'abonnement, la destination, la planification et les données sont corrects.

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

Test de votre abonnement

Une fois votre application abonnée à votre événement cron, consultez les journaux pour déterminer si elle fonctionne.

Procurez-vous les journaux pour l'application avec la commande ibmcloud ce app logs.

ibmcloud ce app logs --name cron-app

Exemple de sortie

La sortie ci-dessous présente la date et l'heure auxquelles l'événement a été reçu, ainsi que le code JSON des en-têtes HTTP et du corps HTTP qui a été transmis lors de la création de l'abonnement.

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

Pour plus d'informations sur les en-têtes et le corps, voir Informations relatives aux en-têtes et au corps HTTP pour les événements cron.

Pour plus d'informations sur l'affichage des journaux à l'aide de l'interface de ligne de commande, voir Affichage des journaux avec l'interface de ligne de commande.

Notez que les abonnements peuvent affecter la manière dont une application est mise à l'échelle. Pour plus d'informations, voir Configuration de la mise à l'échelle d'application.

Mise à jour de votre abonnement

Maintenant que vous savez que la création de votre abonnement cron a abouti, vous pouvez mettre à jour l'événement cron pour une exécution selon une planification différente avec la commande ibmcloud ce sub cron update. Par exemple, mettez à jour l'abonnement pour qu'il s'exécute tous les jours à minuit.

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

Exécutez la commande ibmcloud ce sub cron get -n cron-sub pour rechercher des informations sur votre abonnement.

Exemple de sortie

Dans la sortie ci-dessous, vous pouvez constater que la planification et les données ont été mises à jour.

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

Tutoriel sur le nettoyage de l'abonnement cron

Prêt à supprimer votre abonnement cron et votre application ? Vous pouvez utiliser les commandes ibmcloud ce app delete et ibmcloud ce sub cron delete.

Pour retirer votre abonnement, entrez :

ibmcloud ce sub cron delete --name cron-sub

Pour retirer votre application, entrez :

ibmcloud ce app delete --name cron-app

Vous recherchez d'autres exemples de code ? Consultez les échantillons pour IBM Cloud Code Engine Sur GitHub.