Llama a funciones locales

Configuración

En este documento, suponemos que configuraste una función que se ejecuta de forma local en localhost mediante Functions Frameworks o Buildpacks. También suponemos que instalaste la herramienta curl en tu máquina local.

Envía solicitudes a funciones locales

Puedes activar funciones que se ejecuten de forma local si envías solicitudes HTTP enrutadas a través de un proceso de entrega local.

Para determinar la ubicación en la que se ejecuta la función de manera local, verifica la URL que se mostró cuando comenzaste a ejecutar la función. De forma predeterminada, la función se alojará en localhost:8080.

Funciones de HTTP

Cuando pruebas tu función de HTTP desde tu entorno de desarrollo, esta suele escuchar solicitudes en localhost:8080. Solo se puede acceder a esta interfaz desde la máquina o VM en la que se ejecuta tu función; las solicitudes enviadas desde cualquier otro sistema no pueden acceder a la interfaz. Por este motivo, debes emitir la solicitud HTTP desde el mismo sistema en el que se ejecuta tu función. En los siguientes ejemplos, si tu función escucha en un puerto distinto de 8080, reemplaza 8080 en el ejemplo por el número de puerto de tu función.

Prueba funciones de HTTP con Cloud Shell

Si usas Cloud Shell para compilar y probar tu función, inicia tu función de forma local en la ventana de la terminal de Cloud Shell y, luego, emite la solicitud del activador HTTP desde un navegador o una instancia curl de la siguiente manera:

Navegador

Haz clic en el ícono Botón Vista previa en la Web en la barra de herramientas de Cloud Shell y elige puerto 8080 o Cambiar puerto para elegir otro. De este modo, se abrirá una ventana del navegador en el sistema correcto y se emitirá 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 ícono + en la barra de menú de Cloud Shell para abrir una ventana de terminal nueva en el mismo sistema en el que se ejecuta tu función.
  2. Desde esa ventana, ejecuta el comando curl para activar la función. Por ejemplo:

    curl localhost:8080
    

Prueba funciones de HTTP en tu servidor de escritorio

Si compilas y ejecutas tu función en tu sistema de escritorio local, primero iníciala de forma local y, luego, emite la solicitud del activador HTTP desde un navegador o una instancia 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. De este modo, 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 el escritorio local y, luego, ejecuta el comando curl en esa ventana para activar la función. Por ejemplo:

 curl localhost:8080

Esto ejecuta el comando curl especificado para activar la función y muestra la respuesta sin formato.

Funciones de CloudEvent

Puedes enviar eventos de muestra a las funciones de CloudEvent mediante curl. En las siguientes solicitudes curl, se muestra cómo enviar eventos de muestra de Cloud Pub/Sub y Cloud Storage a una función de CloudEvent 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 las funciones en segundo plano mediante curl. En las siguientes solicitudes curl, se muestra cómo enviar eventos de muestra 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"
        }
      }'