En esta página se ofrece una introducción a la escritura de funciones de Cloud Run con Functions Framework.
Cuando escribas el código fuente de las funciones, debes usar Functions Framework, una biblioteca de código abierto para escribir funciones de Cloud Run. Con Functions Framework, puedes escribir funciones ligeras que se ejecuten en Cloud Run y en otros entornos, como tu máquina de desarrollo local y entornos basados en Knative.
Functions Framework te permite hacer lo siguiente:
- Invocar una función de Cloud Run en respuesta a una solicitud.
- Deserializa automáticamente los eventos que cumplen la especificación CloudEvents, un estándar del sector para describir los datos de eventos de forma común.
- Inicia un servidor de desarrollo local para hacer pruebas rápidas.
Escribir funciones con Functions Framework
Functions Framework proporciona una interfaz para crear servicios modulares. Para usar Functions Framework en el código fuente, especifique lo siguiente:
Punto de entrada de la función
El código fuente debe definir un punto de entrada para la función, que es el código concreto que se ejecuta cuando se invoca la función de Cloud Run. Este punto de entrada se especifica al implementar la función.
La forma de definir el punto de entrada depende del tiempo de ejecución del lenguaje que utilices. Algunos idiomas usan una función como punto de entrada, mientras que otros usan una clase.
Tipo de firma
Cuando escribes el código fuente de una función con Functions Framework, debes especificar uno de los dos tipos de firma:
- Funciones HTTP: una función que registra una función de controlador HTTP. Consulta más información en el artículo Escribir funciones HTTP.
- Funciones basadas en eventos (también llamadas funciones de CloudEvents): una función que registra una función de controlador de CloudEvents. Consulta más información en el artículo sobre cómo escribir funciones basadas en eventos.
Usa una función HTTP cuando necesites que tu función tenga un endpoint de URL y responda a solicitudes HTTP, como en el caso de los webhooks. Usa una función basada en eventos cuando tu función deba activarse directamente en respuesta a eventos de tu Google Cloud proyecto, como mensajes de un tema de Pub/Sub o cambios en un segmento de Cloud Storage.
Estructura del directorio de origen
Functions Framework es compatible con varios lenguajes de programación. El tiempo de ejecución del lenguaje que elijas y el tipo de función que quieras escribir determinarán cómo estructurar el código e implementar la función.
Para que Cloud Run pueda localizar la definición de tu función, cada entorno de ejecución de lenguaje tiene requisitos para estructurar el código fuente.
Node.js
La estructura de directorios básica de las funciones de Node.js es la siguiente:
. ├── index.js └── package.json
De forma predeterminada, Cloud Run intenta cargar el código fuente de un archivo llamado index.js
en la raíz del directorio de tu función. Para especificar otro archivo de origen principal, usa el campo main
en el archivo package.json
.
Tu archivo package.json
también debe incluir Functions Framework para Node.js como dependencia:
{
"main": "index.js",
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
}
}
El código de tu archivo principal debe definir el punto de entrada de la función y puede importar otro código y módulos de Node.js. El archivo principal también puede definir varios puntos de entrada de funciones que se pueden implementar por separado.
Consulta la información general sobre el tiempo de ejecución de Node.js y el Functions Framework para Node.js para obtener más información.
Python
La estructura de directorios básica de las funciones de Python es la siguiente:
. ├── main.py └── requirements.txt
Cloud Run carga el código fuente de un archivo llamado main.py
en la raíz del directorio de la función. El archivo principal debe llamarse main.py
.
Tu archivo requirements.txt
debe incluir Functions Framework para Python como dependencia:
functions-framework==3.*
El código de tu archivo main.py
debe definir el punto de entrada de la función y puede importar otro código y dependencias externas con normalidad. El archivo main.py
también puede definir varios puntos de entrada de funciones que se pueden implementar por separado.
Consulta la información general sobre el entorno de ejecución de Python y el Functions Framework para Python para obtener más información.
Go
La estructura básica de los directorios de las funciones de Go es la siguiente:
. ├── myfunction.go └── go.mod
Tu función debe estar en un paquete de Go en la raíz de tu proyecto. El paquete y sus archivos de origen pueden tener cualquier nombre, excepto package main
. Si necesitas un paquete main
, por ejemplo, para hacer pruebas locales, puedes crear uno en un subdirectorio:
. ├── myfunction.go ├── go.mod └── cmd/ └── main.go
Tu archivo go.mod
debe incluir Functions Framework para Go como dependencia:
module example.com/my-module
require (
github.com/GoogleCloudPlatform/functions-framework-go v1.5.2
)
El código de tu paquete raíz debe definir el punto de entrada de la función y puede importar otro código de subpaquetes y dependencias de forma normal. Tu paquete también puede definir varios puntos de entrada de funciones que se pueden implementar por separado.
Consulta más información en la descripción general del tiempo de ejecución de Go y en Functions Framework para Go.
Java
La estructura de directorios básica de las funciones de Java es la siguiente:
. ├── pom.xml └── src/ └── main/ └── java/ └── MyFunction.java
Los archivos de origen Java deben estar en el directorio src/main/java/
y pueden tener cualquier nombre. Si los archivos de origen declaran un paquete, añade un directorio adicional en src/main/java
con el nombre del paquete:
. ├── pom.xml └── src/ └── main/ └── java/ └── mypackage/ └── MyFunction.java
Te recomendamos que pongas las pruebas asociadas en un subdirectorio src/test/java/
.
Tu archivo pom.xml
debe incluir Functions Framework para Java como dependencia:
...
<dependency>
<groupId>com.google.cloud.functions</groupId>
<artifactId>functions-framework-api</artifactId>
<version>1.0.4</version>
</dependency>
...
El código de los archivos de origen debe definir el punto de entrada de la función y puede importar otro código y dependencias externas con normalidad. Los archivos de origen también pueden definir varios puntos de entrada de funciones que se pueden implementar por separado.
Consulta más información en la descripción general del tiempo de ejecución de Java y en Functions Framework para Java.
.NET
La estructura de directorios básica de las funciones de .NET es la siguiente:
. ├── MyFunction.cs └── MyProject.csproj
Puede estructurar sus proyectos como cualquier otro código fuente de .NET. Los archivos de origen pueden tener cualquier nombre.
El archivo de proyecto debe incluir Functions Framework para .NET como dependencia:
...
<PackageReference Include="Google.Cloud.Functions.Hosting" Version="1.0.0" />
...
El código de los archivos de origen debe definir el punto de entrada de la función y puede importar otro código y dependencias externas con normalidad. Los archivos de origen también pueden definir varios puntos de entrada de funciones que se pueden implementar por separado.
Consulta la información general sobre el entorno de ejecución de.NET y el Functions Framework para .NET para obtener más información.
Ruby
La estructura de directorios básica de las funciones de Ruby es la siguiente:
. ├── app.rb ├── Gemfile └── Gemfile.lock
Cloud Run carga el código fuente de un archivo llamado app.rb
en la raíz del directorio de la función. El archivo principal debe llamarse app.rb
.
Tu archivo Gemfile
debe incluir Functions Framework para Ruby como dependencia:
source "https://rubygems.org"
gem "functions_framework", "~> 1.0"
El código de tu archivo app.rb
debe definir el punto de entrada de la función y puede importar otro código y dependencias externas con normalidad. El archivo app.rb
también puede definir varios puntos de entrada de funciones que se pueden implementar por separado.
Para obtener más información, consulta la información general sobre el entorno de ejecución de Ruby y Functions Framework para Ruby.
PHP
La estructura básica de los directorios de las funciones de PHP es la siguiente:
. ├── index.php └── composer.json
Cloud Run carga el código fuente de un archivo llamado index.php
en la raíz del directorio de la función. El archivo principal debe llamarse index.php
.
Tu archivo composer.json
debe incluir Functions Framework para PHP como dependencia:
{
"require": {
"google/cloud-functions-framework": "^1.1"
}
}
El código de tu archivo index.php
debe definir el punto de entrada de la función y puede importar otro código y dependencias externas de forma normal. El archivo index.php
también puede definir varios puntos de entrada de funciones que se pueden implementar por separado.
Consulta la información general sobre el entorno de ejecución de PHP y el Functions Framework para PHP para obtener más información.
Si agrupas varias funciones en un mismo proyecto, ten en cuenta que es posible que todas las funciones compartan el mismo conjunto de dependencias. Sin embargo, es posible que algunas funciones no necesiten todas las dependencias.
Cuando sea posible, te recomendamos que dividas las bases de código multifunción grandes y que pongas cada función en su propio directorio de nivel superior, como se muestra en los ejemplos anteriores, con sus propios archivos de configuración de origen y de proyecto. De esta forma, se minimiza el número de dependencias necesarias para una función concreta, lo que a su vez reduce la cantidad de memoria que necesita la función.
Siguientes pasos
- Implementar funciones HTTP
- Implementar funciones basadas en eventos
- Información sobre el contrato de Functions Framework