使用 AWS Lambda 无法在 NodeJS 中找到 MySQL

2023-11-29

我想执行以下代码。我尝试要求 mysql 和 node-mysql ,它们都给了我同样的错误:

Code:

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


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

    try {

        console.log("GOOD");

    }

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


};

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


哦,所以这预计会发生。

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

  1. npm install mysql --save
  2. 压缩您的文件夹并包括你的节点包
  3. 上传此 zip 文件作为 AWS Lambda 中的代码。

您还可以使用无服务器框架采取更好的方法。更多信息here。在这种方法中,您编写一个 YAML 文件,其中包含您想要用来部署 lambda 的所有详细信息和配置。在 lambda 配置下,指定节点模块的路径(例如,nodemodule/**) under package -> include部分。这会将您所需的内容与您的代码一起打包。稍后您可以使用命令行部署此 lambda。它使用 AWS Cloudformation 服务,是部署资源的最受欢迎的方式之一。

有关使用 Serverless Framework 进行打包的更多信息,请参阅here.

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

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 AWS Lambda 无法在 NodeJS 中找到 MySQL 的相关文章