2017-07-20 342 views
1

我有以下我想要執行的代碼。我曾嘗試要求MySQL和節點mysql和他們都給予我同樣的錯誤:使用AWS Lambda在NodeJS中找不到MySQL使用AWS Lambda

代碼:

var AWS = require("aws-sdk"); 
var mysql = require("mysql"); 


exports.handler = (event, context, callback) => { 

    try { 

     console.log("GOOD"); 

    } 

    catch (error) { 
     context.fail(`Exception: ${error}`) 
    } 


}; 

錯誤:

{ 
    "errorMessage": "Cannot find module 'mysql'", 
    "errorType": "Error", 
    "stackTrace": [ 
    "Function.Module._load (module.js:417:25)", 
    "Module.require (module.js:497:17)", 
    "require (internal/module.js:20:19)", 
    "Object.<anonymous> (/var/task/index.js:2:13)", 
    "Module._compile (module.js:570:32)", 
    "Object.Module._extensions..js (module.js:579:10)", 
    "Module.load (module.js:487:32)", 
    "tryModuleLoad (module.js:446:12)", 
    "Function.Module._load (module.js:438:3)" 
    ] 
} 

如何使用lambda導入MySQL來節點或讓這個工作?

+0

你安裝了mysql嗎? 'npm install mysql'或者其他的東西? – CanSpice

+0

這是在aws lambda。我不知道該怎麼做。 aws-sdk我可以在不導入的情況下調用。 – applecrusher

+0

我想我需要上傳一個package.json文件,而不是使用內聯編輯器。 – applecrusher

回答

2

Ohk因此預計會發生這種情況。

問題是AWS Lambda在不同的機器上運行,您無法配置該特定機器在自定義環境中運行。但是,您可以將節點模塊mysqlnode-mysql打包爲zip並上傳到AWS Lambda。操作步驟,

  1. npm install mysql --save
  2. 郵編您的文件夾和包括您的節點包
  3. 上傳這個zip文件作爲AWS LAMBDA你的代碼。

您還可以通過使用無服務器框架採取更好的方法。更多信息here。在這種方法中,您編寫了一個YAML文件,其中包含您想要用來部署lambda的所有細節和配置。在您的lambda配置下,在package - >include部分指定節點模塊的路徑(例如,nodemodule/**)。這會將您的代碼與您的代碼一起打包。後來使用命令行,你可以部署這個lambda。它使用AWS Cloudformation服務,並且是部署資源的最佳方式之一。

有關使用無服務器框架打包的更多信息可以在here找到。

注意:要使用無服務器框架,需要爲您的用戶獲取API密鑰,在IAM中設置正確的權限等幾個步驟。這些只是初始設置,將不再需要。在使用無服務器框架進行部署之前,請執行這些操作。

希望這會有所幫助!

+0

它的確如此。謝謝!我只希望Lambda能夠在內聯編輯器中檢測外部庫。我做了一個錯誤的假設,就像aws,已經在那裏預先配置好了。 – applecrusher