Escribir funciones de Cloud Run
Las funciones de Cloud Run admiten la escritura de código fuente en 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. En esta página se ofrece una descripción general de los tipos de funciones de Cloud Run y de los requisitos del código fuente.
Tipos de funciones de Cloud Run
Hay dos tipos de funciones de Cloud Run:
Las funciones HTTP, que gestionan solicitudes HTTP y usan activadores HTTP. Consulta información sobre cómo implementar funciones HTTP en el artículo Escribir funciones HTTP.
Funciones basadas en eventos, que gestionan eventos de tu entorno de nube y usan activadores de eventos, tal como se describe en Activadores de Cloud Run Functions. Consulta el artículo Escribir funciones basadas en eventos para obtener información sobre cómo implementar 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 quieras que se active 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
Para que las funciones de Cloud Run puedan localizar la definición de tu función, cada entorno de ejecución de lenguaje tiene requisitos para estructurar el código fuente. A continuación, se muestra la estructura de directorios básica de una función en cada tiempo de ejecución.
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 Functions intenta cargar el código fuente de un archivo llamado index.js
en la raíz del directorio de la 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 de forma normal. El archivo principal también puede definir varios puntos de entrada de funciones que se pueden implementar por separado.
Python
La estructura de directorios básica de las funciones de Python es la siguiente:
. ├── main.py └── requirements.txt
Cloud Run Functions 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 como de costumbre. El archivo main.py
también puede definir varios puntos de entrada de funciones que se pueden implementar por separado.
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.
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 de 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.
C#
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.
También puedes usar el paquete de plantillas de funciones de Cloud Run para .NET para generar los archivos necesarios.
Ruby
La estructura de directorios básica de las funciones de Ruby es la siguiente:
. ├── app.rb ├── Gemfile └── Gemfile.lock
Cloud Run Functions 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 como de costumbre. El archivo app.rb
también puede definir varios puntos de entrada de funciones que se pueden implementar por separado.
PHP
La estructura básica de los directorios de las funciones de PHP es la siguiente:
. ├── index.php └── composer.json
Cloud Run Functions 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 como de costumbre. El archivo index.php
también puede definir varios puntos de entrada de funciones que se pueden implementar por separado.
Si tienes pensado agrupar varias funciones en un solo proyecto, ten en cuenta que todas las funciones pueden acabar compartiendo el mismo conjunto de dependencias. Sin embargo, es posible que algunas funciones no necesiten todas las dependencias.
Siempre que 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 arriba, 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.
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. En algunos idiomas, el punto de entrada es una función, mientras que en otros es una clase. Para obtener más información sobre cómo definir puntos de entrada e implementar funciones de Cloud Run en diferentes lenguajes, consulta los artículos Escribir funciones HTTP y Escribir funciones basadas en eventos.
Dependencias
Puedes gestionar las dependencias con las herramientas estándar de cada tiempo de ejecución. Para obtener más información, consulta la página correspondiente:
- Especificar dependencias en Node.js
- Especificar dependencias en Python
- Especificar dependencias en Go
- Especificar dependencias en Java
- Especificar dependencias en .NET
- Especificar dependencias en Ruby
- Especificar dependencias en PHP
Pasos siguientes
- Consulta cómo escribir funciones HTTP.
- Consulta cómo escribir funciones basadas en eventos.
- Consulta información sobre los activadores de Cloud Run Functions.