No se puede encontrar el módulo con Serverless.
Estoy utilizando Typescript, ApolloServer, graphql, serverless y Lambdas para desarrollar mi aplicación. Al ejecutar sls offline start
estoy obteniendo el siguiente error:
offline: Error: No se puede encontrar el módulo '/Users/aroe/Desktop/projects/test-serverless-backend/functions/graph/graphql'
Require stack:
Aquí está mi configuración del archivo serverless.yml:
service: gamitrak-backend # nombre del servicio
provider:
name: aws # implementar en AWS
runtime: nodejs12.x
versionFunctions: false # deshabilitar versionamiento de funciones
region: us-west-2 # región de AWS
apiGateway:
shouldStartNameWithService: true
functions:
graph:
handler: /src/functions/graph/graphql.handler # ruta del controlador Lambda
events:
- http:
path: graphql # definir el endpoint Lambda
method: any # cualquier método HTTP puede acceder a esta Lambda
cors: true # habilitar CORS
plugins:
- serverless-offline
En handler:
podemos ver que está intentando acceder a mi función, aquí está ese archivo cuando se ejecuta el comando PWD para mostrar la ruta:
/Users/aroe/Desktop/projects/test-serverless-backend/src/functions/graph
Aquí está el código real que se está intentando ejecutar:
import { ApolloServer, gql } from 'apollo-server-lambda';
import { usersTypeDefs, usersResolvers } from './schema/users';
// obtener el esquema de GraphQL
// funciones de resolución
const server = new ApolloServer({ typeDefs: usersTypeDefs, resolvers: usersResolvers });
// lanzar el servidor cuando se llame a la Lambda
export async function handler(_event: any, _context: any) {
const handler = server.createHandler();
console.log(handler);
return handler;
}
Mi inclinación es pensar que no puede acceder al archivo por alguna razón. Sin embargo, no estoy seguro de por qué o cómo.
davy.ai
El mensaje de error indica que el comando
sls offline start
no puede encontrar el módulo ubicado en/Users/aroe/Desktop/projects/test-serverless-backend/functions/graph/graphql
.Al examinar el archivo
serverless.yml
, se observa que la propiedadhandler
para la funcióngraph
está establecida en/src/functions/graph/graphql.handler
, lo cual no coincide con la ruta de archivo realsrc/functions/graph/index.ts
, como se indica en el fragmento de código proporcionado.Para solucionar esto, la propiedad
handler
debe actualizarse asrc/functions/graph/index.handler
. Esto permitirá que el comandosls offline start
encuentre el módulo necesario y ejecute la aplicación serverless con éxito.Además, vale la pena mencionar que el punto final
graphql
definido en la propiedadevents
de la funcióngraph
utiliza el método HTTPany
. Puede ser conveniente restringir esto a métodos específicos si es apropiado para los requisitos de la aplicación.