使用AWS Lambda

时间:2017-07-20 02:25:42

标签: mysql node.js amazon-web-services aws-lambda

我有以下代码要执行。我试过要求mysql和node-mysql,他们都给我同样的错误:

代码:

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导入节点或使其工作?

3 个答案:

答案 0 :(得分:2)

哦,所以预计这会发生。

问题是AWS Lambda在不同的计算机上运行,​​您无法将该特定计算机配置为在自定义环境中运行。但是,您可以将mysqlnode-mysql的节点模块打包为zip并上传到AWS Lambda。步骤是,

  1. npm install mysql --save
  2. 压缩文件夹并包含您的节点包
  3. 将此zip文件作为您的代码上传到AWS Lambda。
  4. 您还可以使用无服务器框架采取更好的方法。更多信息here。在这种方法中,您编写了一个YAML文件,其中包含您要部署lambda的所有详细信息和配置。在lambda配置下,在nodemodule/** - &gt;下指定节点模块的路径(例如package)。 include部分。这将根据您的代码打包您的必需品。稍后使用命令行可以部署此lambda。它使用AWS Cloudformation服务,是部署资源的最佳方式之一。

    有关使用无服务器框架打包的更多信息,请访问here

    注意:要使用无服务器框架,需要执行几个步骤,例如为用户获取API密钥,在IAM中设置正确的权限等。这些只是初始设置,以后不再需要。在使用无服务器框架进行部署之前执行这些操作。

    希望这有帮助!

答案 1 :(得分:1)

如果任何机构需要替代方案,

您可以使用cloud9 IDE,它可以免费打开lambda函数,并使用终端窗口针对lambda函数文件夹执行npm init,这将提供节点包文件,然后可用于安装依赖项。

答案 2 :(得分:0)

如果使用 package.json,只需在下面添加并运行“npm install”

{ “依赖关系”:{ “mysql”:“2.12.0” } }