Executar o Functions usando o emulador do Functions

Com o emulador do Functions da CLI do Google Cloud, é possível gerenciar instâncias locais do Cloud Functions com o comando gcloud alpha functions local. Isso permite implantar e testar suas funções no sistema local antes de implantá-las no ambiente do Google Cloud.

Esse recurso funciona com funções de 1ª e 2ª geração.

O emulador do Functions usa buildpacks do Google Cloud para empacotar o código da função em imagens de contêiner executáveis localmente. Em seguida, você executa essas imagens localmente com o Docker.

Pré-requisitos de instalação

Antes de continuar, verifique se você tem os seguintes recursos instalados:

Implantar a função localmente

Para implantar a função localmente com o emulador de funções, use o comando gcloud functions:

Node.js

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --runtime=nodejs20

Python

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --runtime=python312

Go

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --runtime=go121

Java

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --runtime=java17

C#

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --runtime=dotnet6

Ruby

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --runtime=ruby32

PHP

  gcloud alpha functions local deploy LOCAL_DEPLOYMENT_NAME \
    --entry-point=ENTRY_POINT \
    --runtime=php82

Substitua:

  • LOCAL_DEPLOYMENT_NAME: o nome em que você está implantando localmente a função.
  • ENTRY_POINT: o ponto de entrada da função.

É possível configurar ainda mais o comando de implantação com as seguintes flags opcionais:

Sinalização Descrição
--port A porta em que as solicitações serão ouvidas (padrão: 8080).
--builder O nome do builder de buildpack a ser usado.

O valor --builder assume como padrão o criador do App Engine para a linguagem da sua função. Por exemplo, o padrão é gcr.io/gae-runtimes/buildpacks/google-gae-22/python/builder para Python.

Quando você usar o comando gcloud alpha pela primeira vez, o comando gcloud solicitará que você instale o conjunto de comandos gcloud alpha.

Chamar a função local

Para chamar a função local sem dados, use o seguinte comando:

gcloud alpha functions local call LOCAL_DEPLOYMENT_NAME

Substitua LOCAL_DEPLOYMENT_NAME pelo nome em que você quer implantar localmente sua função.

A fim de incluir dados na chamada para a função local, escolha a guia correspondente ao tipo de função:

Função HTTP

Chame a função HTTP local da seguinte maneira:

gcloud alpha functions local call LOCAL_DEPLOYMENT_NAME \
    --data='{"message": "MESSAGE"}'

Substitua:

  • LOCAL_DEPLOYMENT_NAME: o nome em que implantar localmente sua função.
  • ENTRY_POINT: o ponto de entrada da função.
  • MESSAGE: uma string de texto a ser transmitida como o corpo da solicitação HTTP.

Função CloudEvent

Para chamar a função local do CloudEvent, forneça um objeto JSON CloudEvent que descreva o evento engatilhador:

gcloud alpha functions local call LOCAL_DEPLOYMENT_NAME \
    --cloud-event="CLOUD_EVENT_JSON"

Substitua:

  • LOCAL_DEPLOYMENT_NAME: o nome em que implantar localmente sua função.
  • ENTRY_POINT: o ponto de entrada da função.
  • CLOUD_EVENT_JSON: uma string JSON codificada no modo de conteúdo estruturado que descreve o evento de gatilho. Para mais detalhes e exemplos, consulte CloudEvents – formato de evento JSON.

Confira um exemplo de linha de comando:

gcloud alpha functions local call my-function --cloud-event='{
 "specversion" : "1.0",
  "type" : "com.github.pull.create",
  "source" : "https://github.com/cloudevents/spec/pull",
  "subject" : "123",
  "id" : "ce",
  "time" : "2021-01-27T18:30:00Z", "data" : "{\n \"subscription\": \"projects\/test-project\/subscriptions\/my-subscription\",\n \"message\": {\n \"attributes\": {\n \"attr1\":\"attr1-value\"\n },\n \"data\": \"d29ybGQ=\",\n \"messageId\": \"message-id\",\n \"publishTime\":\"2021-02-05T04:06:14.109Z\",\n \"orderingKey\": \"ordering-key\"\n }\n}"
  }'

Consulte as especificações do CloudEvent para mais informações sobre como o formato JSON é definido para o CloudEvents.

Excluir a implantação da função local

Exclua a implantação da função local com o seguinte comando:

gcloud alpha functions local delete LOCAL_DEPLOYMENT_NAME

Substitua LOCAL_DEPLOYMENT_NAME pelo nome em que a função será implantada localmente.

Esse comando cancela a implantação da função, mas não exclui o código dela.

Próximas etapas