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