Saltar al contenido principal

Primeros pasos

En este documento veremos como ejecutar una cloud functions en localhost
utilizando la libreria functions framework y los pasos posteriores de despliegue
e integración continua.

Estructura principal del proyecto

mkdir mi-funcion
cd mi-function

Iniciar repositorio de git

git init
git checkout -b master

Instalar generador de template de cfs

npm login --scope=@silstech --registry https://nexus.sils.tech/repository/npm-internal
npm install -g yo
npm install -g @silstech/generator-sils-cf

Nota: Para ejecutar npm login es necesario un usuario en nexus.sils.tech

Crear template inicial

yo @silstech/sils-cf

Nota: Para más detalle de como usar el generador entrar a generator-sils-cf

Instalar y ejecutar functions framework.

npm install @google-cloud/functions-framework

En el package.json crear un nuevo script llamado dev con el siguiente comando.

NODE_ENV=development functions-framework --target=miFuncion --port=3000

Nota: En target va el método principal de la función, por ejemplo si en el archivo index.js
creado por el generador es de la forma.

import logger from "./src/logger";

export const miFuncion = async (req, res) => {
logger.info(`miFuncion called with ${JSON.stringify(req.body)}`);

return res.status(200).send();
};

El flag resultaria en --target=miFuncion

Pasos previos a ejecutar la función.

Para ejecutar exitosamente la función por functions framework en localhost es necesario
verificar que se usen features de ES6 para importar y exportar modulos en el proyecto y ademas
es necesario agregar las extensiones a los archivos importados.

Por ejemplo:

Malo

const logger = require("./src/logger");

Bueno

import logger from "./src/logger.js";

Notas:

Cuando se ejecuta en localhost la función mediante functions framework, en package.json se debe
agregar la propiedad type con valor module.

{
"name": "my-function",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module",
......
......
......

Tener en cuenta que esto solo se debe realizar al ejecutar en localhost, para deployar se debe quitar
esta propiedad.

Ejecutar función

npm run dev

Output:

Serving function...
Function: myFunction
Signature type: http
URL: http://localhost:3000/

Testear función

Ejecutar en terminal el siguiente comando.

curl -X POST http://localhost:3000 \
-H "Content-Type: application/json" \
-d '{"clave1":"valor1", "clave2":"valor2"}'

Output:

Serving function...
Function: miFuncion
Signature type: http
URL: http://localhost:4000/
{"name":"my-funcion","hostname":"mipc","pid":43162,"level":30,"msg":"miFuncion called with {\"clave1\":\"valor1\",\"clave2\":\"valor2\"}","time":"2025-03-25T17:45:19.040Z","v":0}

Deploy

TODO