Execute funções com o Functions Framework
As funções do Cloud Run usam as bibliotecas de Functions Framework de código aberto para encapsular as funções implementadas numa aplicação HTTP persistente.
O Functions Framework também pode ser executado em qualquer outra plataforma que suporte a própria linguagem, incluindo a sua máquina local, servidores no local, o Compute Engine e o Cloud Run.
Instale dependências
No diretório da sua função, instale a biblioteca Functions Framework para o seu idioma:
Consulte a biblioteca Java Functions Framework para mais informações.
Node.js
npm install --save-dev @google-cloud/functions-framework
Python
pip install functions-framework
Go
go install github.com/GoogleCloudPlatform/functions-framework-go/funcframework
Java
Maven
Se estiver a usar o Maven, adicione o seguinte ao ficheiro pom.xml
:
Gradle
Se estiver a usar o Gradle, adicione o seguinte ao ficheiro
build.gradle
:
C#
Os comandos abaixo usam modelos .NET para criar uma nova base de código da função do Cloud Run .NET com a biblioteca.NET Functions Framework como uma dependência:
# HTTP functions dotnet new gcf-http # CloudEvent functions dotnet new gcf-event
Ruby
Em Ruby, o Functions Framework tem de ser adicionado às dependências da sua função para a implementar em funções do Cloud Run:
bundle add functions_framework
PHP
composer require google/cloud-functions-framework
Configure o Functions Framework
Antes de executar uma função com o Functions Framework, tem de especificar o tipo e o nome da função que quer executar. Estes atributos podem ser especificados como um indicador da interface de linhas de comando (CLI) ou como variáveis de ambiente.
Tipos de funções suportados
O Functions Framework suporta todos os três tipos de funções
suportados pelas funções do Cloud Run de 1.ª geração. Todos os runtimes de idiomas
suportam http
e event
ou cloudevent
.
Tipo de função | Tipo de assinatura | Descrição | Tempos de execução suportados |
---|---|---|---|
Funções acionadas por HTTP |
http
|
Funções que recebem e respondem a pedidos HTTP. | Todos os tempos de execução |
Funções em segundo plano |
event
|
Formato de evento específico das funções do Cloud Run | Node.js, Python, Go, Java |
Funções CloudEvent |
cloudevent
|
Formato de evento padrão da indústria | .NET, Ruby, PHP |
Especifique a função a executar
Antes de executar uma função com o Functions Framework, tem de especificar que função no seu código deve ser executada. Para a maioria dos idiomas, pode fazê-lo especificando o nome do método da função de destino, conforme mostrado nas tabelas abaixo. (As exceções a esta regra, como Java e .NET, também são apresentadas abaixo.)
Instruções por idioma
Consulte a tabela abaixo para ver uma lista de opções de configuração suportadas por cada idioma.
Node.js
Argumento da CLI | Variável de ambiente | Descrição |
---|---|---|
--port
|
PORT
|
A porta para ouvir pedidos. (Predefinição: 8080 )
|
--target
|
FUNCTION_TARGET
|
O nome da função export com nome a ser invocada. (Predefinição:
function )
|
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
O tipo de assinatura usado pela sua função. Pode ser um dos seguintes: http
(predefinição), event ou cloudevent .
|
Python
Argumento da CLI | Variável de ambiente | Descrição |
---|---|---|
--port
|
PORT
|
A porta para ouvir pedidos. (Predefinição: 8080 )
|
--target
|
FUNCTION_TARGET
|
O nome da função export com nome a ser invocada. (Predefinição:
function )
|
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
O tipo de assinatura usado pela sua função. Pode ser um dos seguintes: http
(predefinição), event ou cloudevent .
|
Go
Variável de ambiente | Descrição |
---|---|
PORT
|
A porta para ouvir pedidos. (Predefinição: 8080 )
|
Java
Nome do argumento | Variável de ambiente | Descrição |
---|---|---|
run.port
|
PORT
|
A porta para ouvir pedidos. (Predefinição: 8080 )
|
run.functionTarget
|
FUNCTION_TARGET
|
O nome da função export com nome a ser invocada. (Predefinição:
function )
|
C#
Argumento da CLI | Variável de ambiente | Descrição |
---|---|---|
--port
|
PORT
|
A porta para ouvir pedidos. (Predefinição: 8080 )
|
--target (ou único argumento)
|
FUNCTION_TARGET
|
O nome da classe da função a invocar. (Predefinição:
function )
|
Ruby
Argumento da CLI | Variável de ambiente | Descrição |
---|---|---|
--port
|
PORT
|
A porta para ouvir pedidos. (Predefinição: 8080 )
|
--target
|
FUNCTION_TARGET
|
O nome da função export com nome a ser invocada. (Predefinição:
function )
|
PHP
Variável de ambiente | Descrição |
---|---|
FUNCTION_TARGET
|
O nome da função a invocar. (Predefinição:
function )
|
FUNCTION_SIGNATURE_TYPE
|
O tipo de assinatura usado pela sua função. Pode ser um dos seguintes: http
(predefinição), event ou cloudevent .
|
Siga as instruções abaixo para configurar e executar o Functions Framework:
Node.js
O Functions Framework do Node.js permite-lhe especificar o nome da sua função e o tipo de assinatura como argumentos da linha de comandos ou variáveis de ambiente.
Também pode especificar estes valores no package.json
buildfile adicionando um script start
com os argumentos da CLI necessários, conforme mostrado no exemplo abaixo.
"scripts": { "start": "npx functions-framework --target=YOUR_FUNCTION_NAME [--signature-type=YOUR_SIGNATURE_TYPE]" }
O mesmo pode ser feito através de variáveis de ambiente:
"scripts": { "start": "FUNCTION_TARGET=YOUR_FUNCTION_NAME FUNCTION_SIGNATURE_TYPE=YOUR_SIGNATURE_TYPE npx functions-framework" }
Substitua YOUR_FUNCTION_NAME pelo nome do método da sua função e YOUR_SIGNATURE_TYPE (se aplicável) pelo tipo de assinatura da sua função, conforme mostrado na tabela acima.
Python
O Python Functions Framework permite-lhe especificar o nome da função e o tipo de assinatura como argumentos da linha de comandos ou variáveis de ambiente. Os argumentos da linha de comandos têm de ser especificados quando executa a framework.
Go
O Go Functions Framework usa funcframework.RegisterHTTPFunctionContext
para especificar o destino da função e o tipo de assinatura.
Java
O Java Functions Framework aceita dados de configuração de três origens diferentes, na seguinte ordem de prioridade (do mais específico para o menos específico):
- Argumentos da linha de comandos
- Buildfiles
- Variáveis de ambiente
Argumentos da linha de comandos
Maven
Pode especificar a função que quer executar adicionando a seguinte flag da interface de linhas de comando (CLI) aos seus comandos mvn
:
-Drun.functionTarget=YOUR_FUNCTION_NAME
Também pode especificar a porta de destino adicionando a seguinte flag da CLI de forma semelhante:
-Drun.port=12345
Gradle
Os flags da CLI do Gradle são quase idênticos aos do Maven. A única alteração que o Gradle faz é trocar o -D
inicial em cada flag por um -P
, conforme mostrado no exemplo abaixo:
# Maven version -Drun.functionTarget=... # Gradle version -Prun.functionTarget=...
Buildfiles
Também pode especificar a função que quer executar no ficheiro de compilação do seu projeto. Embora o Maven e o Gradle tenham flags da CLI semelhantes, as respetivas cláusulas do ficheiro de compilação diferem significativamente.
Maven
Os ficheiros de compilação do Maven têm o nome pom.xml
. Adicione a seguinte cláusula a este ficheiro para especificar uma função de destino:
Substitua <functionTarget>
pelo nome da classe da sua função. (Por exemplo, uma função no pacote functions
com o nome da classe
HelloCloudFunctions
teria o nome da classe
functions.HelloCloudFunctions
. Isto é relativo ao ficheiro de compilação principal: pom.xml
ou build.gradle
.
Gradle
Os ficheiros de compilação do Gradle têm o nome build.gradle
. Adicione a seguinte cláusula a este ficheiro para especificar uma função de destino:
C#
Se criar o seu projeto com dotnet new
e um dos modelos especificados acima, o .NET Functions Framework deteta automaticamente a sua função.
Se o seu projeto contiver várias funções, consulte a secção Executar a framework para obter informações sobre como executar uma função específica.
Ruby
O Ruby Functions Framework permite-lhe especificar o nome da sua função e o tipo de assinatura como argumentos da linha de comandos ou variáveis de ambiente. Os argumentos da linha de comandos têm de ser especificados quando executa a framework.
PHP
O framework de funções PHP permite-lhe especificar variáveis de ambiente como argumentos da linha de comandos.
Também pode especificar estes valores no composer.json
buildfile adicionando um script start
, conforme mostrado no exemplo abaixo.
"scripts": { "start": [ "Composer\\Config::disableProcessTimeout", "FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:${PORT:-8080} vendor/bin/router.php" ] }
Substitua YOUR_FUNCTION_NAME pelo nome da sua função e YOUR_SIGNATURE_TYPE (se aplicável) pelo tipo de assinatura da sua função, conforme mostrado na tabela acima.
Execute o Functions Framework
Use o seguinte comando para executar a sua função com o Functions Framework.
Por predefinição, a sua função vai estar acessível em localhost:8080
, a menos que especifique
explicitamente um valor PORT
.
Node.js
npm start
Python
Usando argumentos da linha de comandos:
functions-framework --target=YOUR_FUNCTION_NAME
Usando variáveis de ambiente:
FUNCTION_TARGET=YOUR_FUNCTION_NAME functions-framework
Substitua YOUR_FUNCTION_NAME pelo nome do método da sua função.
Go
cd cmd go build ./cmd
Usando variáveis de ambiente:
cd cmd go build PORT=8080 ./cmd
Java
Maven
Use o seguinte comando para executar uma função especificada em pom.xml
:
mvn function:run
Use o seguinte comando para executar uma função especificada num argumento da linha de comandos:
mvn function:run -Drun.functionTarget=YOUR_FUNCTION_NAME
Use o seguinte comando para executar uma função especificada como uma variável de ambiente:
FUNCTION_TARGET=YOUR_FUNCTION_NAME mvn function:run
Substitua YOUR_FUNCTION_NAME pelo nome da classe da sua função.
Gradle
Use o seguinte comando para executar uma função especificada em build.gradle
:
./gradlew runFunction
Use o seguinte comando para executar uma função especificada num argumento da linha de comandos:
./gradlew runFunction -Prun.functionTarget=YOUR_FUNCTION_NAME
Use o seguinte comando para executar uma função especificada como uma variável de ambiente:
FUNCTION_TARGET=YOUR_FUNCTION_NAME ./gradlew runFunction
Substitua YOUR_FUNCTION_NAME pelo nome da classe da sua função.
C#
Use o seguinte comando para executar a sua função quando existir exatamente uma função no projeto .NET atual. (Esta é a estrutura predefinida para projetos criados com base em modelos.)
dotnet run
Se o seu projeto .NET contiver várias funções, use o seguinte comando para executar uma função específica. Substitua YOUR_FUNCTION_CLASSNAME pelo nome da classe da função, incluindo o espaço de nomes.
dotnet run YOUR_FUNCTION_CLASSNAME
Se quiser executar várias funções em simultâneo, tem de executar várias instâncias do Functions Framework. Para evitar conflitos entre instâncias de frameworks em execução, cada instância deve usar um valor de PORT
diferente. O comando seguinte mostra como executar uma função com um valor de PORT
de 8080
.
Usando argumentos da linha de comandos:
dotnet run --target YOUR_FUNCTION_CLASSNAME --port 8080
Usando variáveis de ambiente:
FUNCTION_TARGET=YOUR_FUNCTION_CLASSNAME PORT=8080 dotnet run
Ruby
Usando argumentos da linha de comandos:
bundle exec functions-framework-ruby --target YOUR_FUNCTION_NAME
Usando variáveis de ambiente:
FUNCTION_TARGET=YOUR_FUNCTION_NAME bundle exec functions-framework-ruby
Substitua YOUR_FUNCTION_NAME pelo nome do método da sua função.
PHP
export FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:8080 vendor/bin/router.php
Substitua YOUR_FUNCTION_NAME pelo nome da sua função.
Chame a sua função
Consulte a página Chamar funções locais para ver instruções sobre como interagir com a sua função executada localmente.
Limpar
Quando terminar de executar a função, pare a instância da framework em execução premindo Control+C.