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:

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:

Pasos siguientes