简体   繁体   中英

Node.js Lambda - Using TypeORM with MySql

I'm trying to build some lambda's in node.js and I am using TypeORM with MySql. I have installed all required node modules but when I deploy lambda (via serverless) and test it, I get errors as follows. Using gulp to build and package .zip.

Log output from test lambda:

START RequestId: 671bed10-81b0-11e7-af34-251688cfdd Version: $LATEST
2017-08-15T11:53:50.594Z    671bed10-81b0-11e7-af34-251688cfdd  
(node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection 
(rejection id: 2): DriverPackageNotInstalledError: Mysql package has 
not been found installed. Try to install it: npm install mysql --save
2017-08-15T11:53:50.596Z    671bed10-81b0-11e7-af34-251688cfdd  Method:  
"GET"
2017-08-15T11:53:50.596Z    671bed10-81b0-11e7-af34-251688cfdd  Started 
....
2017-08-15T11:53:50.596Z    671bed10-81b0-11e7-af34-251688cfdd  
Finished ....
2017-08-15T11:53:50.596Z    671bed10-81b0-11e7-af34-251688cfdd  
(node:1) PromiseRejectionHandledWarning: Promise rejection was handled 
asynchronously (rejection id: 2)
2017-08-15T11:53:50.597Z    671bed10-81b0-11e7-af34-251688cfddb2    
Console error:  { DriverPackageNotInstalledError: Mysql package has not 
been found installed. Try to install it: npm install mysql --save
at t.Error (native)
at new t (/var/task/index.js:1:48637)
at e.loadDependencies (/var/task/index.js:1:314938)
at new e (/var/task/index.js:1:311241)
at e.createDriver (/var/task/index.js:1:111709)
at e.create (/var/task/index.js:1:104246)
at e.<anonymous> (/var/task/index.js:1:110994)
at r (/var/task/index.js:1:103453)
at Object.next (/var/task/index.js:1:102788)
at /var/task/index.js:1:102697
name: 'DriverPackageNotInstalledError',
message: 'Mysql package has not been found installed. Try to install 
it: npm install mysql --save' }
END RequestId: 671bed10-81b0-11e7-af34-251688cfdd
REPORT RequestId: 671bed10-81b0-11e7-af34-251688cfdd    Duration: 8.71 
ms  Billed Duration: 100 ms     Memory Size: 1024 MB    Max Memory 
Used: 39 MB 

My research has led me to believe that it won't package correctly because its a native module. But i'm not sure. If so is there anyway to get native node modules to work with lambda's?? Any help would be much appreciated, thanks.


EDIT

Folder Structure:

deploy
-- dev
---- serverless.yml
---- PROJECT.zip
-- test
---- serverless.yml
---- PROJECT.zip
-- prod
---- serverless.yml
---- PROJECT.zip

node_modules
-- *
---- *

src
-- api
---- User
------ index.ts
-- data
---- User.ts
-- models
---- User.ts

gulpfile.js
index.ts
package.json
tsconfig.json
tslint.json

Gulp file calls a function from aws-lambda-typescript module that has numerous gulp tasks.

const gulp = require('gulp');
const awsLambdaTypescript = require('aws-lambda-typescript');

awsLambdaTypescript.registerBuildGulpTasks(gulp, __dirname);

Gulp packages .zip in a dist folder and then i copy to deploy>dev and then serverless deploy.

Thanks for your help!

Most likely something is wrong with your packaging process. I'd check the following items:

  1. Check your package.json if mysql is there.
  2. Check the zip file inside your .serverless directory to see if it includes your node_modules.
  3. Download the lambda package that you uploaded and again check if node_modules are there.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM