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:

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:

Próximos pasos