Escribe funciones de Cloud Run
Cloud Run Functions permite escribir código fuente en varios lenguajes de programación. El entorno de ejecución del lenguaje que elijas y el tipo de función que quieras escribir determinarán cómo se estructura el código y se implementa la función. En esta página, se proporciona una descripción general de los tipos de funciones de Cloud Run y las expectativas sobre el código fuente.
Tipos de funciones de Cloud Run
Existen dos tipos de funciones de Cloud Run:
Funciones de HTTP, que administran las solicitudes HTTP y usan activadores HTTP. Consulta Escribe funciones de HTTP para obtener información sobre la implementación de funciones de HTTP.
Funciones basadas en eventos, que administran los eventos de tu entorno de nube y usan activadores de eventos, como se describe en Activadores de funciones de Cloud Run. Consulta Escribe funciones basadas en eventos para obtener información sobre la implementación de estas funciones.
Usa una función de HTTP cuando necesites que la función tenga un extremo de URL y responda a solicitudes HTTP, como en el caso de los webhooks. Usa una función basada en eventos cuando la función se deba activar directamente en respuesta a eventos de tu proyecto de Google Cloud , como mensajes en un tema de Pub/Sub o cambios en un bucket de Cloud Storage.
Estructura de directorios del código fuente
Para que Cloud Run Functions localice la definición de la función, el entorno de ejecución de cada lenguaje tiene requisitos sobre la estructura del código fuente. A continuación, se muestra la estructura básica de los directorios para una función en cada entorno de ejecución.
Node.js
A continuación, se muestra la estructura básica de los directorios para las funciones de Node.js:
. ├── index.js └── package.json
De forma predeterminada, Cloud Run Functions intenta cargar el código fuente desde un archivo
llamado index.js ubicado en la raíz del directorio de la función. Para especificar un archivo de origen principal
diferente, usa el campo main en el archivo package.json.
El archivo package.json también debe incluir el
Functions Framework para Node.js
como una dependencia:
{
"main": "index.js",
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0"
}
}
El código del archivo principal debe definir el punto de entrada de la función y puede importar otros códigos y módulos de Node.js como de costumbre. El archivo principal también puede definir varios puntos de entrada de funciones que se pueden implementar por separado.
Python
A continuación, se muestra la estructura básica de los directorios para las funciones de Python:
. ├── main.py └── requirements.txt
Cloud Run Functions carga el código fuente desde un archivo llamado main.py ubicado en la
raíz del directorio de la función. El archivo principal debe llamarse main.py.
El archivo requirements.txt debe incluir el Functions Framework para Python
como una dependencia:
functions-framework==3.*
El código del 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.
Go
La estructura básica de los directorios para las funciones de Go es la siguiente:
. ├── myfunction.go └── go.mod
La función debe estar en un paquete de Go ubicado en la raíz del proyecto. El paquete
y sus archivos de origen pueden tener cualquier nombre, excepto que la función no puede estar en
package main. Si necesitas un paquete main, por ejemplo, para realizar pruebas locales,
puedes crear uno en un subdirectorio:
.
├── myfunction.go
├── go.mod
└── cmd/
└── main.go
El archivo go.mod debe incluir el
Functions Framework para Go
como una dependencia:
module example.com/my-module
require (
github.com/GoogleCloudPlatform/functions-framework-go v1.5.2
)
El código del paquete raíz debe definir el punto de entrada de la función y puede importar otro código de subpaquetes y dependencias con normalidad. El paquete también puede definir varios puntos de entrada de funciones que pueden implementarse por separado.
Java
La estructura básica de los directorios para 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, agrega un directorio adicional en
src/main/java con el nombre del paquete:
.
├── pom.xml
└── src/
└── main/
└── java/
└── mypackage/
└── MyFunction.java
Te recomendamos que coloques pruebas asociadas en un subdirectorio src/test/java/.
El archivo pom.xml debe incluir el
Functions Framework para Java
como una 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 pueden implementarse por separado.
C#
La estructura básica de los directorios para las funciones de .NET es la siguiente:
. ├── MyFunction.cs └── MyProject.csproj
Puedes estructurar los proyectos como lo harías con cualquier otro código fuente de .NET. Los archivos de origen pueden tener cualquier nombre.
El archivo del proyecto debe incluir el Functions Framework para .NET como una 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 pueden implementarse por separado.
También puedes usar el paquete de plantillas de Cloud Run Functions para .NET con el objetivo de generar los archivos necesarios.
Ruby
La estructura básica de los directorios para las funciones de Ruby es la siguiente:
. ├── app.rb ├── Gemfile └── Gemfile.lock
Cloud Run Functions carga el código fuente desde un archivo llamado app.rb ubicado en la
raíz del directorio de la función. El archivo principal debe llamarse app.rb.
El archivo Gemfile debe incluir
Functions Framework para Ruby
como una dependencia:
source "https://rubygems.org"
gem "functions_framework", "~> 1.0"
El código del 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.
PHP
La estructura básica de los directorios para las funciones de PHP es la siguiente:
. ├── index.php └── composer.json
Cloud Run Functions carga el código fuente desde un archivo llamado index.php ubicado en la
raíz del directorio de la función. El archivo principal debe llamarse index.php.
El archivo composer.json debe incluir el
Functions Framework para PHP
como una dependencia:
{
"require": {
"google/cloud-functions-framework": "^1.1"
}
}
El código del archivo index.php debe definir el
punto de entrada de la función y puede importar otro código y dependencias
externas con normalidad. El archivo index.php también puede definir varios puntos
de entrada de funciones que se pueden implementar por separado.
Si estás pensando en agrupar varias funciones en un solo proyecto, ten en cuenta que cada función puede terminar compartiendo el mismo conjunto de dependencias. Sin embargo, es posible que algunas de las funciones no necesiten todas las dependencias.
Siempre que sea posible, te recomendamos dividir las bases de código multifunción grandes y colocar 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. Este enfoque minimiza la cantidad de dependencias necesarias para una función específica, 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 específico que se ejecuta cuando se invoca la función de Cloud Run. Cuando implementes la función, deberás especificar este punto de entrada.
La forma en que defines el punto de entrada depende del entorno de ejecución del lenguaje que usas. Para algunos lenguajes, el punto de entrada es una función, mientras que, para otros, es una clase. Para obtener más información sobre cómo definir puntos de entrada e implementar Cloud Run Functions en diferentes lenguajes, consulta Escribe funciones de HTTP y Escribe funciones basadas en eventos.
Dependencias
Puedes administrar las dependencias con herramientas estándar para cada entorno de ejecución. Para obtener más información, consulta la página que corresponda a las opciones siguientes:
- Especifica dependencias en Node.js.
- Especifica dependencias en Python.
- Especifica dependencias en Go
- Especifica dependencias en Java
- Especifica dependencias en .NET
- Especifica dependencias en Ruby
- Especifica dependencias en PHP
Próximos pasos
- Obtén información para escribir funciones de HTTP.
- Obtén información para escribir funciones basadas en eventos.
- Obtén más información sobre los activadores de Cloud Run Functions.