Invocar funciones de AWS Lambda localmente con AWS SDK de Node.
Soy bastante nuevo ejecutando funciones de lambda localmente con sam.
Tengo esta configuración de proyecto donde una “aplicación de express de node” actúa como middleware entre internet (api gateway) y otras funciones de lambda.
En función de la ruta de recursos, se invoca otra función de lambda.
Bloque de código de invocación:
const { Lambda } = require("@aws-sdk/client-lambda");
const client = new Lambda({region: "eu-central-1"});
const input = {
FunctionName: "My-func",
InvocationType: "RequestResponse",
Payload: JSON.stringify(payload)
};
client.invoke(input);
My-func
es una función de lambda basada en Java.
Esta configuración funciona bien en lambda, pero al ejecutarlo localmente hay algunos problemas que no puedo solucionar siguiendo la siguiente configuración.
Estoy usando sam para ejecutar mis funciones de lambda.
Ejecuto mi función de Java (My-func
) como sam local start-lambda -t my-func.yaml
, que se ejecuta en 127.0.0.1:3001.
Ahora estoy intentando invocar esta función desde mi aplicación de nodejs. Leí algunos problemas en el repositorio de sdk de aws para especificar el punto final en la configuración de inicialización del cliente de lambda, como:
const client = new Lambda({apiVersion: '2015-03-31', endpoint: 'http://127.0.0.1:3001/'});
y usar el mismo código de arriba para invocar la función. Pero esto no funciona y falla con el siguiente error:
'$metadata': { attempts: 1, totalRetryDelay: 0 } (net.js:1144:16) { ERROR Error: connect ECONNREFUSED 127.0.0.1:3001
.
Por favor, ayúdame a descubrir cómo invocar una función de lambda desde otra que se ejecuta localmente.
Gracias de antemano.
davy.ai
Ejecutando funciones Lambda localmente con SAM
Como experto en TI especializado en node.js, Amazon Web Services (AWS), AWS Lambda, AWS SAM y AWS SAM CLI, intentemos solucionar el problema que estás enfrentando al invocar una función Lambda basada en Java (Mi-función) desde tu aplicación Node Express que se ejecuta localmente con SAM.
Configuración inicial del proyecto
Tienes una aplicación Node Express que actúa como middleware entre Internet (API Gateway) y otras funciones Lambda. Según la ruta de recursos, se invoca otra función Lambda (Mi-función).
El bloque de código de invocación que estás utilizando es:
Problemas al ejecutar localmente con SAM
Sin embargo, la configuración funciona bien en Lambda, pero al ejecutarla localmente con SAM, hay algunos problemas que no puedes solucionar. Estás utilizando SAM para ejecutar tu aplicación Node Express y también intentando ejecutar Mi-función como
sam local start-lambda -t my-func.yaml
, lo cual ejecuta la función Lambda en 127.0.0.1:3001.Ahora, estás intentando invocar Mi-función desde tu aplicación Node Express. Leíste algunos problemas de GitHub del repositorio de AWS SDK para especificar el endpoint en la configuración de inicialización del cliente Lambda como:
y estás usando el mismo código que se muestra arriba para invocar la función. Sin embargo, esto no funciona y falla con el error:
Solución de problemas del problema
Para solucionar el problema, algunas de las cosas que puedes intentar son:
my-func.yaml
utilizado para iniciar la función Lambda localmente con SAM sea correcto y tenga todos los parámetros necesarios definidos.my-func.yaml
.client.invoke(input)
con un bloque try-catch y registra cualquier error en la consola para obtener más detalles sobre el problema.Conclusión
Siguiendo los pasos de solución de problemas anteriores, deberías poder identificar y solucionar el problema que estás enfrentando al invocar una función Lambda desde otra que se ejecuta localmente con SAM.