Les fonctions Cloud Functions peuvent être déclenchées par des messages publiés dans les sujets Pub/Sub dans le même projet Cloud contenant la fonction. Pub/Sub est un service de messagerie distribué dans le monde entier qui effectue un scaling automatique en fonction des besoins et vous permet de développer des services robustes à l'échelle mondiale.
Types d'événement
Un seul événement Pub/Sub est utilisé par Cloud Functions. Il est associé à la valeur du type de déclencheur suivante : google.pubsub.topic.publish
.
Cet événement est envoyé lorsqu'un message est publié dans un sujet Pub/Sub, qui est spécifié lorsqu'une fonction est déployée. Chaque message publié dans ce sujet déclenche l'exécution de la fonction avec le contenu des messages transmis en tant que données d'entrée.
Structure de l'événement
Les fonctions Cloud Functions déclenchées à partir d'un sujet Pub/Sub reçoivent des événements conformes au type PubsubMessage
, avec la mise en garde suivante : publishTime
et messageId
ne sont pas directement disponibles dans le PubsubMessage
. À la place, vous pouvez accéder à publishTime
et messageId
via l'ID de l'événement et les propriétés d'horodatage des métadonnées de l'événement. Ces métadonnées sont accessibles via l'objet de contexte transmis à votre fonction lorsqu'elle est appelée.
La charge utile de l'objet PubsubMessage
(les données que vous avez publiées sur le sujet) est stockée sous la forme d'une chaîne encodée en base64 dans l'attribut data
du PubsubMessage
. Pour extraire la charge utile de l'objet PubsubMessage
, vous devrez peut-être décoder l'attribut de données, comme indiqué dans les exemples ci-dessous.
Exemple de code
Node.js
Python
Go
Java
Kotlin
C#
Ruby
Publier un message à partir d'une fonction
Vous pouvez également publier un message dans un sujet Pub/Sub à partir d'une fonction. Cela vous permet de déclencher des appels de fonctions Cloud ultérieurs à l'aide des messages Cloud Pub/Sub. Cette technique vous permet :
- d'associer des appels de fonction séquentiels ;
- de distribuer (ou d'effectuer une distribution ramifiée) des groupes de tâches en parallèle sur plusieurs instances de Cloud Functions.
Dans l'exemple suivant, une fonction publish
HTTP envoie un message à un sujet Pub/Sub, qui à son tour déclenche une fonction subscribe
.
Dans cet extrait, la fonction publish
publie un message sur un sujet Pub/Sub.
Node.js
Python
Go
Java
Cet extrait illustre la fonction subscribe
qui est déclenchée lorsque le message est publié dans le sujet Pub/Sub :
Node.js
Python
Java
En production, vous pouvez utiliser l'utilitaire de ligne de commande cURL pour appeler la fonction publish
, comme suit :
curl https://GCF_REGION-GCP_PROJECT_ID.cloudfunctions.net/publish -X POST -d "{\"topic\": \"PUBSUB_TOPIC\", \"message\":\"YOUR_MESSAGE\"}" -H "Content-Type: application/json"
Toutefois, à des fins de test et de débogage, utilisez plutôt la commande gcloud functions call
pour appeler directement la fonction.
Dans les étapes suivantes, vous allez apprendre à exécuter l'exemple ci-dessus à l'aide de la commande gcloud functions call
:
Créez un sujet Pub/Sub, où
MY_TOPIC
est le nom du sujet que vous créez :gcloud pubsub topics create MY_TOPIC
Déployez la fonction
publish
, oùRUNTIME
est le nom de l'environnement d'exécution que vous utilisez (par exemple,nodejs8
) :gcloud functions deploy publish --trigger-http --runtime RUNTIME
Déployez la fonction
subscribe
:gcloud functions deploy subscribe --trigger-topic MY_TOPIC --runtime RUNTIME
Appelez directement la fonction
publish
à l'aide de la commandegcloud functions call
et fournissez les données requises au format JSON dans l'argument--data
:gcloud functions call publish --data '{"topic":"MY_TOPIC","message":"Hello World!"}'
Recherchez la fonction
subscribe
dans les journaux. L'affichage de vos résultats dans le journal peut prendre quelques minutes :gcloud functions logs read subscribe
Un résultat semblable à celui-ci doit s'afficher :
D ...Function execution started I ...{"data":{"message":"Hello World!"}} D ...Function execution took 753 ms, finished with status: 'ok'
Déployer votre fonction
La commande gcloud
suivante déploie une fonction qui se déclenche lorsqu'un message est publié dans un sujet Pub/Sub :
gcloud functions deploy FUNCTION_NAME --trigger-topic TOPIC_NAME FLAGS...
Argument | Description |
---|---|
FUNCTION_NAME |
Nom de la fonction. |
--trigger-topic TOPIC_NAME |
Nom du sujet Pub/Sub auquel la fonction est abonnée. Si le sujet n'existe pas, il est créé lors du déploiement. |
FLAGS... |
Options supplémentaires à spécifier lors du déploiement, telles que --runtime . Pour accéder aux informations complètes, consultez la documentation sur gcloud functions deploy .
|
Consultez le Tutoriel Pub/Sub pour obtenir un exemple complet d'utilisation des déclencheurs Pub/Sub.
Déclencheurs de l'ancien service Cloud Pub/Sub
La commande gcloud
ci-dessous déploie une fonction déclenchée par les notifications de l'ancien service Pub/Sub sur un sujet spécifique. Ces notifications sont compatibles avec les anciennes fonctions qui utilisent déjà ces événements. Nous vous recommandons cependant d'utiliser l'option --trigger-topic
, car les anciennes notifications risquent d'être supprimées plus tard.
gcloud functions deploy FUNCTION_NAME \ --trigger-resource TOPIC_NAME \ --trigger-event providers/cloud.pubsub/eventTypes/topic.publish \ FLAGS...
Étapes suivantes
Reportez-vous au Tutoriel Pub/Sub pour obtenir un exemple de mise en œuvre d'une fonction d'arrière-plan déclenchée par Pub/Sub.