Chamar funções locais

Configuração

Neste documento, consideramos que você configurou uma função executada localmente em localhost usando o Functions Framework ou Buildpacks. Também presume que você tenha instalado a ferramenta curl na máquina local.

Como enviar solicitações às funções locais

É possível acionar funções em execução no local enviando a elas solicitações HTTP encaminhadas por um processo de exibição local.

Verifique onde a função está sendo executada localmente verificando o URL exibido quando você começou a executar a função. Por padrão, a função será hospedada em localhost:8080.

Funções HTTP

Quando você testa a função HTTP no ambiente de desenvolvimento, ela normalmente detecta solicitações em localhost:8080. Essa interface só pode ser acessada por meio da máquina ou VM em que a função está sendo executada. As solicitações enviadas de outros sistemas não conseguem acessá-la. Por esse motivo, é necessário emitir a solicitação HTTP no mesmo sistema em que a função está sendo executada. Nos exemplos a seguir, se a função estiver fazendo detecções em uma porta diferente de 8080, substitua 8080 no exemplo pelo número da porta da função.

Como testar funções HTTP com o Cloud Shell

Se você estiver usando o Cloud Shell para criar e testar sua função, inicie-a localmente na janela do terminal do Cloud Shell e emita a solicitação de gatilho HTTP de um navegador ou de uma instância curl da seguinte maneira:

Navegador

Clique no ícone Botão de visualização da Web na barra de ferramentas do Cloud Shell e selecione porta 8080 ou Alterar porta para escolher uma porta diferente. Isso abre uma janela do navegador no sistema correto e emite uma solicitação GET para a porta indicada.

Curl

Para controlar o formato da solicitação HTTP ou ver a resposta não formatada, use curl:

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

    curl localhost:8080
    

Como testar funções HTTP no servidor da área de trabalho

Se você estiver criando e executando a função no sistema da área de trabalho local, primeiro inicie-a localmente e, em seguida, emita a solicitação de gatilho HTTP de um navegador ou de uma instância curl da seguinte maneira:

Navegador

Abra uma nova janela ou guia do navegador e digite http://localhost:8080 na barra de endereço. Isso abre uma janela do navegador para localhost:8080 no servidor da área de trabalho a fim de acionar a função.

Curl

Abra uma nova janela de terminal na área de trabalho local e execute o comando curl nela para acionar a função. Exemplo:

 curl localhost:8080

Isso executa o comando curl especificado para acionar a função e exibe a resposta não formatada.

Funções do CloudEvent

É possível enviar eventos de amostra para Funções do CloudEvent usando curl. As seguintes solicitações curl mostram como enviar eventos de amostra 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

É possível enviar eventos de amostra para funções em segundo plano usando curl. As seguintes solicitações curl mostram como enviar eventos de amostra do Cloud Pub/Sub e do Cloud Storage a uma função de segundo plano em execução 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"
        }
      }'