Realizar testes locais com o emulador do Pub/Sub
É possível testar as funções localmente antes de implantá-las usando o Framework de funções com o emulador do Pub/Sub. Os exemplos desta página são baseados nas funções do Cloud Run
Usar o Functions Framework com o emulador do Pub/Sub
É possível acionar uma função localmente usando uma mensagem push do emulador do Pub/Sub.
Teste esse recurso conforme descrito aqui. Observe que ele requer o uso de três instâncias de terminal separadas:
Verifique se você tem a ferramenta
pack
e o Docker instalados.No primeiro terminal, inicie o emulador do Pub/Sub na porta 8043 em um projeto local:
gcloud beta emulators pubsub start \ --project=abc \ --host-port='localhost:8043'
No segundo terminal, crie um tópico e uma assinatura do Pub/Sub:
curl -s -X PUT 'http://localhost:8043/v1/projects/abc/topics/mytopic'
Use
http://localhost:8080
como o endpoint de assinatura de push.curl -s -X PUT 'http://localhost:8043/v1/projects/abc/subscriptions/mysub' \ -H 'Content-Type: application/json' \ --data '{"topic":"projects/abc/topics/mytopic","pushConfig":{"pushEndpoint":"http://localhost:8080/projects/abc/topics/mytopic"}}'
No terceiro terminal, clone o repositório de amostra para sua máquina local:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Outra alternativa é fazer o download da amostra como um arquivo ZIP e extraí-lo.
Mude para o diretório que contém o código de amostra das funções do Cloud Run:
Node.js
cd nodejs-docs-samples/functions/v2/helloPubSub/
Python
cd python-docs-samples/functions/v2/pubsub/
Go
cd golang-samples/functions/functionsv2/hellopubsub/
Confira o código de amostra:
Node.js
Python
Go
Criar o buildpack (isso pode levar alguns minutos):
Node.js
pack build \ --builder gcr.io/buildpacks/builder:v1 \ --env GOOGLE_FUNCTION_SIGNATURE_TYPE=event \ --env GOOGLE_FUNCTION_TARGET=helloPubSub \ my-function
Python
pack build \ --builder gcr.io/buildpacks/builder:v1 \ --env GOOGLE_FUNCTION_SIGNATURE_TYPE=event \ --env GOOGLE_FUNCTION_TARGET=subscribe \ my-function
Go
pack build \ --builder gcr.io/buildpacks/builder:v1 \ --env GOOGLE_FUNCTION_SIGNATURE_TYPE=event \ --env GOOGLE_FUNCTION_TARGET=HelloPubSub \ my-function
Inicie a função Pub/Sub na porta 8080. O emulador enviará mensagens push:
docker run --rm -p 8080:8080 my-function
No segundo terminal, invoque a função publicando uma mensagem. Os dados da mensagem precisam ser codificados em base64. Este exemplo usa a string
{"foo":"bar"}
codificada em base64.curl -s -X POST 'http://localhost:8043/v1/projects/abc/topics/mytopic:publish' \ -H 'Content-Type: application/json' \ --data '{"messages":[{"data":"eyJmb28iOiJiYXIifQ=="}]}'
Você verá a saída da função no terceiro terminal.
Pressione
Ctrl+C
para cancelar.