Appeler des fonctions locales

Prérequis

Ce document part du principe que vous avez configuré une fonction exécutée localement sur localhost à l'aide du framework des fonctions ou de Buildpacks. Il suppose également que vous avez installé l'outil curl sur votre ordinateur local.

Envoyer des requêtes à des fonctions locales

Vous pouvez déclencher des fonctions exécutées localement en leur envoyant des requêtes HTTP acheminées via un processus de diffusion local.

Pour connaître l'emplacement d'exécution local de votre fonction, consultez l'URL affichée au lancement de la fonction. Par défaut, votre fonction est hébergée à l'adresse localhost:8080.

Fonctions HTTP

Lorsque vous testez votre fonction HTTP à partir de votre environnement de développement, elle écoute normalement les requêtes sur localhost:8080. Cette interface n'est accessible qu'à partir de la machine ou de la VM sur laquelle votre fonction est exécutée. Les requêtes envoyées depuis un autre système ne peuvent pas l'atteindre. Pour cette raison, vous devez envoyer la requête HTTP à partir du même système sur lequel votre fonction s'exécute. Dans les exemples suivants, si votre fonction écoute sur un port autre que 8080, remplacez 8080 dans l'exemple par le numéro de port de votre fonction.

Tester les fonctions HTTP avec Cloud Shell

Si vous utilisez Cloud Shell pour créer et tester votre fonction, démarrez-la localement dans la fenêtre du terminal Cloud Shell, puis envoyez la requête de déclencheur HTTP à partir d'un navigateur ou d'une instance curl comme suit:

Navigateur

Cliquez sur l'icône Bouton "Aperçu sur le Web" dans la barre d'outils Cloud Shell et choisissez le port 8080 ou l'option Modifier le port pour choisir un autre port. Cela ouvre une fenêtre de navigateur sur le système approprié et envoie une requête GET au port indiqué.

Curl

Pour contrôler le format de votre requête HTTP ou pour afficher la réponse non formatée, utilisez curl:

  1. Cliquez sur l'icône + dans la barre de menu de Cloud Shell pour ouvrir une nouvelle fenêtre de terminal sur le même système que celui sur lequel votre fonction est exécutée.
  2. Dans cette fenêtre, exécutez la commande curl pour déclencher votre fonction. Par exemple :

    curl localhost:8080
    

Tester les fonctions HTTP sur votre serveur d'ordinateur

Si vous créez et exécutez votre fonction sur votre système local de bureau, commencez par la démarrer en local, puis envoyez la requête de déclencheur HTTP à partir d'un navigateur ou d'une instance curl comme suit:

Navigateur

Ouvrez une nouvelle fenêtre ou un nouvel onglet de navigateur, puis saisissez http://localhost:8080 dans la barre d'adresse du navigateur. Une fenêtre de navigateur s'ouvre sur localhost:8080 sur votre serveur pour ordinateur afin de déclencher votre fonction.

Curl

Ouvrez une nouvelle fenêtre de terminal sur votre bureau local, puis exécutez la commande curl dans cette fenêtre pour déclencher votre fonction. Par exemple :

 curl localhost:8080

La commande curl spécifiée s'exécute pour déclencher votre fonction et afficher la réponse non formatée.

Fonctions CloudEvent

Vous pouvez envoyer des exemples d'événements aux fonctions CloudEvent à l'aide de curl. Les requêtes curl suivantes montrent comment envoyer des exemples d'événements Cloud Pub/Sub et Cloud Storage à une fonction CloudEvent exécutée à l'adresse localhost:8080.

Pub/Sub

curl localhost:8080 \
  -X POST \
  -H "Content-Type: application/json" \
  -H "ce-id: 123451234512345" \
  -H "ce-specversion: 1.0" \
  -H "ce-time: 2020-01-02T12:34:56.789Z" \
  -H "ce-type: google.cloud.pubsub.topic.v1.messagePublished" \
  -H "ce-source: //pubsub.googleapis.com/projects/MY-PROJECT/topics/MY-TOPIC" \
  -d '{
        "message": {
          "data": "d29ybGQ=",
          "attributes": {
             "attr1":"attr1-value"
          }
        },
        "subscription": "projects/MY-PROJECT/subscriptions/MY-SUB"
      }'
    

Stockage

curl localhost:8080 \
  -X POST \
  -H "Content-Type: application/json" \
  -H "ce-id: 123451234512345" \
  -H "ce-specversion: 1.0" \
  -H "ce-time: 2020-01-02T12:34:56.789Z" \
  -H "ce-type: google.cloud.storage.object.v1.finalized" \
  -H "ce-source: //storage.googleapis.com/projects/_/buckets/MY-BUCKET-NAME" \
  -H "ce-subject: objects/MY_FILE.txt" \
  -d '{
        "bucket": "MY_BUCKET",
        "contentType": "text/plain",
        "kind": "storage#object",
        "md5Hash": "...",
        "metageneration": "1",
        "name": "MY_FILE.txt",
        "size": "352",
        "storageClass": "MULTI_REGIONAL",
        "timeCreated": "2020-04-23T07:38:57.230Z",
        "timeStorageClassUpdated": "2020-04-23T07:38:57.230Z",
        "updated": "2020-04-23T07:38:57.230Z"
      }'
    

Fonctions d'arrière-plan

Vous pouvez envoyer des exemples d'événements aux fonctions d'arrière-plan à l'aide de curl. Les requêtes curl suivantes montrent comment envoyer des exemples d'événements Cloud Pub/Sub et Cloud Storage à une fonction d'arrière-plan exécutée à l'adresse localhost:8080.

Pub/Sub

# 'world' base64-encoded is 'd29ybGQ='
curl localhost:8080 \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
        "context": {
          "eventId":"1144231683168617",
          "timestamp":"2020-05-06T07:33:34.556Z",
          "eventType":"google.pubsub.topic.publish",
          "resource":{
            "service":"pubsub.googleapis.com",
            "name":"projects/sample-project/topics/gcf-test",
            "type":"type.googleapis.com/google.pubsub.v1.PubsubMessage"
          }
        },
        "data": {
          "@type": "type.googleapis.com/google.pubsub.v1.PubsubMessage",
          "attributes": {
             "attr1":"attr1-value"
          },
          "data": "d29ybGQ="
        }
      }'
    

Stockage

curl localhost:8080 \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
        "context": {
          "eventId": "1147091835525187",
          "timestamp": "2020-04-23T07:38:57.772Z",
          "eventType": "google.storage.object.finalize",
          "resource": {
             "service": "storage.googleapis.com",
             "name": "projects/_/buckets/MY_BUCKET/MY_FILE.txt",
             "type": "storage#object"
          }
        },
        "data": {
          "bucket": "MY_BUCKET",
          "contentType": "text/plain",
          "kind": "storage#object",
          "md5Hash": "...",
          "metageneration": "1",
          "name": "MY_FILE.txt",
          "size": "352",
          "storageClass": "MULTI_REGIONAL",
          "timeCreated": "2020-04-23T07:38:57.230Z",
          "timeStorageClassUpdated": "2020-04-23T07:38:57.230Z",
          "updated": "2020-04-23T07:38:57.230Z"
        }
      }'