Ejecuta funciones con Functions Framework
Cloud Run Functions usa las bibliotecas de código abierto de Functions Framework para envolver las funciones implementadas en una aplicación HTTP persistente.
Además, Functions Framework puede ejecutarse en cualquier otra plataforma que admita el propio lenguaje, como tu máquina local, los servidores locales, Compute Engine y Cloud Run.
Instala dependencias
En el directorio de la función, instala la biblioteca de Functions Framework para tu lenguaje de la manera siguiente:
Consulta la biblioteca de Functions Framework para Java para obtener más información.
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
Si usas Maven, agrega lo siguiente al archivo pom.xml:
Gradle
Si usas Gradle, agrega lo siguiente al archivo build.gradle:
C#
Los comandos siguientes usan plantillas .NET para crear una base de código nueva de una función de Cloud Run para .NET con la biblioteca de Functions Framework de .NET como una dependencia:
# HTTP functions dotnet new gcf-http # CloudEvent functions dotnet new gcf-event
Ruby
En Ruby, Functions Framework debe agregarse a las dependencias de la función para implementarla en Cloud Run Functions:
bundle add functions_framework
PHP
composer require google/cloud-functions-framework
Configura Functions Framework
Antes de ejecutarla mediante Functions Framework, debes especificar el tipo y el nombre de la función que quieres ejecutar. Estos atributos se pueden especificar como marcas de la interfaz de línea de comandos (CLI) o como variables de entorno.
Tipos de funciones compatibles
Functions Framework admite los tres tipos de funciones
compatibles con Cloud Run Functions 1ª gen. Todos los entornos de ejecución
de lenguajes admiten http y al menos uno de los siguientes: event o cloudevent.
| Tipo de función | Tipo de firma | Descripción | Entornos de ejecución compatibles |
|---|---|---|---|
| Funciones activadas por HTTP |
http
|
Funciones que reciben solicitudes HTTP y responden a ellas | Todos los entornos de ejecución |
| Funciones en segundo plano |
event
|
Formato de evento específico de Cloud Run Functions | Node.js, Python, Go y Java |
| Funciones de CloudEvent |
cloudevent
|
Formato de evento estándar de la industria | .NET, Ruby y PHP |
Especifica qué función se ejecutará
Antes de ejecutar una función con Functions Framework, debes especificar qué función dentro de tu código se debe ejecutar. Para la mayoría de los lenguajes, puedes hacerlo si especificas el nombre del método de la función de destino como se muestra en las tablas a continuación. También se muestran las excepciones a esta regla, como Java y .NET.
Instrucciones por lenguaje
Consulta la tabla a continuación para obtener una lista de las opciones de configuración compatibles con cada lenguaje.
Node.js
| Argumento de la CLI | Variable de entorno | Descripción |
|---|---|---|
--port
|
PORT
|
El puerto en el que se deben escuchar las solicitudes (predeterminado: 8080)
|
--target
|
FUNCTION_TARGET
|
El nombre de la función export que se invocará (predeterminado:
function)
|
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
El tipo de firma que usa tu función. Puede ser una de http
(la opción predeterminada), event o cloudevent
|
Python
| Argumento de la CLI | Variable de entorno | Descripción |
|---|---|---|
--port
|
PORT
|
El puerto en el que se deben escuchar las solicitudes (predeterminado: 8080)
|
--target
|
FUNCTION_TARGET
|
El nombre de la función export que se invocará (predeterminado:
function)
|
--signature-type
|
FUNCTION_SIGNATURE_TYPE
|
El tipo de firma que usa tu función. Puede ser una de http
(la opción predeterminada), event o cloudevent
|
Go
| Variable de entorno | Descripción |
|---|---|
PORT
|
El puerto en el que se deben escuchar las solicitudes (predeterminado: 8080)
|
Java
| Nombre del argumento | Variable de entorno | Descripción |
|---|---|---|
run.port
|
PORT
|
El puerto en el que se deben escuchar las solicitudes (predeterminado: 8080)
|
run.functionTarget
|
FUNCTION_TARGET
|
El nombre de la función export que se invocará (predeterminado:
function)
|
C#
| Argumento de la CLI | Variable de entorno | Descripción |
|---|---|---|
--port
|
PORT
|
El puerto en el que se deben escuchar las solicitudes (predeterminado: 8080)
|
--target (o solo el argumento)
|
FUNCTION_TARGET
|
El classname de la función que se invocará (predeterminado:
function)
|
Ruby
| Argumento de la CLI | Variable de entorno | Descripción |
|---|---|---|
--port
|
PORT
|
El puerto en el que se deben escuchar las solicitudes (predeterminado: 8080)
|
--target
|
FUNCTION_TARGET
|
El nombre de la función export que se invocará (predeterminado:
function)
|
PHP
| Variable de entorno | Descripción |
|---|---|
FUNCTION_TARGET
|
Es el nombre de la función que se invocará. (predeterminado:
function)
|
FUNCTION_SIGNATURE_TYPE
|
El tipo de firma que usa tu función. Puede ser una de http
(la opción predeterminada), event o cloudevent
|
Sigue las instrucciones que se indican a continuación para configurar y ejecutar Functions Framework:
Node.js
Functions Framework para Node.js te permite especificar el nombre y el tipo de firma de tu función como argumentos de línea de comandos o variables de entorno.
También puedes especificar estos valores en el archivo de compilación package.json agregando una secuencia de comandos start con los argumentos requeridos de la CLI, como se muestra en el ejemplo siguiente.
"scripts": { "start": "npx functions-framework --target=YOUR_FUNCTION_NAME [--signature-type=YOUR_SIGNATURE_TYPE]" }
Lo mismo se puede hacer con las variables de entorno:
"scripts": { "start": "FUNCTION_TARGET=YOUR_FUNCTION_NAME FUNCTION_SIGNATURE_TYPE=YOUR_SIGNATURE_TYPE npx functions-framework" }
Reemplaza YOUR_FUNCTION_NAME por el nombre del método y YOUR_SIGNATURE_TYPE (si corresponde) por el tipo de firma de la función, como se muestra en la tabla anterior.
Python
Functions Framework para Python te permite especificar el nombre y el tipo de firma de la función como argumentos de línea de comandos o variables de entorno. Los argumentos de línea de comandos deben especificarse cuando ejecutas el framework.
Go
Functions Framework de Go usa funcframework.RegisterHTTPFunctionContext para especificar el destino y el tipo de firma de la función.
Java
Functions Framework para Java acepta datos de configuración de tres fuentes diferentes en el siguiente orden de prioridad (del más específico al menos específico):
- Argumentos de la línea de comandos
- Archivos de compilación
- Variables de entorno
Argumentos de la línea de comandos
Maven
Para especificar la función que deseas ejecutar, agrega la siguiente marca de la interfaz de línea de comandos (CLI) a los comandos mvn:
-Drun.functionTarget=YOUR_FUNCTION_NAMETambién puedes especificar el puerto de destino si agregas la siguiente marca de la CLI de forma similar:
-Drun.port=12345
Gradle
Los marcas de la CLI de Gradle son casi idénticas a las de Maven. El único cambio que realiza Gradle es intercambiar la -D inicial en cada marca por una -P, como se muestra en el siguiente ejemplo:
# Maven version -Drun.functionTarget=... # Gradle version -Prun.functionTarget=...
Archivos de compilación
También puedes especificar la función que desees ejecutar en el archivo de compilación del proyecto. Si bien Maven y Gradle tienen marcas similares de la CLI, sus cláusulas de archivo de compilación difieren de manera significativa.
Maven
Los archivos de compilación de Maven se denominan pom.xml. Agrega la cláusula siguiente a este archivo para especificar una función de destino:
Reemplaza <functionTarget> por el nombre de clase de tu función. (Por ejemplo, una función en el paquete functions con el nombre de clase
HelloCloudFunctions tendría un nombre de clase
functions.HelloCloudFunctions. Esto está relacionado con el archivo de compilación superior,
ya sea pom.xml o build.gradle).
Gradle
Los archivos de compilación de Gradle se denominan build.gradle. Agrega la cláusula siguiente a
este archivo para especificar una función de destino:
C#
Si creas tu proyecto mediante dotnet new y una de las plantillas especificadas antes, Functions Framework para .NET detectará de forma automática la función.
Si tu proyecto contiene varias funciones, consulta la sección Ejecuta el framework para obtener información sobre cómo ejecutar una función específica.
Ruby
Functions Framework para Ruby permite especificar el nombre y el tipo de firma de la función como argumentos de línea de comandos o variables de entorno. Los argumentos de línea de comandos deben especificarse cuando ejecutas el framework.
PHP
Functions Framework para PHP permite especificar variables de entorno como argumentos de línea de comandos.
Agrega una secuencia de comandos start, como se muestra en el ejemplo siguiente,
para especificar estos valores en el archivo de compilación composer.json.
"scripts": { "start": [ "Composer\\Config::disableProcessTimeout", "FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:${PORT:-8080} vendor/bin/router.php" ] }
Reemplaza YOUR_FUNCTION_NAME por el nombre de la función y YOUR_SIGNATURE_TYPE (si corresponde) por el tipo de firma de la función, como se muestra en la tabla anterior.
Ejecuta Functions Framework
Usa el comando siguiente para ejecutar la función con Functions Framework.
De forma predeterminada, se podrá acceder a la función en localhost:8080, a menos que especifiques de forma explícita un valor PORT.
Node.js
npm startPython
Usa argumentos de línea de comandos:
functions-framework --target=YOUR_FUNCTION_NAME
Usa variables de entorno:
FUNCTION_TARGET=YOUR_FUNCTION_NAME functions-framework
Reemplaza YOUR_FUNCTION_NAME por el nombre del método de la función.
Go
cd cmd go build ./cmd
Usa variables de entorno:
cd cmd go build PORT=8080 ./cmd
Java
Maven
Usa el siguiente comando para ejecutar una función especificada en pom.xml:
mvn function:run
Usa el comando siguiente para ejecutar una función especificada en un argumento de línea de comandos:
mvn function:run -Drun.functionTarget=YOUR_FUNCTION_NAME
Usa el comando siguiente para ejecutar una función especificada como una variable de entorno:
FUNCTION_TARGET=YOUR_FUNCTION_NAME mvn function:run
Reemplaza YOUR_FUNCTION_NAME por el nombre de clase de la función.
Gradle
Usa el siguiente comando para ejecutar una función especificada en build.gradle:
./gradlew runFunctionUsa el comando siguiente para ejecutar una función especificada en un argumento de línea de comandos:
./gradlew runFunction -Prun.functionTarget=YOUR_FUNCTION_NAME
Usa el comando siguiente para ejecutar una función especificada como una variable de entorno:
FUNCTION_TARGET=YOUR_FUNCTION_NAME ./gradlew runFunction
Reemplaza YOUR_FUNCTION_NAME por el nombre de clase de la función.
C#
Usa el siguiente comando para ejecutar la función cuando esté presente solo una función en el proyecto .NET actual (esta es la estructura predeterminada para los proyectos creados con plantillas).
dotnet runSi tu proyecto .NET contiene varias funciones, usa el siguiente comando para ejecutar una función específica. Reemplaza YOUR_FUNCTION_CLASSNAME por el nombre de clase de la función, incluido el espacio de nombres.
dotnet run YOUR_FUNCTION_CLASSNAME
Si deseas ejecutar varias funciones de forma simultánea, deberás ejecutar varias instancias de Functions Framework. Para evitar conflictos entre las instancias de framework en ejecución, cada instancia debe usar un valor PORT diferente. En
el comando siguiente, se muestra cómo ejecutar una función con un valor PORT de 8080.
Usa argumentos de línea de comandos:
dotnet run --target YOUR_FUNCTION_CLASSNAME --port 8080
Usa variables de entorno:
FUNCTION_TARGET=YOUR_FUNCTION_CLASSNAME PORT=8080 dotnet run
Ruby
Usa argumentos de línea de comandos:
bundle exec functions-framework-ruby --target YOUR_FUNCTION_NAME
Usa variables de entorno:
FUNCTION_TARGET=YOUR_FUNCTION_NAME bundle exec functions-framework-ruby
Reemplaza YOUR_FUNCTION_NAME por el nombre del método de la función.
PHP
export FUNCTION_TARGET=YOUR_FUNCTION_NAME php -S localhost:8080 vendor/bin/router.php
Reemplaza YOUR_FUNCTION_NAME por el nombre de la función.
Llama a la función
Consulta la página Llama a funciones locales para obtener instrucciones sobre cómo interactuar con la función que se ejecuta a nivel local.
Realiza una limpieza
Cuando termines de ejecutar la función, presiona Control + C para detener la instancia del framework en ejecución.