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
- Configurez votre environnement d'interface de ligne de commande Code Engine.
- Créez et utilisez un projet.
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.