Tu función de Cloud Run se ejecuta en un entorno que consta de una versión del sistema operativo con paquetes de complementos, compatibilidad con lenguajes y la biblioteca de Functions Framework de Node.js que admite e invoca tu función. Este entorno se identifica mediante la versión del lenguaje y se conoce como el ID del entorno de ejecución.
Preparación de funciones
Puedes preparar una función directamente desde la consola de Google Cloud o escribirla en tu máquina local y subirla. Si deseas preparar tu máquina local para el desarrollo de Node.js, consulta Configura un entorno de desarrollo de Node.js.
Selecciona tu entorno de ejecución
Las funciones de Cloud Run admiten varias versiones de Node.js, que se enumeran en la página Entornos de ejecución de lenguajes compatibles y las imágenes base. Puedes seleccionar el entorno de ejecución de Node.js que prefieras para tu función durante la implementación:
gcloud
Para usar funciones de Cloud Run para implementar una función HTTP con gcloud CLI, consulta Implementa con Google Cloud CLI.
Console
Si usas la consola de Google Cloud, selecciona el entorno de ejecución cuando creas y cuando implementas tu función. Consulta la guía de inicio rápido de la consola de Google Cloud para obtener instrucciones detalladas.
Estructura del código fuente
Para que Cloud Run Functions encuentre la definición de tu función, tu código fuente debe seguir una estructura específica. Consulta Escribe funciones de Cloud Run para obtener más información.
Especificar dependencias
A fin de especificar dependencias para tus funciones, enuméralas en un archivo package.json
. Para obtener más información, consulta Especifica dependencias en Node.js.
Secuencia de comandos de compilación de NPM
De forma predeterminada, el entorno de ejecución de Node.js ejecuta npm run build
si se detecta una secuencia de comandos build
en package.json
. Si necesitas control adicional sobre tus pasos de compilación antes de iniciar tu aplicación, puedes proporcionar un paso de compilación personalizado si agregas una secuencia de comandos gcp-build
a tu archivo package.json
.
Puedes evitar que tu compilación ejecute la secuencia de comandos npm run build
de las siguientes maneras:
Agrega una secuencia de comandos
gcp-build
con un valor vacío en el archivopackage.json
:"gcp-build":""
.Configura la variable de entorno de compilación
GOOGLE_NODE_RUN_SCRIPTS
en la string vacía para evitar que se ejecuten todas las secuencias de comandos.
Finalización asíncrona de funciones
Cuando trabajas con tareas asíncronas que implican devoluciones de llamada u objetos Promise
,
debes informarle explícitamente al entorno de ejecución que tu función terminó
de ejecutar estas tareas. Puedes hacerlo de varias maneras diferentes, como se muestra en
los siguientes ejemplos. La clave es que tu código debe esperar a que se complete la tarea asíncrona o Promise
antes de mostrar el resultado. de lo contrario, el componente asíncrono de tu función puede finalizar antes de que se complete.
Funciones controladas por eventos
Muestra implícita
exports.implicitlyReturning = async (event, context) => {
return await asyncFunctionThatReturnsAPromise();
};
Muestra explícita
exports.explicitlyReturning = function (event, context) {
return asyncFunctionThatReturnsAPromise();
};
Funciones de HTTP
Usa middleware para controlar solicitudes HTTP
Las funciones de HTTP de Node.js proporcionan objetos request
y response
que son compatibles con ExpressJS para simplificar el consumo de solicitudes HTTP. Las funciones de Cloud Run leen automáticamente el cuerpo de la solicitud, de manera que siempre recibirás el cuerpo de una solicitud más allá del tipo de medio. Esto quiere decir que las solicitudes HTTP se considerarán completamente leídas en el momento en que tu código se ejecuta. La anidación de las apps de ExpressJS debe usarse con esta salvedad: específicamente, el middleware que espera que el cuerpo de una solicitud no se haya leído puede que no se comporte como se prevé.
Usa módulos de ES
Los módulos de ECMAScript (módulos de ES o ESM) son una función estándar de TC39 sin marca en la versión de Node 14+ para cargar módulos de JavaScript. A diferencia de CommonJS, ESM proporciona una API asíncrona para cargar módulos. También proporciona una mejora de la sintaxis popular a través de las declaraciones import
y export
que se pueden usar dentro de una función de Cloud Run (en lugar de las declaraciones require
).
Para usar ESM dentro de una función de Cloud Run, debes declarar "type": "module"
en tu package.json
.
{
...
"type": "module",
...
}
Luego, puedes usar las declaraciones import
y export
.
Obtén más información para usar los módulos de ES.