Llamar a funciones locales

Configuración

En este documento se presupone que has configurado una función que se ejecuta de forma local en localhost mediante Functions Framework o Buildpacks. También se presupone que has instalado la herramienta curl en tu máquina local.

Enviar solicitudes a funciones locales

Puedes activar funciones que se ejecutan de forma local enviándoles solicitudes HTTP enrutadas a través de un proceso de servicio local.

Para determinar dónde se ejecuta tu función de forma local, consulta la URL que se muestra cuando inicias la función. De forma predeterminada, tu función se alojará en localhost:8080.

Funciones HTTP

Cuando pruebas tu función HTTP desde tu entorno de desarrollo, normalmente escucha las solicitudes en localhost:8080. Solo se puede acceder a esta interfaz desde la máquina o la VM en la que se ejecuta tu función. Las solicitudes enviadas desde cualquier otro sistema no pueden acceder a ella. Por este motivo, debes enviar la solicitud HTTP desde el mismo sistema en el que se ejecuta tu función. En los ejemplos siguientes, si tu función está escuchando en un puerto que no sea 8080, sustituye 8080 por el número de puerto de tu función.

Probar funciones HTTP con Cloud Shell

Si usas Cloud Shell para compilar y probar tu función, inicia la función de forma local en la ventana de terminal de Cloud Shell y, a continuación, envía la solicitud de activación HTTP desde un navegador o una instancia de curl de la siguiente manera:

Navegador

Haz clic en el icono Botón Vista previa web de la barra de herramientas de Cloud Shell y elige puerto 8080 o Cambiar puerto para seleccionar otro puerto. Se abrirá una ventana del navegador en el sistema correcto y se enviará una solicitud GET al puerto indicado.

Curl

Para controlar el formato de tu solicitud HTTP o ver la respuesta sin formato, usa curl:

  1. Haz clic en el icono + de la barra de menú de Cloud Shell para abrir una nueva ventana de terminal en el mismo sistema en el que se ejecuta tu función.
  2. En esa ventana, ejecuta el comando curl para activar la función. Por ejemplo:

    curl localhost:8080
    

Probar funciones HTTP en el servidor de tu ordenador

Si vas a compilar y ejecutar tu función en tu sistema de escritorio local, primero inicia la función localmente y, a continuación, envía la solicitud de activación HTTP desde un navegador o una instancia de curl de la siguiente manera:

Navegador

Abre una nueva ventana o pestaña del navegador y escribe http://localhost:8080 en la barra de direcciones del navegador. Se abrirá una ventana del navegador en localhost:8080 en tu servidor de escritorio para activar la función.

Curl

Abre una nueva ventana de terminal en tu escritorio local y, a continuación, ejecuta el comando curl en esa ventana para activar tu función. Por ejemplo:

 curl localhost:8080

De esta forma, se ejecuta el comando curl especificado para activar la función y se muestra la respuesta sin formato.

Funciones de CloudEvent

Puedes enviar eventos de muestra a funciones de CloudEvent mediante curl. Las siguientes solicitudes curl muestran cómo enviar eventos de ejemplo de Cloud Pub/Sub y Cloud Storage a una función de CloudEvents que se ejecuta en 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"
      }'
    

Almacenamiento

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

Funciones en segundo plano

Puedes enviar eventos de muestra a funciones en segundo plano mediante curl. Las siguientes solicitudes curl muestran cómo enviar eventos de ejemplo de Cloud Pub/Sub y Cloud Storage a una función en segundo plano que se ejecuta en 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="
        }
      }'
    

Almacenamiento

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