Chame funções locais

Configuração

Este documento pressupõe que configurou uma função executada localmente no localhost através do Functions Framework ou dos Buildpacks. Também pressupõe que instalou a ferramenta curl na sua máquina local.

Enviar pedidos para funções locais

Pode acionar funções executadas localmente enviando-lhes pedidos HTTP encaminhados através de um processo de publicação local.

Determine onde a sua função está a ser executada localmente verificando o URL apresentado quando executou a função. Por predefinição, a sua função é alojada em localhost:8080.

Funções HTTP

Quando testa a sua função HTTP a partir do ambiente de desenvolvimento, normalmente, esta fica à escuta de pedidos em localhost:8080. Esta interface só está acessível a partir da máquina ou da VM em que a sua função está a ser executada. Os pedidos enviados a partir de qualquer outro sistema não conseguem aceder à mesma. Por este motivo, tem de emitir o pedido HTTP a partir do mesmo sistema em que a sua função está a ser executada. Nos exemplos seguintes, se a sua função estiver a escutar numa porta diferente de 8080, substitua 8080 no exemplo pelo número da porta da sua função.

Testar funções HTTP com o Cloud Shell

Se estiver a usar o Cloud Shell para criar e testar a sua função, inicie-a localmente na janela do terminal do Cloud Shell e, em seguida, emita o pedido de acionador HTTP a partir de um navegador ou de uma instância curl da seguinte forma:

Navegador

Clique no ícone Botão de pré-visualização da Web na barra de ferramentas do Cloud Shell e escolha porta 8080 ou Alterar porta para escolher uma porta diferente. Esta ação abre uma janela do navegador no sistema correto e envia um pedido GET para a porta indicada.

Curl

Para controlar o formato do seu pedido HTTP ou ver a resposta sem formatação, use curl:

  1. Clique no ícone + na barra de menu do Cloud Shell para abrir uma nova janela do terminal no mesmo sistema em que a sua função está a ser executada.
  2. Nessa janela, execute o comando curl para acionar a sua função. Por exemplo:

    curl localhost:8080
    

Testar funções HTTP no servidor do computador

Se estiver a criar e executar a função no sistema de computador local, primeiro inicie a função localmente e, em seguida, emita o pedido de acionador HTTP a partir de um navegador ou de uma instância curl da seguinte forma:

Navegador

Abra uma nova janela ou separador do navegador e escreva http://localhost:8080 na barra de endereço do navegador. Esta ação abre uma janela do navegador para localhost:8080 no servidor do computador para acionar a sua função.

Curl

Abra uma nova janela de terminal no seu ambiente de trabalho local e, em seguida, execute o comando curl nessa janela para acionar a sua função. Por exemplo:

 curl localhost:8080

Isto executa o comando curl especificado para acionar a sua função e apresenta a resposta não formatada.

Funções CloudEvent

Pode enviar eventos de amostra para as funções CloudEvent usando o curl. Os pedidos curl seguintes mostram como enviar exemplos de eventos do Cloud Pub/Sub e do Cloud Storage para uma função do CloudEvent em execução em 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"
      }'
    

Armazenamento

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

Funções em segundo plano

Pode enviar eventos de amostra para funções em segundo plano usando curl. Os pedidos curl seguintes mostram como enviar exemplos de eventos do Cloud Pub/Sub e do Cloud Storage para uma função em segundo plano executada em 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="
        }
      }'
    

Armazenamento

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